所以我想尝试构建 2.6.39-4。我按照以下程序进行操作ubuntu wiki“GitKernelBuild”页面。
简而言之,下载 tar.bz2,解压,复制我的旧配置,制作旧配置,然后
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
一切顺利,我现在正在使用这个内核,除了一个小问题:我无法构建其他模块、构建 dkms 等。更多信息如下:
生成的deb文件有两个:
linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
我对此有点困惑。
在普通的 ubuntu 内核中,即使是 mainline-ppa 中的内核,也会安装三个 deb 文件。例如,对于来自主线 PPA存在这些包:
linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb
如您所见,有两个不同的头包。实际上,安装它们之后,主线 ppa 包会在 /lib/modules 下创建一个目录:
/lib/modules/2.6.39-02063904-generic
在该目录中,存在一个符号链接,指向 /usr/src 下的 -generic 标头
/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic
在 /usr/src 下,此内核有两个不同的目录
/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904
现在,这是我自己的两个包的问题:
/usr/src 中只有一个文件夹,
/usr/src/linux-headers-2.6.39.4-custom
在 /lib/modules 下有一个文件夹
/lib/modules/linux-headers-2.6.39.4-custom
真正的问题以及我写这篇文章的原因是上述目录中创建的这个符号链接:
/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4
如您所见,它链接回了我构建内核的目录 - 当然,该目录之后可能不存在。这会导致其他模块(例如 vmware、virtualbox 等)无法构建,因为它找不到重要的东西。
为什么会发生这种情况?如何修复?为什么生成了两个而不是三个 deb 文件?官方发布的这三个不同的 deb 文件有什么用途?其他人怎么能创建它们?
答案1
回答第一个问题为什么只有两个包?或者为什么没有两个头文件?——当它们进行交叉编译时,它们被打包起来以处理每个用例。通过将标头拆分成更大的全部软件包和较小的特定架构文件,这样您就可以节省带宽,将它们推送给用户。当您自己做这件事时,您只需要一个架构文件,因此一个头文件就可以了。
至于指向源位置的符号链接,我也遇到了同样的问题。除了生成一个linux_source
包(只需在之后添加kernel_image kernel_headers
)然后手动修复符号链接之外,我没有找到其他好的解决方法。
其实已经对这方面的事情提出了一个问题长期解决方案似乎是在每次安装内核后运行一个脚本来修复 symink。