在 运行 模块中获取 Linux 内核模块 ko 文件名

Get Linux kernel module ko file name within running module

在 运行 Linux 内核模块中,是否有一种简单的方法来确定 .ko 文件的完整文件名(即:/lib/modules/$(uname -r)/kernel/drivers/mymodule.ko)与模块关联,无需遍历 procfs,而是仅依赖内核 space 代码中可用的内部 structures/lists?

无法获取内核模块文件的路径:内核不存储它。而且,内核甚至不知道那个路径。

有两个用于加载内核模块的系统调用:init_modulefinit_module(均在 kernel/module.c 中定义)。第一个接受指向用户 space 区域的指针,模块图像所在的区域(用户 space 之前应该将模块文件读入该区域)。第二个接受模块文件的描述符,但此描述符仅用于读取文件内容,不会存储。

没有

第一:你的模块可能已经编译到内核中,因此没有文件路径。

其次:从文件加载内核模块发生在用户空间。使用 init_module 系统调用向内核传递一个模块作为数据缓冲区——理论上可能根本没有从文件加载此数据。 (例如,可以想象一个模块加载器从网络或压缩档案中加载模块。)