我试图从内核模块中简单地读取内核环形缓冲区。也称为 /proc/kmsg 和 dmesg 输出。
环顾四周,似乎对此的调用是 sys_syslog(); 从我读过的内容来看,dmesg 使用 syslog(),它使用位于 printk.c 中的 do_syslog()。
我四处寻找,发现 do_syslog() 是在 linux/syslog.h 中定义的,所以我包含了这个文件。
测试模块中对 do_syslog() 的实际调用如下所示:
read_bytes = do_syslog(2, temp_buffer, 1024, 0);
其中 temp_buffer 只是一个用于测试目的的 char temp_buffer[1024]。
该程序可以编译,但是当我尝试加载模块时它失败了:
insmod:插入'testing.ko'时出错:模块中的-1未知符号
从 dmesg 我看到:“未知符号 do_syslog (err 0)”
为什么这是一个未知符号?我需要链接一些东西吗?
生成文件如下:
obj-m += testing.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules