昨天偶去Linux内核网站(www.kernel.org)上逛时,发现最新的Linux Kernel稳定版已经是2.6.35.1,近来内核版本更新好快哦。下图中的stable就是稳定版的意思:
于是决定找个时间编译升级下CentOS 5.5的内核,CentOS 5.5所带的内核还是2.6.18.x系列,有点老了。因为之前偶编译过LFS与Gentoo,编译内核有一些经验了,所有这次还比较顺利。本次编译的系统是32位的,64位的稍有不同。下面的笔记在虚拟机与物理机中都验证通过,所有操作全部以root权限在终端进行。
下面是本次编译升级了到今天为止最新的稳定版内核2.6.35.1版的笔记总结:
编译前的准备工作:
要成功地创建一个内核,需要安装下列组件:
yum groupinstall “Development Tools” #这样做会确定你拥有编译时所需的一切工具。
yum install ncurses-devel #这样才能让 make *config 这个指令正确地执行。
yum install qt-devel #如果你用 make xconfig 而不是 make gconfig 或 make menuconfig,才需要这样做。
1、下载新内核源码包:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.1.tar.bz2
tar jxvf linux-2.6.35.1.tar.bz2
cd linux-2.6.35.1
2、下载内核标准配置文件:
wget http://www.ha97.com/code/config
mv config .config
3、编译内核:
make dep
注:选择编译进去内核的模块,默认回车即可。这一步如果系统时间不正确会提示“警告:检测到时钟错误。您的创建可能是不完整的。”的警告。解决方法:把时间改正确或者运行下面的命令再makefind . -type f -exec touch {} \;
make bzImage
make modules
make modules_install
make install
4、解压修改内核:
cp /boot/initrd-2.6.35.1.img /tmp/
cd /tmp/
mkdir newinitrd
cd newinitrd/
zcat ../initrd-2.6.35.1.img |cpio -i
rm -fr /tmp/initrd-2.6.35.1.img
vim init
找到这2段一样的,去掉其中1段重复的:
echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko
echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko
5、从新打包新内核:
find .|cpio -c -o > ../initrd
cd ../
gzip -9 < initrd > initrd-2.6.35.1.img
rm -fr /boot/initrd-2.6.35.1.img
cp initrd-2.6.35.1.img /boot
rm -fr /usr/src/linux-2.6.35.1.tar.bz2
rm -fr /usr/src/linux-2.6.35.1
6、设置从新内核启动系统:
vim /boot/grub/grub.conf
把default=1改为default=0
7、重新启动系统:
reboot
8、如图所示,启动成功,OK。
谢谢分享!我也找个时间试试~
关于内核自定义编译可以参考:http://www.ha97.com/2333.html
你好!
我按你说的方法在笔记本(acer 4741G)上编译了2.6.36的内核,升级成功了,但是出现了一个错误,”eth0的物理地址与分配的不一致,进入系统后,上不了网,能识别网卡,但插入网线也没有反应,还是显示一个叉,希望能指点.
eth0的物理地址与分配的不一致?这个错误还真没遇到过,编译内核时有提示什么错误吗?你自己手动修改过mac地址?
我的电脑也是宏基的。。跟你的问题差不多。有人说是:
进入 /etc/sysconfig/network 或者/etc/sysconfig/network-scripts ,编辑eth0配置文件。比较在配置文件里面的Mac地址与输入ifconfig 输出的mac地址,如果两者不一致,统一为ifconfig输出的mac地址,然后重启
http://hi.baidu.com/yss1983/blog/item/403f4894e4583c7f55fb96aa.html
感谢!
求教个问题
为什么使用你的config文件就会生成system.map
我自己配置的就没有呢?