Inux内核升级是学习内核的基本条件。如果自已编译的内核跑不起来,那谈linux内核学习就是镜花水月了。其实网上有很多相关的
内核编译升级教程。我这个纯粹是多余的,但是为什么很多同志升级还是老失败呢?其实网上有很多教程,撞到相关的问题问一下
google或百度就基本是可以解决的。虽然网上的解决方法很多时候不是很好,但是要编译成功并运行起来是没有太大问题的。
好了,言归正传,把我的方法奉献给大家吧。
首先我的linux是centos5.4版的,内核版本是2.6.18。其实linux内核的学习和linux发行版的关系不是太大,大家喜欢哪个版本都
没问题。然后我是在WINDOWSXP上装的vmware7,然后再在vmware上面安装的centos。首先你要保证你的虚拟机上有gcc、makefile等
工具,如果没有这些工具我们就编译不了内核。如果你不是老手,对linux不是很熟你就直接按默认选项安装就是了,里包含这些基
本工具的,如果是玩过的同志,就可以定制一下。我是喜欢定制,要的东西就装上,不要的东西就不装。
我们先从www.kernel.org上下载一份源码,本文下载的是目前最新稳定版的2.6.38.5 。地址如下:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.5.tar.bz2
有了源码后,我们就将源码拷到我们的linux的/opt目录下。我建议大家在装linux的时候不要选择装虚拟机工具,即vmware_tools
。这会在我们后面的编译中带来不必要的麻烦。然后再执行解压缩:
tar jxf linux-2.6.38.5.tar.bz2 //解压内核
cd linux-2.6.38.5 //进入解压后的目录
cp /boot/config-2.6.18-164.el5 .config //将默认的内核配置文件拷贝过来
make menuconfig //进入的内核配置的界面
保存退出
然后手工打开.config文件
查找# CONFIG_SYSFS_DEPRECATED is not set并将其改为CONFIG_SYSFS_DEPRECATED
保存退出
打开脚本/sbin/mkinitrd
查找到函数:emit_modules。并在其中找到如下字符串:
emit "echo /"Loading $fullmodule module/""
emit "insmod /lib/$fullmodule $options"
找到后改成下面这个样子:
#add by wwhs for kernel modules load error
if [ "$fullmodule" != "dm-region-hash.ko" ] ; then
if [ "$fullmodule" != "dm-mirror.ko" ] ; then
emit "echo /"Loading $fullmodule module/""
emit "insmod /lib/$fullmodule $options"
fi
fi
接下来就可以进入我们经常用的一堆内核编译命令了:
cd /opt/linux-2.6.38.5
make
make modules_install
make install
在网上看见有很多同志加了一堆make dep什么的,其实是不需要的,你从内核官网上拿下来的是很干净的并且是2.6版的代码,没必
要加一些针对于2.4版或者是不干净代码的步骤。