gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:57 26 4
gpt4 key购买 nike

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

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

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

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

  1. 制作
  2. sudo make module_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 机器上进行了升级,我安装了很多 header 。而且它们都具有 3.2.0-59、3.2.0-xx 等扩展名我认为 3.2.0-59 与 3.2.59 相同,但我不确定。如果这是错误的,请纠正我。谢谢!

编辑:

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

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

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

最佳答案

But the question still remains that why are the kernel headers in /usr/src/ used?

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

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

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

~ $ 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 仅包含构建您自己的模块所需的最小内核部分(不仅仅是 header )。

关于linux - 安装修改后的内核头以访问内核程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com