二、内核中的信息打印-->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  八杯水  阅读(738)  评论(0)    收藏  举报