UBUNTU 7.04 编译内核

原创 2007年10月16日 10:12:00

每一个Linux发行版都有自己专门的工具去构建自定义的内核. 本文主要介绍在Ubuntu平台上编译内核, 如何从www.kernel.org(也叫vanilla kernel)获得最新且未改动的内核源代码来构建一个自定义的内核, 这样你可以使用自己的内核而不是发行版的内核, 另外也介绍了如何给内核打补丁, 从而方便增加新的功能.

下面的工作我都在Ubuntu 6.10 Server ("Edgy Eft")和Ubuntu 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的字符链接. 当你编译软件源代码的时候, /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目录(去www.kernel.org网站下载你需要的内核版本, 比如. linux-2.6.18.1tar.bz2(你可以从这里下载所有的2.6内核: http://www.kernel.org/pub/linux/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

第一个命令用于测试, 对内核没有任何影响. 如果没有显示错误, 你可以运行第二个命令给内核打补丁. 如果第一个命令有误, 请务继续的操作!

你也能够通过内核的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)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 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文件(包含了当前工作内核的配置)做为配置文件:

图片 1

图片 2

然后浏览内核配置菜单, 选择你需要的功能. 完成配置后, 选择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

如果系统没有起来, 重启一下, 你会看到:

图片 4

ESC进入GRUB菜单:
图片 5

选择你以前的内核启动系统, 现在你能再次尝试编译新的工作内核. 不要忘记从/boot/grub/menu.1st文件中移去不需要的引导内核信息.

 

Ubuntu 7.04安装完全图解

随着微软公司新一代的Windows操作系统(Vista)的发布,有越来越多的电脑用户们开始出于各种不同的原因,正在寻找着 Windows操作系统的合适替代品。这篇文章将向那些希望能够迁移到Linux系...
  • luckyspring
  • luckyspring
  • 2007-08-19 08:26:00
  • 1545

ubuntu7.04的设置

ubuntu7.04的设置   ...
  • evane1890
  • evane1890
  • 2007-05-08 14:07:00
  • 1119

ubuntu 7.04 安装小记

ubuntu 7.04 (Feisty Fawn)2007,4,19 release。一下班就赶紧跑回来download,在windows下用迅雷下载速度很快,2M左右,先是下载了一个desktop,...
  • sunewer
  • sunewer
  • 2007-04-27 20:51:00
  • 1941

Ubuntu 7.04 系统安装图解教程.CHM

  • 2008年02月22日 13:14
  • 1.2MB
  • 下载

Ubuntu 7.04下载地址收集

MD5校验: 1d23eaf29ff2c68767d5c0a37cb1bda6           *ubuntu-7.04-dvd-amd64.iso ca609edf086eea0c821ba34...
  • hyzone
  • hyzone
  • 2007-05-24 10:26:00
  • 588

Ubuntu Linux 7.04下的apache2+php4+mysql5源码安装详解

作者:zieckey(zieckey@yahoo.com.cn)All Right Reserved!Linux环境说明: Ubunut 7.04 mysql-5.0.41 httpd-2.0.53 ...
  • zieckey
  • zieckey
  • 2007-06-04 15:25:00
  • 3785

Ubuntu Feisty(7.04)中与acroread相关的问题

         从Edgy升级到Feisty后,很郁闷的事情是发现所有的Feisty源中都没有acroread这个包,搜索了一下,据说是Adobe改变了acroread的license,使得其red...
  • lovekatherine
  • lovekatherine
  • 2007-04-28 19:47:00
  • 849

Ubuntu 7.04 Beta版本发布

       3月23日,Ubuntu 7.04的Beta版本正式发布了,还是一张CD安装光盘(699MB)。在这个版本里面,有许多新的特性,但是,对于广大开源用户而言,这却是至今对用户最为“友好”的...
  • yuanmeng001
  • yuanmeng001
  • 2007-03-25 06:35:00
  • 2350

Ubuntu704

  • 2008年04月05日 15:55
  • 986KB
  • 下载

Ubuntu下的内核编译(打造最精确的编译步骤)

1、apt-get 代码:  apt-cache search linux-source 或者在http://www.kernel.org/下载内核源码 执行用这条命令系统会提示你安装适合你...
  • xumin330774233
  • xumin330774233
  • 2014-10-22 10:27:52
  • 15275
收藏助手
不良信息举报
您举报文章:UBUNTU 7.04 编译内核
举报原因:
原因补充:

(最多只允许输入30个字)