安装修改后的内核头以访问内核程序

时间:2014-06-04 19:20:53

标签: linux kernel

我是内核编程的新手,我想修改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
  6. 上面提到的链接讨论了如何将内核头文件安装到/ usr / include以访问用户空间进程

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

    编辑:

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

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

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

1 个答案:

答案 0 :(得分:0)

  

但问题仍然存在,为什么/ 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只包含构建自己的模块所需的最小内核部分(不仅仅是头文件)。