step-by-step编译自己的内核

By:             潘云登

Date:          2009-5-20

Email:         intrepyd@gmail.com

Homepage: http://blog.csdn.net/intrepyd

Copyright: 该文章版权由潘云登所有。可在非商业目的下任意传播和复制。

对于商业目的下对本文的任何行为需经作者同意。


step-by-step

编译自己的内核

1.     通过kernel.org,获取内核源码包,如linux-2.6.29.3.tar.bz2。将其解压到/usr/src目录下。

sudo tar xjf linux-2.6.29.3.tar.bz2 /usr/src

2.     进入/usr/src,为linux-2.6.29.3文件夹创建linux链接。如果已存在linux链接,可以先删除。

cd /usr/src

sudo ln -s linux-2.6.29.3 linux

cd linux

3.     如果你之前编译失败过,需要先清理残留文件。

make mrproper

4.     拷贝原有的配置文件到源码目录下。

sudo cp /boot/config-`uname -r` ./.config

如果不存在config-`uname -r`文件,可以在根目录下查找。

find / -name 'config-2*'

5.     利用原有的配置文件对内核进行配置。

sudo make menuconfig

选择Load an Alternate Configuration File回车->.config回车->exit回车->yes回车。

6.     修改Makefile文件中的内核版本号,这一步可以省略。

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 29

EXTRAVERSION = .3-description

注意,这里的EXTRAVERSION只能由字母,数字,".""-"组成。

7.     开始编译内核,又到了喝咖啡的时间了:)

sudo make all

8.     执行下列语句,安装内核。

sudo make modules_install

sudo make install

这时,在/boot目录下生成了三个文件,

-rw-r--r-- 1 root root 101K 2009-05-19 19:59 /boot/config-2.6.29.3

-rw-r--r-- 1 root root 1.4M 2009-05-19 19:59 /boot/System.map-2.6.29.3

-rw-r--r-- 1 root root 3.4M 2009-05-19 19:59 /boot/vmlinuz-2.6.29.3

缺少了引导硬件的initrd.img

9.     Jaunty JackalopeUbuntu 9.04)下,使用mkinitramfs创建initrd.img

sudo mkinitramfs -o /boot/initrd.img-2.6.29.3

如果你找不到该命令,可以试试mkinitrd,它的用法如下:

sudo mkinitrd /boot/initrd.img-2.6.29.3

10.   /boot/grub/menu.lst文件中添加启动项。

title            linux 2.6.29.3

uuid            XXX

kernel         /boot/vmlinuz-2.6.29.3 root=UUID=XXX ro quiet splash

initrd          /boot/initrd.img-2.6.29.3

quiet

XXX替换为你原有启动项中的内容。

11.   重启系统,验证内核是否成功安装。

不幸的是,进入ubuntu后,出现花屏。难道是我的initrd.img创建有误?百思不得其解,还请各位仙人指导。


几个重要文件的作用

1. vmlinuz

vmlinuz是可引导的、压缩的内核。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。文件中包含一个微型的gzip用于解压缩内核并引导它。

2. initrd

initrd"initial ramdisk"的简写,一般被用来临时地引导硬件到实际内核vmlinuz能够接管并继续引导的状态。它把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中。这样的一个好处就是,在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活地支持不同的硬件。

3. system.map

System.map是一个特定内核的内核符号表。顾名思义就是将内核中的符号(如变量名,函数名)和它的地址联系起来的一个列表。它使得用户可以直接使用符号名进行编程,而不用去记符号的地址。


利用发行版提供的工具编译内核

除了上述使用make编译内核的方式外,各linux发行版也提供了各自编译内核的工具。以ubuntu为例,其编译内核的主要过程摘抄如下:

1.     安装必要工具

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

2.     编译内核

make-kpkg clean

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

3.     安装内核

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

4.     添加启动项

具体过程可googleHow To Compile A Kernel - The Ubuntu Way

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值