Fedora16 Kernel 编译

来源:互联网 发布:大数据技术之企业发展 编辑:程序博客网 时间:2024/06/08 05:43

参考: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  (因为当前User为sam)下创建 rpmbuild目录。其中又包含BUILD  RPMS  SOURCES  SPECS  SRPMS五个目录。和Linux安装盘中的结构很像。

 

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   (升级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   //缺省是启动哪一项,第一项为0, 第2项为1,以此类推
timeout=3   // 如果用户不选择,n秒后进入define项

hiddenmenu  //使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。

 

 

splashimage=/boot/grub/splash.xpm.gz   //它指定在GRUB引导时所使用的屏幕图像的位置

 

title - 设定用来装载一个操作系统的一组特定命令的标题

 

initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。

 

kernel /vmlinuz-2.6.40.3-0.fc15.i686 指定kernel为/boot下哪一个。

0 0