printklinux
① printf和printk的区别
printk与printf的一个区别printk是“行驱动”的,也就是说只有收到一个换行符数据才会真正输出到终端,否则就不会有任何信息输出。另一个值得注意的问题是我们在调试嵌入式设备的时候,经常是从串口获得显示信息,如果我们使用printk过于频繁的话,串口的传输速度就会成为瓶颈,这样会造成系统的性能下降甚至停止反应。
printf功 能:产生格式化输出的函数
用 法:int printf(const char *format,[argument]);format 参数输出的格式,定义格式为:%[flags][width][.perc][F|N|h|l]type
printk:
printk相当于printf的孪生姐妹,她们一个运行在用户态,另一个则在内核态被人们所熟知。
补充:printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
② 如何修改arm linux中Printk的等级
1、查看当前控制台的打印级别
cat /proc/sys/kernel/printk
4 4 1 7
其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息
2、修改打印
echo "新的打印级别 4 1 7" >/proc/sys/kernel/printk
3、不够打印级别的信息会被写到日志中可通过dmesg 命令来查看
4、printk的打印级别
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
5、printk函数的使用
printk(打印级别 “要打印的信息”)
打印级别 既上面定义的几个宏
③ 怎么屏蔽Linux 内核中的printk 打印信息
echo 0 > /proc/sys/kernel/printk
将打印输出的优先级提高到最高
④ 急急急!!这个最简单的linux内核的printk打印不出信息是怎么回事
printk并不默认打印到终端,你加载进内核后,使用指令dmesg试试
⑤ 怎样屏蔽linux内核printk( ) 打印信息
你好,可以采用以下的宏来集体打开或者关闭printk:
/*
* Macros to help debugging
*/
#undef PDEBUG /* 假设之前就有定义,先取消,初始化 */
#ifdef SCULL_DEBUG
#ifdef __KERNEL__
/* This one if debugging is on, and kernel space */
#define PDEBUG(fmt, args...) printk( KERN_DEBUG "scull: " fmt, ## args)
#else
/* This one for user space */
#define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
#endif
#else
# define PDEBUG(fmt, args...) /* not debugging: nothing */
#endif
#undef PDEBUGG
#define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */
在编译的时候,Makefile如下:
gcc -O -g -DSCULL_DEBUG -C $(KERNELDIR) M=$(shell pwd) moles
⑥ 为什么内核printk打印不出来,printk在<linux/kernel.h>有这个函数,为什么加载不到
首先,你编译的东西是一个Linux内核模块吗?
printk函数通常只只在Linux内核或内核模块中可用。
如果不是用在Linux内核中,你应该将printk替换成printf。
⑦ 嵌入式中printk的功能是什么
对于做嵌入式或者熟悉linux内核的人来说,对printk这个函数一定不会感到陌生。printk相当于printf的孪生姐妹,她们一个运行在用户态,另一个则在内核态被人们所熟知。
printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息的显示
⑧ 如何查看linux printk
用dmesg -c命令查看打印信息。 ctrl+alt+F1 切换到纯终端,可以在终端直接看到打印信息