我是内核编程的新手,我想修改arch / x86 / include / asm / tlbflush.h中的头文件,以便我的内核模块可以使用此头文件导出的一个函数。
我有3.2.59内核的源代码,并对tlbflush.h进行了更改。我包含了头文件tlbflush.h。当我编译模块时,我得到一个警告,说我找不到我正在使用的函数,因此我无法修改我的内核模块。
我经历了以下事情 how to export a modified kernel header
并尝试以下步骤来安装修改后的内核头文件:
上面提到的链接讨论了如何将内核头文件安装到/ usr / include以访问用户空间进程
我想提一下,由于在我的ubuntu机器上进行了升级,我安装了很多头文件。所有这些都有3.2.0-59,3.2.0-xx等扩展 虽然我不确定,但我认为3.2.0-59与3.2.59相同。如果这是错误的,请纠正我。谢谢!
编辑:
很抱歉,我对/ usr / src / ...文件夹中的标题与正在修改的内核源代码中的标题感到困惑。我对我下载的内核源代码的标题进行了更改,之后就没有警告了。
但问题仍然存在,为什么/ usr / src /中使用了内核头文件?
如果你花在这上面,我很抱歉浪费时间。
答案 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只包含构建自己的模块所需的最小内核部分(不仅仅是头文件)。