专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Linux » ubuntu编译内核:如何编译一个内核 - Ubuntu方式 »正文

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文件(包含了当前工作内核配置)做为配置文件:

图片 1

图片 2

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

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

图片 4

ESC进入GRUB菜单:
图片 5

选择你以前内核启动系统, 现在你能再次尝试编译新工作内核. 不要忘记从/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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: