如何构建主线内核源码包?

Max*_* R. 4 repository kernel mainline-kernel

Ubuntu 内核 PPA仅提供 linux-headers*.deb 和 linux-image*.deb 包。如何构建相应的 linux-source*.deb 包?

语境:

我目前正在运行带有主线内核(现在是3.2 rc6)的Ubuntu 11.10,以更好地支持我的 sandybridge IGP(带有 intel 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.
Run Code Online (Sandbox Code Playgroud)

看来我可能不需要完整的源代码,但我仍然想尝试安装它,看看它是否能解决我的问题。

我试过的:

  1. 解压 kernel.org 源文件档案/usr/src/。DKMS 还在抱怨。
  2. 使用 uupdate 手动更新内核源包和主线源包,如解释here。没有成功。
  3. 按照@roadmr 和@elmicha 说明手动构建 linux-source 包。我最终成功构建了它,但 DKMS 仍然抱怨缺少源代码。
  4. 最后,我注意到一个错误,我在重新安装内核头文件时没有首先发现。看来我得到的 .deb 可能已损坏,再次下载它可以解决问题:) 唉,虽然 DKMS 同意编译该模块,但我遇到了以下错误,该错误似乎已被报告。这个问题尚未解决,但我不会尝试,因为以下原因:最后我决定通过 xorg-edgers ppa 测试精确的内核版本 3.2-rc6,它似乎已正确修补:它有效。

尽管如此,了解如何构建主线 linux-source 包可能仍然很有趣,因为 Ubuntu 内核团队不提供它。更何况我在这个过程中学到了很多^^

roa*_*dmr 5

看起来你足够勇敢:) 你可以尝试按照这些说明从主线内核创建你自己的 .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/ 目录的源代码树,这是让您构建软件包的控制文件所在的位置。不过这不是什么大问题。很容易得到一个可打包的源代码树:

  1. 获取主线内核树

    git clone https://github.com/torvalds/linux.git
    
    Run Code Online (Sandbox Code Playgroud)
  2. 查看最新的主线内核(截至今天http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.2-rc6-precise/)。共有三个补丁文件(0001-base-packaging.patch、0002-debian-changelog.patch、0003-default-configs.patch)。下载这三个文件。

  3. 切换到新的 linux 源目录并按顺序应用所有 3 个补丁:

    patch -p1 <0001-base-packaging.patch
    
    patch -p1 <0002-debian-changelog.patch
    
    patch -p1 <0003-default-configs.patch
    
    Run Code Online (Sandbox Code Playgroud)

您现在将拥有一个包含打包信息的不错的 debian/ 目录。然后,您可以应用我上面提到的两个 URL 中的说明,从您的内核配置和构建软件包。希望这也将创建一个内核源代码包。