从内核模块读取dmesg

时间:2012-07-30 11:34:47

标签: linux module kernel

我试图从内核模块中简单地读取内核环缓冲区。也称为/ 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

1 个答案:

答案 0 :(得分:2)

您需要使用导出的符号重新编译内核。

EXPORT_SYMBOL (do_syslog);