我试图从内核模块中简单地读取内核环缓冲区。也称为/ 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(错误0)”
为什么这是一个未知的符号?我是否需要链接某些内容?
makefile如下:
obj-m += testing.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
答案 0 :(得分:2)
您需要使用导出的符号重新编译内核。
EXPORT_SYMBOL (do_syslog);