转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2010/03/14/compiling-custom-kernel-rhel-centos.html
普通的编译内核我想大家可能常常玩.但如果要大量的应用,还有下次备用的话,打成 rpm 包还是会方便很多.
在07年就写过一个内核编译笔记,http://www.php-oa.com/2007/10/17/linux-make.html,但基本没有认真写什么,就记了一下如下.
下面我们来个实际点的.真实编译,我现在是给 RHEL4 或者 RHEL5 的默认 2.6.9 升级到 2.6.24 来做操作.这次主要是做怎么做内核的 rpm 包.
1. 可以到 kernel 的网站下载最新的内核,目前我用的是2.6.24,我30也用过一下,现在最新的好象到了 2.6.33 .下载tar包以后解压到/usr/src/中
wget http:
//www
.kernel.org
/pub/linux/kernel/v2
.6
/linux-2
.6.24.5.
tar
.bz2
tar
jxvf linux-2.6.24.5.
tar
.bz2 -C
/usr/src
|
2. 先建个软链到 Linux 的目录
ln
-sf
/root/kernel/linux-2
.6.24.5 linux
cd
/usr/src/linux
|
1. 安装编译前需要的编译环境
yum
install
gcc
make
bison ncurses-devel rpm-build
|
2. 开始 Centos RedHat 系统的内核编译,先清掉以前的编译的内容,注意.config也会清掉
make
mrproper
cp
/boot/config-
`
uname
-r` .config
|
3. 然后拿现在的内核配置的基础上在编译(建议这个,很我必须的硬件支持之类都有了).当然,可以先make oldconfig后在自己选择自己要和不要的内容.我喜欢在 Ubuntu 中编译,所以我常用make xconfig来配置,图形界面也很好配置.
make
oldconfig
make
menuconfig
#或者如果有xwindows时,用make xconfig
|
4. 加入自己喜欢的名字,到 Linux 内核中.(这步可以不做^v^)
在menuconfig时,有个选项
General setup —>Select Local version – append to kernel release
我加了一个fukai,呵呵,到时编译出来名字会变成 kernel-2.6.24.5fukai-1.i386.rpm
1. 好了可以开始编译安装了,make -j 是加速编译的,好象会并发的跑.下面一步是做三样事,在shell中&&的意思可以理解为,只要前面一个任务返回是正常,就运行后面的命令.
make
-j 8 &&
make
modules_install &&
make
install
|
2. 如果你想要rpm包,就用make rpm.记的rpm包在安装是使用i的命令来安装,不要用U来升级,不然老的内核就没了,得给自己多一次机会
make
rpm
rpm -ivh
/usr/src/redhat/RPMS/i386/kernel-2
.6.24.5fukai-1.i386.rpm
|
initrd 的作用和技巧我在下一个文章中写.哈哈
如果是 rpm 包安装的话,需要自己建 initrd 文件,如果是make 在make modules_install …. 的方法安装.就会自动生成 initrd 的文件.如果是 rpm 包的话,就需要自己来生成.
象我,喜欢修改 spec 的文件,来打包 rpm,这样 rpm 安装完自动做下面的步骤.
查找模块的依赖关系,这步可以不做.
depmod kernel-2.6.24.5fukai
|
安装做 initrd 文件,我们使用的是 mkinitrd 命令,注意 Ubuntu 中没有这个命令用的别的命令
mkinitrd -
v
/boot/initrd-2
.6.24.5fukai-.img 2.6.24.5-fukai
|
这一步其实非常有技巧的,很多人的内核起不起来,启动时提示,都是因为这个部分有问题.我下一个文件讲讲这个部分.关注www.php-oa.com吧.哈哈
我们对原来的 grub 备份一下,然后使用 grubby 的命令来修改 Grub 的文件. 这些也可以做成 rpm 中去,就不要自己来运行了.
cp
/boot/grub/grub
.conf
/boot/grub/grub
.conf.pre-2.6.24.bak
grubby --add-kernel=
/boot/vmlinux-2
.6.24.5 \
--title=
"Linux Kernel 2.6.24 By Fukai"
\
--copy-default --
make
-default \
--initrd=
/boot/initrd-2
.6.24.5.img \
|
这样会在 /boot/grub/grup.conf 中生成新的的配置,检查一下.然后重起.