【问题标题】:Install a modified kernel header for access to kernel programs安装修改后的内核头文件以访问内核程序
【发布时间】:2014-07-25 14:20:59
【问题描述】:

我是内核编程的新手,我想修改 arch/x86/include/asm/tlbflush.h 中的头文件,以便我的内核模块可以使用此头文件导出的功能之一。

我有 3.2.59 内核的源代码并对 tlbflush.h 进行了更改。我包含了头文件 tlbflush.h。当我编译模块时,我收到一条警告,说我正在使用的函数未找到,因此我无法安装我的内核模块。

我经历了以下 how to export a modified kernel header

并尝试了以下步骤来安装修改后的内核头文件:

  1. 制作
  2. sudo make modules_install
  3. sudo make headers_install INSTALL_HDR_PATH=/usr/include
  4. sudo make install
  5. sudo update-initramfs -c -k 3.2.59

提到的链接谈到将内核头文件安装到 /usr/include 以访问用户空间进程

我想提一下,由于在我的 ubuntu 机器上进行了升级,我安装了这么多头文件。它们也都有扩展,如 3.2.0-59、3.2.0-xx 我认为 3.2.0-59 与 3.2.59 相同,但我不确定。如果这是错误的,请纠正我。谢谢!

编辑:

对不起,我对 /usr/src/... 文件夹中的标头与正在修改的内核源代码中的标头感到困惑。我对下载的内核源代码的标题进行了更改,之后现在没有警告了。

但问题仍然存在,为什么要使用 /usr/src/ 中的内核头文件?

如果您花在这上面,我很抱歉浪费了时间。

【问题讨论】:

    标签: linux kernel


    【解决方案1】:

    但问题仍然存在,为什么要使用 /usr/src/ 中的内核头文件?

    实际上,没有人强迫这样做。如果您使用标准 Makefile 来构建模块,那么它就是一个声明它的地方。 我的包含以下行:

    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    

    如果你检查/lib/modules/$(shell uname -r)/build 到底是什么,你会发现这是一个指向内核源所在文件夹的符号链接。

    ~ $ ls -l /lib/modules/$(uname -r)/build
    lrwxrwxrwx 1 root root 32 Jun  9 04:46 /lib/modules/3.12.21-gentoo-r1/build -> /usr/src/linux-3.12.21-gentoo-r1
    

    对于 ubuntu,linux-headers 仅包含构建您自己的模块所需的最少内核部分(不仅是头文件)。

    【讨论】:

    • 但是如果你正在构建应用程序呢?然后它仍然会使用 /usr/include 正确的文件夹。那么在这种情况下,我们是否也需要使用 /usr/src/linux-** 中的文件来更新 /usr/include 文件?
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2011-09-24
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2013-10-29
    • 2020-04-14
    相关资源
    最近更新 更多