【问题标题】:How to extract kernel headers for compiling kernel module later如何提取内核头文件以便稍后编译内核模块
【发布时间】:2013-10-29 11:05:16
【问题描述】:

我从 git 存储库编译了各种 Linux 内核。有时我将内核复制到其他系统并需要内核头来编译外部模块。

我尝试运行“make headers_install”,但它只生成了一个 include/ 文件夹。当我尝试将外部模块指向该文件夹时,它抱怨找不到 Makefile。

打包 kernel-header 以进行部署的正确方法是什么?

谢谢。

【问题讨论】:

  • There are times when I copied the kernel to other system and need the kernel header to compile external module. 是什么意思?将内核根目录复制到另一个系统?如果是,那么您只需要通过提供构建内核的路径来弄清楚如何构建模块。
  • @VivekS 我不想将整个内核根目录复制到另一个系统,因为它是一个 git 树,所以它很大。我只想复制内核源代码的快照。甚至,我不想使用 git archive 因为构建内核模块,我不需要 .c 文件。

标签: linux-kernel


【解决方案1】:

改为创建内核包,对于基于 dpkg 的发行版是“make deb-pkg”,对于基于 RPM 的发行版是“make rpm-pkg”。这些创建了多个包,其中一个是可用于外部模块构建的包。对于 Debian 软件包应该是 linux-headers-*,对于 RPM 版本应该是“devel”软件包。

【讨论】:

  • 这几乎正是我正在寻找的。如果只生成头文件就完美了,因为我的内核映像很大(~500MB),所以生成不使用的内核映像需要一段时间。不过,如果不出意外,这是一个可行的解决方案!
  • 我刚刚发现还有一个 binrpm-pkg 目标,它至少不应该构建源包(除非 devel 包算作源包,我不知道)。 Makefile 和脚本在脚本/包中。我不太了解 RPM 构建,但如果您知道,您可以修补 Makefile 中的 rpm 调用以构建您需要的包。
  • 在 Debian 上,kernel-package 包中有 make-kpkg 程序;我发现构建内核映像和安装头文件的最简单方法。
  • @TobySpeight make-kpkg 很久以前就相关了。然后上游的make deb-pkg 目标做了所有事情,同时不像make-kpkg 那样不可靠(它经常与最新的内核IIRC 中断)。似乎仍有用户,但我认为没有必要。
【解决方案2】:

在某些方面,这只是the previous answer 的扩展。如果您查看内核源代码中的文件 scripts/package/builddeb,您会发现脚本代码从内核构建中选择构建外部模块所需的文件并将它们放入 /usr/src/linux-headers-$version。通过在 builddeb 文件中搜索字符串“# Build kernel header package”,我可以在本地内核版本中找到该脚本代码。如果您想手动执行操作,可以手动执行该脚本代码。

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2012-02-22
    相关资源
    最近更新 更多