http://ddau35jt6.blogbus.com/s1312402/
1. 预备工作 我推荐使用root用户执行下面所有的步骤. 如果你还没有创建root登陆口令, 请运行下面的命令: sudo passwd root 然后, 以root身份登陆: su 如果你想使用一般用户来替代root用户, 记住在本文所有命令前输入sudo, 比如当我运行 apt-get update 你需要运行下面的命令来替代, 等. sudo apt-get update 1.1 Ubuntu 6.10上的/bin/sh ("Edgy Eft") 在Ubuntu 6.10, /bin/sh缺省是一个链接到/bin/dash的字符链接. 当你编译软件源代码的时候, /bin/dash似乎还存在问题. 至少我已经遇到了一些问题. 所以我把/bin/sh链接到了/bin/bash. 如果你使用Ubuntu 6.10, 现在你可以运行: rm -f /bin/sh ln -s /bin/bash /bin/sh 2 安装必需的软件包 (为内核编译做准备) 首先我们升级软件(包)库: apt-get update 然后我们安装所有需要的软件包: apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 3 下载内核源代码 接下来我们下载需要的内核到/usr/src目录(去网站下载你需要的内核版本, 比如. linux-2.6.18.1tar.bz2(你可以从这里下载所有的2.6内核: ). 然后下载到/usr/src目录: cd /usr/src wget 然后解压内核源代码, 创建一个指向内核源代码目录的linux字符链接: tar xjf linux-2.6.18.1.tar.bz2 ln -s linux-2.6.18.1 linux cd /usr/src/linux 4 给内核源代码打补丁(可选) 有时你的缺省内核不支持新买的设备, 你需要安装新的驱动. 或者你需要使用虚拟技术或其它高级的技术, 而这些现有的内核都不支持. 这样情况下你需要给给内核源代码打补丁(当然补丁已经发布..) 现在我们假设你已经下载需要的补丁(以下例子我叫它patch.bz2)到/usr/src. 运行下面的命令给内核源代码直接打上补丁(你的用户必须位于/usr/src/linux目录): bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run bzip2 -dc /usr/src/patch.bz2 | patch -p1 第一个命令用于测试, 对内核没有任何影响. 如果没有显示错误, 你可以运行第二个命令给内核打补丁. 如果第一个命令有误, 请务继续的操作! 你也能够通过内核的prepatches方式打补丁. 比如, 如果你需要一个功能, 而这个功能仅存在于2.6.19-rc4中, 正式完整的内核版本仍没有发布, 而patch-2.6.19-rc4.biz2已经发布. 你可以把这个补丁打到2.6.18的内核源代码中, 但请不要达到2.6.18.1或2.6.18.2, 等. 这个规则在接下来的网页中注明: prepatches等同于linux中的测试发行; 他们位于存档的测试目录中, 我们可以使用patch(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 2.6.12-rc4 prepatch只可以给2.6.11内核源代码打补丁, 而不是2.6.11.10.) 所以如果你想编译2.6.19-rc4内核, 你必须在步骤3.1下载2.6.18()替代2.6.18.1内核源代码! 下面是如何给2.6.18打上2.6.19-rc4补丁: cd /usr/src wget cd /usr/src/linux bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 --dry-run bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 5. 配置内核 使用当前工作内核的配置文件做为新内核配置文件的基础是一个很好的主意. 因此我们拷贝已存的配置文件到/usr/src/linux: cp /boot/config-`uname -r` ./.config 然后运行 make menuconfig 然后我们看到内核的配置菜单. 移动绿色光标到 Load an Alternate Configuration File 行后选择.config文件(包含了当前工作内核的配置)做为配置文件:
然后浏览内核配置菜单, 选择你需要的功能. 完成配置后, 选择Exit, 回答下面的问题(Do you wish to save your new kernel configuration? 你希望保存新的内核配置吗?), 选择Yes: 6 构建内核 执行下面命令来构建内核: make-kpkg clean fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers 在--append-to-version= 后面你可以写上任何字符串来区别内核版本, 但是必须以" - "符号开始而且后面不包括任何空格. 保持耐心, 内核编译需要一定时间, 主要看你的内核配置和处理器速度. 7 安装新内核 在成功构建内核后, 你在/usr/src目录能发现两个.deb软件包. cd /usr/src ls -l 在我的测试系统上, 他们分别名为 linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (包含了实际的内核) 和 linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (包含了需要的文件, 用于以后需要编译额外的内核模块). 我是这样安装的: dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (现在你甚至能够拷贝这两个.deb文件到其它的Ubuntu系统, 通过上面的方式安装. 你将不再需要编译内核.) 然后检查 /boot/grub/menu.lst文件, 现在你将能发现新内核使用的两个引导配置块: vi /boot/grub/menu.lst 在我测试系统上已经添加好的引导配置块是这样的: title Ubuntu, kernel 2.6.18.1-custom root (hd0,0) kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash initrd /boot/initrd.img-2.6.18.1-custom savedefault boot title Ubuntu, kernel 2.6.18.1-custom (recovery mode) root (hd0,0) kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single initrd /boot/initrd.img-2.6.18.1-custom boot 现在重启系统: shutdown -r now 如果一切进展顺利, 你的新内核正常工作. 你还可以通过运行下面命令来检查新内核是否运行: uname -r 这将会显示如: 2.6.18.1-custom 如果系统没有起来, 重启一下, 你会看到:
按ESC进入GRUB菜单:
选择你以前的内核启动系统, 现在你能再次尝试编译新的工作内核. 不要忘记从/boot/grub/menu.1st文件中移去不需要的引导内核信息.
|