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

时间:2017-01-26 21:00:53

标签: c linux linux-kernel kernel-module

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

2 个答案:

答案 0 :(得分:4)

无法获取内核中模块文件的路径:内核不会存储它。而且,内核甚至都不知道这条路径。

有两个用于加载内核模块的系统调用:init_modulefinit_module(两者都在kernel/module.c中定义)。第一个接受指向用户空间区域的指针,其中模块图像驻留(用户空间应该在之前将模块文件读入该区域)。第二个接受描述符到模块的文件,但是这个描述符仅用于文件的读取内容,并且不存储。

答案 1 :(得分:3)

没有

首先:您的模块可能已经编译到内核中,因此不会有文件路径。

第二:从文件加载内核模块发生在用户空间中。使用init_module系统调用将内核作为数据缓冲区传递 - 从理论上讲,这个数据从未从文件中加载过。 (例如,可以想象一个模块加载器从网络或压缩存档加载模块。)