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