参考:http://blog.sina.com.cn/s/blog_602f87700100wrfx.html
一:按照Fedora官方建议的做法如下:
http://fedoraproject.org/wiki/Building_a_custom_kernel
1. 准备工作:
首先确认安装了:rpmdevtools,yum-utils.
不管使用Add/Remote Application还是
#sudo yum install rpmdevtools
#sudo yum install yum-utils
都可以安装成功。
2.得到FC16 Kernel Source code:
2.1: 创建RPM包环境:
$ rpmdev-setuptree
这个命令其实是创建制作RPM的目录树。
它会在/home/sam
2.2: 得到对应FC16的Kernel source code rpm:
$sudo yumdownloader --source kernel<version>
则得到对应FC16的对应kernel source rpm包---kernel-3.1.0-7.fc16.src.rpm
2.3:安装编译Kernel所必需的包:
$sudo yum-builddep kernel-3.1.0-7.fc16.src.rpm
2.4: 从RPM包内安装Kernel Source:
$rpm -Uvh kernel-3.1.0-7.fc16.src.rpm
都是在~/rpmbuild/SOURCE中放入source和patch,在~/rpmbuild/SPECS中放入kernel.spec.
spec是rpmbuild所需要用得config文件,告知如何制作和组织rpm包.
这里出现诸如:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
可以忽略。
2.5:利用rpmbuild 将kernel source 解压和patch.
$cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
此时kernel source 被放在/rpmbuild/BUILD/kernel-<version>
这是打过补丁得kernel source. 对应FC16.
还有一个目录:
rpmbuild/BUILD/kernel-<version>/vanilla-3.1.0
这是原始kernel source. 未打补丁的。
3. 编译Kernel:
编译Kernel,最好从当前正在使用的Kernel config为基础修改。
于是,把当前使用的kernel config作为基础使用:/boot/config-<version>
并作了一些修改。
#make menuconfig
#make
4. 安装新Kernel:
#make modules_install
#make install
#make install中,它会自动修改/boot/grub/menu.lst 中的内容,并把Kernel image copy到对应位置。
但默认启动项还是老的kernel.
default=1
所以修改之,修改为:
default=0
timeout=3
不知为什么FC16的Grup config文件写错了。
splashimage=(hd0,0)/grub/splash.xpm.gz ,应该修改为:
splashimage=/boot/grub/splash.xpm.gz
即启动界面是/boot/grub/splash.xpm.gz
并去掉隐藏语句:
#hiddenmenu
(详见注2)
重新启动后,可以看到选择画面。请选择第一个。
#uname -r
3.0.3-rc1
与之前的2.6.40.3-0不同。说明更新成功。
FC16Kernel Version写在哪里呢?
FC16 Makefile会创建一个文件:include/generated/utsrelease.h
内容为:#define UTS_RELEASE "3.0.3-rc1"
而UTS_RELEASE: 则在include/linux/vermagic.h中被用到。
注1:
rpmbuild使用:
-bp 只作准备 (解压与打补丁)
-bc 准备并编译
-bi 编译并安装
-bl 检验文件是否齐全
-ba 编译后做成*.rpm和src.rpm
-bb 编译后做成*.rpm
-bs 只做成*.src.rpm
注2--grub config文件:
GRUB启动时会在 /boot/grub 中寻找一个名字为grub.conf的设置文件,如果找不到此设置文件则不进入菜单模式而直接进入命令行模式。
如果找到,则按照/boot/grub/grub.conf(/boot/grub/menu.lst是它的软链接)的内容作动作。
default=0
timeout=3
hiddenmenu
splashimage=/boot/grub/splash.xpm.gz
title - 设定用来装载一个操作系统的一组特定命令的标题
initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。
kernel /vmlinuz-2.6.40.3-0.fc15.i686 指定kernel为/boot下哪一个。