1、准备源码 最新的源码可以从kernel.org上获取,如当前最新版本为2.6.31:
$wget http:
//oss
.ustc.edu.cn
/linux-kernel/v2
.6
/linux-2
.6.31.
tar
.bz2
2、解压源码:
$
tar
xvf linux-2.6.31.
tar
.bz2 -C
/usr/src/
注:当然,解压缩到/usr/src/中并不是必须的,你可以解压缩到任何位置。
3、检查源码(该步不是必须):
1
2
|
$
cd
/usr/src/linux-2
.6.31
$
make
mrproper
|
注:该步的作用是检查源码是否有.o文件和依赖问题,从全新的源码编译时不需要这一步。配合make clean(主要清除.o文件)使用更好,make mrproper主要清除环境变量及配置文件
4、 编译内核
默认情况下,编译输出的文件是放在源码目录里的,可以通过 O=output/dir 参数来指定输出文件的位置(字母O,不是数字0)。很多第一次编译内核的人都会碰到一个问题,/usr所在分区的空间不够,此时,这个参数就很有用。
源码提供了很多配置方式,推荐使用menuconfig: 进入 /usr/src/linux-2.6.31,已经进入则略过:
1
|
$
cd
/usr/src/linux-2
.6.31
|
创建 /build/kernel menuconfig 文件夹:
1
|
$
mkdir
-p
/home/
你的用户名
/build/kernel
menuconfig
|
使用menuconfig配置:
1
|
$
make
O=
/home/
你的用户名
/build/kernel
menuconfig
|
1
|
$
make
O=
/home/name/build/kernel
|
为了加快编译的速度,可以使用 -j 参数,开启多线程。比如双核的cpu可以这样编译
1
|
$
make
-j4 O=
/home/name/build/kernel
|
一般-jn的n为核数的两倍即可
5、安装内核
1
|
$
sudo
make
O=
/home/name/build/kernel
modules_install
install
|
6、生成initrd
1
|
$
sudo
mkinitramfs -o
/boot/initrd-img
.2.6.31 2.6.31
|
关于mkinitramfs的其他参数,请参考man mkinitramfs,关于initrd的作用,请自己google搜索。我近期也会写一篇文章剖析一下initrd。
7、修改引导
使用grub的话,可以直接使用:
1
|
$
sudo
update-grub
|
来更新引导文件,当然也可以自己编辑 /boot/grub/menu.lst 或者 /boot/grub/grub.cfg 文件。
8、重启
重启之后可以通过以下命令确认你当前使用的是不是刚编译的内核:
1
|
$
uname
-a
|