是否有一种简单的方法可以在正在运行的Linux内核模块中确定与模块关联的.ko
文件的完整文件名(即:/lib/modules/$(uname -r)/kernel/drivers/mymodule.ko
),无需遍历procfs ,而只是依赖于内核空间代码中可用的内部结构/列表?
答案 0 :(得分:4)
您无法获取内核中模块文件的路径:内核不会存储它。而且,内核甚至都不知道这条路径。
有两个用于加载内核模块的系统调用:init_module
和finit_module
(两者都在kernel/module.c
中定义)。第一个接受指向用户空间区域的指针,其中模块图像驻留(用户空间应该在之前将模块文件读入该区域)。第二个接受描述符到模块的文件,但是这个描述符仅用于文件的读取内容,并且不存储。
答案 1 :(得分:3)
没有
首先:您的模块可能已经编译到内核中,因此不会有文件路径。
第二:从文件加载内核模块发生在用户空间中。使用init_module
系统调用将内核作为数据缓冲区传递 - 从理论上讲,这个数据从未从文件中加载过。 (例如,可以想象一个模块加载器从网络或压缩存档加载模块。)