在插入ko时,都是用dmesg去查看打印信息

dmseg

dmesg      #打印内核信息
dmesg -C   #清楚内核打印信息
dmesg -c   #打印并清除
dmesg | grep usb #筛选出带usb的信息

那有没有什么方法直接显示打印呢?有的,兄弟,有的

使用如下命令去查看打印等级

cat /proc/sys/kernel/printk

4	4	1	7

那这些打印出来的数字代表什么意思呢?

我们查看这个路径的源码kernel/printk/printk.c

可知:

4        代表控制台打印等级

4        代表默认消息打印等级

1        代表最小控制台打印等级

7        代表默认控制台打印等级

数字越小,等级越高,insmod的ko之所以不能直接打印printk的信息,是因为默认打印消息没能小于控制台打印消息,所以要改变printk的打印等级

在这个路径下include/linux/kern_levels.h对应着打印等级对应的宏定义 

方法一:调用printk时设置打印等级

printk("KERN_EMERG")

#include <linux/module.h>
#include <linux/init.h>

static int helloworld_init(void){
    printk(KERN_EMERG "hello world\n");
	return 0;
}
static void helloworld_exit(void){
    printk("bye hello world\n");
}

module_init(helloworld_init);
module_exit(helloworld_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("quan");
MODULE_VERSION("v1.0");


qemu测试,符合预期

[root@user mnt]# insmod print_level.ko 
[  319.139491] hello world
[root@user mnt]# rmmod print_level.ko 
[root@user mnt]# 

方法二:使用echo直接修改打印等级

echo 0 4 1 7 > /proc/sys/kernel/printk #都不打印

echo 7 4 1 7 > /proc/sys/kernel/printk #全打印

方法三: 通过menuconfig设置打印

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐