【问题标题】:Get Linux kernel module ko file name within running module在正在运行的模块中获取 Linux 内核模块 ko 文件名
【发布时间】:2017-01-27 05:51:41
【问题描述】:

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

【问题讨论】:

    标签: c linux linux-kernel kernel-module


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      没有。

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

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

      【讨论】:

        猜你喜欢
        • 2014-09-03
        • 2021-06-10
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        相关资源
        最近更新 更多