gpt4 book ai didi

linux - 从内核模块读取 dmesg

转载 作者:太空狗 更新时间:2023-10-29 12:20:15 24 4
gpt4 key购买 nike

我试图简单地从内核模块中读取内核环形缓冲区。也称为/proc/kmsg 和 dmesg 输出。

环顾四周,似乎调用的是 sys_syslog();从我读过的内容来看,dmesg 使用 syslog(),它使用驻留在 printk.c 中的 do_syslog()。

我 grep 发现 do_syslog() 是在 linux/syslog.h 中定义的,所以我包含了这个文件。

在测试模块中对 do_syslog() 的实际调用如下所示:

read_bytes = do_syslog(2, temp_buffer, 1024, 0);

其中 temp_buffer 只是一个用于测试目的的 char temp_buffer[1024]。

程序可以编译,但是当我尝试加载模块时它失败了:

insmod: error inserting 'testing.ko': -1 Unknown symbol in module

从 dmesg 我看到:“Unknown symbol do_syslog (err 0)”

为什么这是一个未知符号?我需要链接到什么东西吗?

生成文件如下:

obj-m += testing.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

最佳答案

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

EXPORT_SYMBOL (do_syslog);

关于linux - 从内核模块读取 dmesg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com