如何滚动内核Ubuntu / Debian方式
版本1.0
作者:VirtualEntity <lafeyette_management [at] comast [dot] net>
关于如何构建内核的说明2.6
最后编辑1个月前by Oliver Grawert
Linux内核是您Ubuntu操作系统的核心。 Ubuntu附带的内核应该包含所有需要的驱动程序,但是如果您想调整内核,或者由于某种原因,您需要重新编译,因为本指南将为您提供帮助。
在KernelCompileHowto中可以找到一个不太详细的文档,显示与此相同的步骤。
预制
您将需要构建基本的fakeroot和kernel-package软件包来构建一个内核。
bash:~$ sudo apt-get install build-essential fakeroot kernel-package
内核内置在/ usr / src /目录中。 要在那里工作,请将自己添加到src组。
bash:~$ sudo adduser my_username src
将用户my_username添加到组src ...
完成
注销并重新登录。
bash:~$ groups
my_username src audio adm dialout cdrom floppy video plugdev lpadmin
将列出您所在的所有组,src应该是其中之一。
获取来源
找到你想要的内核源码
bash:~$ apt-cache search source 2.6
选择您喜欢的内核源代码。
*
/!\问:内核源有时被称为kernel-source-2.6.5等,有时候是linux-source-2.6.8.1。 为什么?
kernel-source来自Debian,linux-source来自Ubuntu。 如果可能,使用linux-source。 尽管如此,尽管所有的依赖关系还没有被改变,但是即使安装了linux-source,如果您收到关于“卸载的程序包内核源代码”的警告,则可以安全地忽略它们。 - 布朗森
使用以下命令下载内核源。
bash:~$ sudo apt-get install linux-source
{i}它可能建议安装软件包libncurses-dev和libqt3-dev,第一个是menuconfig,第二个是xconfig,至少安装一个(参见下文)。
它将下载并将源放在/ usr / src中
开箱来源
我将使用2.6.8.1内核作为例子,因为这是Ubuntu在写作时发布的最新内核。
bash:~$ cd /usr/src
bash:/usr/src$ ls -l
linux-source-2.6.8.1.tar.bz2
如果您看到一个名为linux的链接到较旧的内核源代码,请删除它。
bash:/usr/src$ rm linux
/!\如果链接仍然在那里,不要打开你的内核。 如果您的新源在您的旧内核源目录中被提取,则构建将不会成功。
并用
bash:/usr/src$ tar xjvf linux-source<version>.tar.bz2
/!\不要用sudo这样做,没有必要。
{i}如果源是.bz2,则使用tar jxvf,如果是.gz,则使用tar zxvf
这应该创建一个由你和src组拥有的名为linux-source-2.6.8.1的目录。
为内核源创建一个名为linux的链接
bash:/usr/src$ ln -s linux-source-2.6.8.1 linux
检查是否全部到位 你应该看到像:
bash:/usr/src$ ls
linux@ linux-source-2.6.8.1/ linux-source-2.6.8.1.tar.bz2
配置内核
有几种配置内核的方法。 你可能会使用“xconfig”。 一旦更改到/ usr / src / linux目录,就像这样启动:
bash:/usr/src/linux$ make xconfig
如果你不使用X,或者不想使用你的鼠标:
bash:/usr/src/linux$ make menuconfig
/!\ Warning:您需要确保至少将总线,磁盘和根文件系统驱动程序静态编译到内核中。 否则,您的新内核映像将无法启动。 有关不需要重新配置内核的技术,请参阅KernelBuildpackageHowto。
建立你的内核
make-kpkg
要构建内核,您将调用“make-kpkg”,这是一个自动化并替换“make dep; make clean; make bzImage; make modules”的脚本。 花几分钟时间阅读make-kpkg的手册页。 make-kpkg命令行可以是复杂的,最初是吓人的。 它的基本语法是
bash:/usr/src$ make-kpkg <options> <target>
你的目标是“kernel_image”。 我们来研究两个更重要和常见的选项,“--append-to-version”和“--revision”。
- 附加到版本
第一个选项允许您指定内核版本的一个补充,然后它将成为内核名称的一部分。 您可以使用字母数字字符“+”和“”。 (期间或全程); 不要使用下划线“_”。
这是我现在运行的内核:
bash:/usr/src$ /usr/src/$ uname -a
Linux da5id 2.6.8.1-2-k7 #1 Sat Sep 18 11:23:11 BST 2004 i686 GNU/Linux
/!\你应该避免使用--append-to-version值,例如“-686”,“-K7”和“-sparc”。 它们通常用于Debian预编译的内核。
内核模块位于/ lib / modules的子目录中; 每个内核都有自己的子目录。 每次使用新名称安装内核映像时,软件包安装程序将创建一个新的/ lib / modules子目录来保存其模块。
这意味着每次构建内核映像时,通过使用--append-to-version的新值,可以确保新内核将具有新名称,并且其模块不会与其他内核的内核冲突。
/!\如果安装的内核与已经安装的内核具有相同的名称(相同版本和--append-to-version),则安装新内核软件包将覆盖旧的内核及其模块。 你会被警告并提供机会中止。 拿去。 使用另一个值--append-to-version并重建。
- 修订
另一个make-kpkg选项是“--revision”,它会影响Debian软件包本身的名称,但不影响内核名称。 与--append-to-version一样,您只能使用字母数字字符“+”和“。”。 不要使用下划线“_”。 如果您没有为--revision提供值,则make-kpkg将使用“10.00.Custom”。
使用不同的--revision值不会阻止同名的内核之间的冲突。 他们只是为了看到差异,例如重新编译相同的内核,改变很小。
内核程序包名称
Debian的kernel-image文件名有形式
kernel-image-(kernel-version)( - append-to-version)_( - revision)_(architecture).deb
包名称是第一个下划线之前的所有内容。
bash:/usr/src$ ls
kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb
现在,您可以看到make-kpkg选项中不允许使用下划线? 它们分隔包名称的元素。
我建议为编译的每个内核使用不同的-append-to-version值,并让make-kpkg分配默认版本。 基于日期的价值观为我工作,但你可以自由地发明自己的计划。
{i}如果--append-to-version或--revision不清楚,或者如果您计划使用与我建议的不同的选项,请阅读/usr/share/doc/kernel-package/README.gz。 (一种方法是“zless README.gz”。)忽略风味和时代的讨论,直到您更熟悉make-kpkg和Debian包为基础; 他们现在不太可能对你有用
fakeroot
当您将自己添加到src组中时,可以使用正常用户权限执行大多数内核包的工作。 但是,作为内核软件包(如内核和内核模块)的一部分的文件将由root拥有并以root权限运行; 它们必须使用root权限创建。
使用fakeroot,您可以将make-kpkg作为普通用户启动,大部分作业将以正常权限运行。 接近作业结束,fakeroot将模拟根环境来创建内核映像包。
make-kpkg的手册页描述了一种使用fakeroot的方法; 我们将使用简单的方法将“fakeroot”放在make-kpkg命令行的开头,如下所示:
fakeroot make-kpkg <选项> <target>
制作内核映像
最后! 时间到了 您已准备好制作内核映像。
bash:/usr/src/linux $ fakeroot make-kpkg clean
然后做:
bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary
现在你可以做的只是等待电脑完成。 花几分钟时间,享受自己,而电脑做的是公平的工作。
安装内核映像包
内核映像构建完成后,您将安装内核映像包,其中包含内核及其模块。 首先检查以确保它是通过更改到/ usr / src目录并列出其内容成功构建的:
bash:/usr/src/linux$ cd ..
bash:/usr/src$ ls
kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb
linux@
linux-source-2.6.8.1/
linux-source-2.6.8.1.tar.bz2
在那里! 注意-append-to-version值如何成为内核名称的一部分。
要安装内核及其所有模块:
bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb
要从磁盘安装内核映像软件包(而不是从Debian存档安装),请使用完整的文件名。 您可以使用tab命令行完成。
如果一切顺利,你现在需要做的就是重启。 如果您的新内核无法启动,请启动以前的内核或插入启动软盘并重新启动。 返回配置内核,调整配置,然后重试。
把它全部包起来
拿那个内核!
如果你使用--append-to-version,你不需要担心apt-get尝试“升级”你的内核。 如果你是偏执狂(这是为了让你),你可以确保这样做:
bash:~$ echo "kernel-image-2.6.8.1.181004 hold" | sudo dpkg --set-selections
当然可以用你的内核的真正的名字来代替。 要引用一个dpkg知道的包(一个已安装的包或一个在档案列表中)使用包名而不是完整的文件名。 另外,“|” 字符是通过键入Shift- \。 检查包裹是否真的处于暂停状态; 如果你应该看到:
bash:~$ dpkg --get-selections | grep kernel-image
kernel-image-2.6.8.1.181004_10.00.Custom_i386.deb hold
/!\有人应该写关于持有包,它做什么等等
删除符号链接
接下来,您应该摆脱您在/ usr / src目录中创建的符号链接。 这有几个原因:
1.下一次下载内核时,可能不是来自Debian档案。 当您扩展源压缩包时,可以通过旧的符号链接覆盖旧的源代码树。 笨蛋
2.下次从Debian存档下载内核源代码时,可能会将源扩展到自己的树中,而不会出现问题。 但是,由于您已经在src目录中有一个名为“linux”的符号链接,所以您可以继续编译(当然,忘了链接到旧的源代码树)。
3.当您将修补程序或其他源代码下载到特定的源代码树中时,您不需要任何其他操作。 通过删除您可能会阻止的符号链接
#1发生。
要删除链接,请执行以下操作:
bash:~$ rm /usr/src/linux
备份你的内核
虽然不是必需的,但最好备份自定义内核.deb。 将其复制到安全的未公开位置。
{!}一旦您的内核与其模块一起打包,您可以将其安装在任何具有您在内核配置中指定的硬件的计算机上。 重新安装系统后,您甚至可以在当前的机器上重新安装。
制作一个新的启动软盘
创建另一个引导软盘,这是一个刚刚安装的内核。 抓另一个软盘? 覆盖旧的启动盘不是一个好主意; 你没有使用你的新内核足够长的时间来确保它的工作。 只有当您搞砸系统时,才需要启动磁盘。
bash:/usr/src# cd /boot
bash:/boot# mkboot /boot/vmlinuz-2.4.18.030320
构建你的下一个内核
如果你想重新构建你的内核,因为你刚刚买了一个新的声卡,或者你想要启用一个新的功能,你忘了第一次包含,所有你需要做的是重新配置,做“fakeroot make-kpkg clean”,和重建与--append-to-version的不同值。 你的会话应该是这样的:
bash:~$ cd /usr/src
bash:/usr/src$ ln -s linux-source-2.6.8.1 linux
bash:/usr/src$ cd linux
bash:/usr/src/linux$ make xconfig
(重新配置你的内核)
bash:/usr/src/linux$ fakeroot make-kpkg clean
(这里很多清洁)
bash:/usr/src/linux$ fakeroot make-kpkg --append-to-version=.181004 kernel_image
(屏幕和画面的东西)
使用现有配置
当您安装自定义内核时,将其配置复制到/ boot / config-xyz您可能需要在另一个位置(或其他几个位置)松开它,以便进行保管或稍后重新使用。
假设刚刚上个星期,您已经选择了通过迷宫的选项,并且确定了支持所有硬件和所需功能的配置。 今天发布了一个新的稳定的内核,当然你想立即升级。 是否有必要从头开始配置新内核? 一点也不。
下载并扩展新的源代码压缩包并创建一个新的符号链接。 然后将目录更改为/ usr / src / linux,然后复制您现有的配置,然后执行“make oldconfig”:
bash:/usr/src/linux$ cp /boot/config-2.4.18.030320 .config
bash:/usr/src/linux$ make oldconfig
系统会询问有关新内核选项的问题。 对所有问题回答“否”一般是安全的; 记下您感兴趣的新选项。
{i}完成oldconfig后,您可以运行xconfig或menuconfig来查看您的选择,更改答案或调查您注意到的选项。
使用自己的配置构建最新的稳定内核。
fakeroot make-kpkg clean
清单
01.备份启动软盘。
02.安装所需的软件包。
03. build-essential fakeroot内核包
04.设置源码树。
添加到src。 注销,登录。 使用组确认。
06.删除旧的符号链接。
扩展源压缩包。
制作并检查新的符号链接。
09.配置内核。
10.使用旧的配置文件(如果可用)。 cp / boot / config-xyz .config
make oldconfig或make xconfig或make menuconfig。
12.将.config文件保存在其他地方以供以后使用。
13.构建内核映像包。
fakeroot make-kpkg干净
fakeroot make-kpkg --append-to-version = alpha + numeric.but.no.underscore
16.安装内核映像包。
17. dpkg -i kernel-image-xyzyy.mm.dd_10.00.Custom_i386.deb
18.重新启动
接下来是什么?
拿你的包裹 echo“kernel-image-xyzyymmdd hold”| dpkg --set-选择
20.删除符号链接。
21.备份内核映像。
22.删除旧的内核映像包。
制作新的启动软盘。