二、内核中的信息打印-->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");
浙公网安备 33010602011771号