Ubuntu 内核 PPA仅提供 linux-headers*.deb 和 linux-image*.deb 包。如何编译相应的 linux-source*.deb 包?
语境:
我目前正在运行带有主线内核的 Ubuntu 11.10(3.2 rc6现在)以便更好地支持我的 sandybridge IGP(配备英特尔 i5-2520M CPU 的戴尔 E6420 笔记本电脑)。
出现,我想安装这个触摸板驱动程序ALPS 触摸板支持不佳(请参阅上一个链接错误报告),等待内核版本 3.3 中的上游支持。
问题是,DKMS 一直抱怨找不到完整的内核源代码:
Module build for the currently running kernel was skipped since the
kernel source for this kernel does not seem to be installed.
看来我可能不需要完整的源代码但我还是想尝试安装它,看看它是否能解决我的问题。
我尝试过:
/usr/src/
解压.DKMS中的 kernel.org 源档案仍然有抱怨。- 使用 uupdate 手动更新内核源码包和主线源码包,例如这里解释。没有成功。
- 按照 @roadmr 和 @elmicha 的指示手动构建 linux-source 包。我最终成功构建了它,但 DKMS 仍然抱怨缺少源。
- 最后,我注意到一个错误,我在重新安装内核头文件时没有注意到。看来我得到的 .deb 可能已损坏,再次下载它就可以解决问题 :) 唉,虽然 DKMS 同意编译模块,但我遇到了跟随误差似乎已经举报。这个问题还没有解决,但我不会尝试解决,因为:最后我决定通过 xorg-edgers ppa 测试精确的内核版本 3.2-rc6,它似乎是正确修补: 有用。
尽管如此,了解如何构建主流 linux-source 包可能仍然会很有趣,因为 Ubuntu 内核团队不提供它。更不用说我在这个过程中学到了很多东西 ^^
答案1
看起来你足够勇敢:)你可以尝试按照这些说明从主线内核创建你自己的.deb 包。
请先尝试阅读以下通用文档:
https://help.ubuntu.com/community/Kernel/Compile
这里有关于如何为 11.10 编译内核的具体说明(尽管您需要从 3.2 源代码树中进行此操作,因此有些内容可能会有所不同)。
http://blog.avirtualhome.com/2011/10/28/how-to-compile-a-new-ubuntu-11-10-oneiric-kernel/
现在,这些说明的问题是它们假设源代码树带有 debian/ 目录,而构建软件包的控制文件就驻留在该目录中。不过这不是什么大问题;获取可打包的源代码树很容易:
获取主线内核树
git clone https://github.com/torvalds/linux.git
查看最新的主线内核(截至今天http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.2-rc6-precise/)有三个补丁文件(0001-base-packaging.patch、0002-debian-changelog.patch、0003-default-configs.patch),下载这三个文件即可。
更改为全新的 Linux 源目录并按顺序应用所有 3 个补丁:
patch -p1 <0001-base-packaging.patch patch -p1 <0002-debian-changelog.patch patch -p1 <0003-default-configs.patch
现在您将拥有一个包含打包信息的 debian/ 目录。然后您可以应用我上面提到的两个 URL 中的说明来从内核配置和构建软件包。希望这也能创建一个内核源包。
答案2
应该可以构建上游内核源。如果您已经将其解压到 /usr/src/linux-XY:
cd /usr/src/linux-X.Y
# copy the configuration of the running kernel:
cp /boot/config-$(uname -r) .config
make oldconfig
fakeroot make-kpkg --initrd --append-to-version=-custom kernel-image kernel-headers
cd ..
ls -lrt *-custom*deb
# only install the latest *-custom*deb here:
sudo dpkg -i *-custom*deb
我一直在使用它,尽管我安装了一些 DKMS 包,但它们并没有抱怨。
答案3
您可以从 kernel.org 下载源代码
ppa 中的主线内核尚未打补丁
根据定义,主线内核构建是由未经改变的主线内核源制成的,因此不包含也不应该包含任何 Ubuntu 补丁或驱动程序。
答案4
要编译 Ubuntu 的主线内核,您可以按照我的博客中发布的以下说明进行操作:
为 Ubuntu 编译主线 Linux 内核:一篇详细的、分步的文章,介绍如何为 Ubuntu(Precise)编译和安装您自己的主线内核(v3.3)版本。
Ubuntu 上的 Linux 内核 3.6:一篇详细的、分步的文章,介绍如何为 Ubuntu 编译和安装您自己的主线 3.6 内核版本。它取决于上述文章执行的步骤。