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

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

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

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

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

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

澄清,我试图用我自己的 LOCAL_VERSION 创建一个内核,即我自己的版本,而不是任何存储库中的现有版本。我想生成与此匹配的标头。因此,安装 linux-headers-xxx 软件包无法解决我的问题。

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

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

答案1

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

假设您要将内核头文件安装到/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/

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

cp /path/to/compiled/linux-4.15.3/.config .

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

make O=/usr/src/linux-headers-4.15.3 oldconfig
rm .config

四、运行modules_preparemake目标

make O=/usr/src/linux-headers-4.15.3 modules_prepare

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

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

现在,该/usr/src/linux-headers-4.15.3目录可以构建模块了。

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

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

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

相关内容