我正试图为Nvidia的Jetson TK1板编译一个自定义内核,而且除了内核本身(zImage)之外,我还需要/usr/src/linux-headers-{version}和/lib/modules/{version}。
但是,我看不出如何创建linux头。我尝试过运行make headers_install,但它似乎没有创建与我在其他/usr/src/linux-headers目录中看到的输出类型相同的输出。
我看到了其他类似的问题,比如这里,但是这假设您构建的版本与运行的版本相同,而我正在尝试使用不同的LOCAL_VERSION构建该版本。
我是从一个"Linux4Tegra“发行版开始的,不过,我正在尝试基于Ubuntu的定制系统。
为了澄清,我试图用我自己的LOCAL_VERSION创建一个内核,即我自己的版本,而不是任何存储库中的现有版本。我想要生成与此匹配的标题。因此,安装linux报头-xxx包不会解决我的问题。
我的问题是,这些包最初是如何从linux源代码中创建的?
当我查看现有头目录中的文件时,它包含对内核版本的引用,所以我假设这是从linux源代码的那个版本生成的。我怎样才能产生这些?当某个人正在编译内核的一个版本时,他们肯定会以某种方式生成这些文件?
发布于 2018-02-18 15:41:48
迟答。我最近遇到了这个问题,我找到了一个可能的答案。
假设您希望将内核头文件安装到/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_prepare make目标
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
这将确保内核包含所需的信息。该目标仅作为一种简单的方法存在,以准备用于构建外部模块的内核源代码树。注意:即使设置了modules_prepare,“Module.symvers”也不会构建CONFIG_MODVERSIONS;因此,需要执行完整的内核构建才能使模块版本化工作。
https://unix.stackexchange.com/questions/270123
复制相似问题