二、内核中的信息打印-->printk

1、打印级别

vim include/linux/printk.h +9
内核中的打印级别,8个级别,(0~7)级,数值越小,级别越高
(0~2)3个级别不常用,
(3~7)4个级别会常用,

  vim ./include/linux/printk.h +9

  09 #define 	KERN_EMERG  	"<0>"   系统(不使用)	     /* system is unusable           */
  10 #define 	KERN_ALERT  	"<1>"   立即执行(操作系统使用) /* action must be taken immediately */
  11 #define 	KERN_CRIT   	"<2>"  	紧急情况(临界条件)     /* critical conditions          */
  12 #define 	KERN_ERR    	"<3>"   错误	             /* error conditions         */
  13 #define 	KERN_WARNING    "<4>"   警告	             /* warning conditions           */
  14 #define 	KERN_NOTICE 	"<5>"   提示	             /* normal but significant condition */
  15 #define 	KERN_INFO   	"<6>"   正常打印	             /* informational            */
  16 #define 	KERN_DEBUG  	"<7>"   调试	             /* debug-level messages         */

printk(打印级别 "这里和printf的使用方法一样");
printk("这里和printf的使用方法一样"); --->不填打印级别即为默认级别

2、终端显示

终端显示的时候有一个终端级别,只有打印级别大于终端级别的时候,消息才会在终端上显示
查看终端级别 cat /proc/sys/kernel/printk 结果为 4 4 1 7

4                4                     1                       7
终端级别    默认消息级别    终端最高级别    终端最低级别

ubuntu终端默认被修改为不能显示内核打印信息
需要进入虚拟终端中进行测试上述效果

进入虚拟终端	Ctrl + Alt + [F1~F6]
退出虚拟终端	Ctrl + Alt + [F7]

Ubuntu上修改printk文件的默认消息级别

su    root           进入 root 用户模式
echo 4 3 1 7 > /proc/sys/kernel/printk
exit                 退出 root 用户模式

以后在使用的时候就是修改后的消息级别

开发板上修改printk文件的默认消息级别

vim ~/rootfs/etc/init.d/rcS                 rcS--->内核启动后运行的第一个脚本
添加内容
echo 4 3 1 7 > /proc/sys/kernel/printk

dmesg命令

dmesg	将Ubuntu开机到目录的时间点所有的信息显示出来
dmesg -c	清除打印信息,先回显后清除
dmesg -C	清除打印信息,直接清除,不回显

如果不会主动回显,可以使用dmesg命令查看

3、模块编写

 1	#include <linux/init.h>
 2	#include <linux/module.h>
 3	
 4	static int __init myprintk_init(void)
 5	{
 6		printk(KERN_EMERG "[0]:%s:%d:system is unusable",__func__,__LINE__);
 7		printk(KERN_ALERT "[1]:%s:%d:action must be taken immediately",__func__,__LINE__);
 8		printk(KERN_CRIT "[2]:%s:%d:critical conditions",__func__,__LINE__);
 9		printk(KERN_ERR "<3>:%s:%d:error conditions",__func__,__LINE__);
10		printk(KERN_WARNING "<4>:%s:%d:warning conditions",__func__,__LINE__);
11		printk(KERN_NOTICE "<5>:%s:%d:normal but significant confition",__func__,__LINE__);
12		printk(KERN_INFO "<6>:%s:%d:informational",__func__,__LINE__);
13		printk(KERN_DEBUG "<7>:%s:%d:debug-level messages",__func__,__LINE__);
14	
15		return 0;
16	}
17	
18	static void __exit myprintk_exit(void)
19	{
20		printk(KERN_EMERG "[0]:%s:%d:system is unusable",__func__,__LINE__);
21		printk(KERN_ALERT "[1]:%s:%d:action must be taken immediately",__func__,__LINE__);
22		printk(KERN_CRIT "[2]:%s:%d:critical conditions",__func__,__LINE__);
23		printk(KERN_ERR "<3>:%s:%d:error conditions",__func__,__LINE__);
24		printk(KERN_WARNING "<4>:%s:%d:warning conditions",__func__,__LINE__);
25		printk(KERN_NOTICE "<5>:%s:%d:normal but significant confition",__func__,__LINE__);
26		printk(KERN_INFO "<6>:%s:%d:informational",__func__,__LINE__);
27		printk(KERN_DEBUG "<7>:%s:%d:debug-level messages",__func__,__LINE__);
28	
29	}
30	
31	module_init(myprintk_init);
32	module_exit(myprintk_exit);
33	MODULE_LICENSE("GPL");
posted on 2020-12-06 14:59  八杯水  阅读(726)  评论(0)    收藏  举报