如何创建 /usr/src/linux-headers-{version} 文件

Ale*_*lex 2 compiling header-file linux-kernel

我正在尝试为 Nvidia 的 Jetson TK1 板编译一个自定义内核,似乎除了内核本身(zImage)之外,我还需要/usr/src/linux-headers-{version}/lib/modules/{version}.

但是我看不到如何创建 linux-headers。我试过运行,make headers_install但它似乎没有创建与我在其他/usr/src/linux-headers目录中看到的相同类型的输出。

我见过其他类似的问题,例如here,但是这假设您正在构建与正在运行的版本相同的版本,我正在尝试使用不同的 LOCAL_VERSION 进行构建。

我从“Linux4Tegra”发行版开始,但是,我正在尝试制作基于 Ubuntu Core 的自定义系统。

澄清一下,我正在尝试使用我自己的 LOCAL_VERSION(即我自己的版本,而不是任何存储库中的现有版本)创建内核。我想生成与此匹配的标题。所以安装一个 linux-headers-xxx 包并不能解决我的问题。

我的问题是这些包最初是如何从 linux 源创建的?

当我查看现有 headers 目录中的文件时,它包含对该内核版本的引用,因此我假设这是从该版本的 linux 源代码生成的。我怎样才能生成这些?当有人编译内核版本时,他们肯定会以某种方式生成这些文件吗?

Sit*_*eng 5

迟到的答复。我最近遇到了这个问题,我找到了一个可能的答案。

假设您要将内核头文件安装到/usr/src/linux-headers-4.15.3. 编译好的内核源码树位于/path/to/compiled/linux-4.15.3/

首先,解压一个干净的内核源代码树

tar xvf linux-4.15.3.tar.xz
cd linux-4.15.3/
Run Code Online (Sandbox Code Playgroud)

其次,将您的.config文件复制到目录

cp /path/to/compiled/linux-4.15.3/.config .
Run Code Online (Sandbox Code Playgroud)

第三,运行它,然后删除源目录中的 .config 文件以获得干净的内核源代码

make O=/usr/src/linux-headers-4.15.3 oldconfig
rm .config
Run Code Online (Sandbox Code Playgroud)

四、运行modules_preparemake目标

make O=/usr/src/linux-headers-4.15.3 modules_prepare
Run Code Online (Sandbox Code Playgroud)

最后,删除无用的东西,复制需要的东西

rm /usr/src/linux-headers-4.15.3/source
cp /path/to/compiled/linux-4.15.3/Module.symvers /usr/src/linux-headers-4.15.3
Run Code Online (Sandbox Code Playgroud)

现在,该/usr/src/linux-headers-4.15.3目录能够构建模块。

文档https://www.kernel.org/doc/Documentation/kbuild/modules.txt告诉我们modules_prepare

这将确保内核包含所需的信息。目标仅作为一种为构建外部模块准备内核源代码树的简单方法而存在。

注意:即使设置了 CONFIG_MODVERSIONS,"modules_prepare" 也不会构建 Module.symvers;因此,需要执行完整的内核构建才能使模块版本控制工作。