[Linux]编译一个 RHEL 定制的内核 rpm 包
普通的编译内核我想大家可能常常玩.但如果要大量的应用,还有下次备用的话,打成 rpm 包还是会方便很多.
在07年就写过一个内核编译笔记,http://www.php-oa.com/2007/10/17/linux-make.html,但基本没有认真写什么,就记了一下如下.
下面我们来个实际点的.真实编译,我现在是给 RHEL4 或者 RHEL5 的默认 2.6.9 升级到 2.6.24 来做操作.这次主要是做怎么做内核的 rpm 包.
准备 RHEL 中 Linux 内核编译环境
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
开始 RHEL 中 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
编译和安装 Linux 内核
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
为 Redhat Centos 系统中的新内核建立 initrd 文件.
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吧.哈哈
为 Redhat Centos 系统中的新内核修改 Grub.conf 文件
我们对原来的 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 中生成新的的配置,检查一下.然后重起.
建议继续学习:
- linux内核研究笔记(一)内存管理 – page介绍 (阅读:8569)
- PHP内核介绍及扩展开发指南―Extensions 的编写 (阅读:4647)
- 如何解压rpm文件 (阅读:4009)
- rpm删除出现”error: %preun( ) scriptlet failed, exit status 1解决方法 (阅读:3748)
- 我的内核配置文件 (阅读:3694)
- Linux内核协议栈对于timewait状态的处理 (阅读:3692)
- PHP内核介绍及扩展开发指南―高级主题 (阅读:3594)
- PHP内核介绍及扩展开发指南―基础知识 (阅读:3387)
- 在 Dell PowerEdge 1950 上安装 Linux 2.6.32-rc8 内核的问题与解决 (阅读:3034)
- 在Ubuntu上使用SystemTap (阅读:3025)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: RHEL rpm 内核
- 发布时间:2010-03-15 13:46:03
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 图书馆的世界纪录
- [54] 如何拿下简短的域名
- [54] android 开发入门
- [52] Go Reflect 性能
- [52] Oracle MTS模式下 进程地址与会话信
- [49] 【社会化设计】自我(self)部分――欢迎区
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑