ubuntu编译内核:如何编译一个内核 - Ubuntu方式来源: 发布时间:星期四, 2009年2月12日 浏览:113次 评论:0
每个Linux发行版都有自己专门工具去构建自定义内核. 本文主要介绍在平台上编译内核, 如何从www.kernel.org(也叫vanilla kernel)获得最新且未改动内核源代码来构建个自定义内核, 这样你可以使用自己内核而不是发行版内核, 另外也介绍了如何给内核打补丁, 从而方便增加新功能. 下面工作我都在 6.10 Server ("Edgy Eft")和 6.06 Desktop ("Dapper Drake")上经过了. 我想首先要说是文章中构建自定义内核方式不是唯, 还有许多其它方式, 这不过是我习惯方式. 我不能保证使用后不会出现任何问题. 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链接. 当你编译软件Software源代码时候, /bin/dash似乎还存在问题. 至少我已经遇到了些问题. 所以我把/bin/sh链接到了/bin/bash. 如果你使用Ubuntu 6.10, 现在你可以运行: rm -f /bin/sh ln -s /bin/bash /bin/sh 2 安装必需软件Software包 (为内核编译做准备) 首先我们升级软件Software(包)库: apt-get update 然后我们安装所有需要软件Software包: apt-get kernel-package libncurses5-dev fakeroot wget bzip2 3 内核源代码 接下来我们需要内核到/usr/src目录(去www.kernel.org网站WebSite你需要内核版本, 比如. -2.6.18.1tar.bz2(你可以从这里下载所有2.6内核: http://www.kernel.org/pub//kernel/v2.6/). 然后下载到/usr/src目录: cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2 然后解压内核源代码, 创建个指向内核源代码目录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 第个命令用于测试, 对内核没有任何影响. 如果没有显示, 你可以运行第 2个命令给内核打补丁. 如果第个命令有误, 请务继续操作! 你也能够通过内核prepatches方式打补丁. 比如, 如果你需要个功能, 而这个功能仅存在于2.6.19-rc4中, 正式完整内核版本仍没有发布, 而patch-2.6.19-rc4.biz2已经发布. 你可以把这个补丁打到2.6.18内核源代码中, 但请不要达到2.6.18.1或2.6.18.2, 等. 这个规则在接下来网页中注明: http://kernel.org/patchtypes/pre.html prepatches等同于linux中测试发行; 他们位于存档测试目录中, 我们可以使用patch(1)工具对上个完整发行版(版本号分 3部分)打补丁(例如, 2.6.12-rc4 prepatch只可以给2.6.11内核源代码打补丁, 而不是2.6.11.10.) 所以如果你想编译2.6.19-rc4内核, 你必须在步骤3.1下载2.6.18(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2)替代2.6.18.1内核源代码! 下面是如何给2.6.18打上2.6.19-rc4补丁: cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2 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 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软件Software包. 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文件中移去不需要引导内核信息. 参考链接: Ubuntu: http://www.ubuntu.com The Linux Kernel Archives: http://www.kernel.org 原文链接:http://blog.zhaoke.com/7.html#more-7 0
相关文章
读者评论发表评论 |