内核编译及遇到的问题
时间:2009-07-31 来源:zyd_cu
最近做项目时需要修改一下内核的配置,重新编译内核,于是到网上搜了个教程跟着做了,步骤大同小异。
进入/usr/src中发现fedora 11自带的源代码,进入后make,结果一直有错误,估计是发行版的内核做了优化之类的,具体原因不详。于是到kernel.org去down了2.6.25的source,经过多次尝试加资料收集,make menuconfig----》make(相当于make bzImage; make modules)成功,在arch/x86/boot下生成bzImage压缩内核(需要copy到/boot下),然后make modules_install,将模块安装到/lib/modules下,再make install添加grub启动项。
编译完后reboot,新的内核进不去,从以前的内核启动,网络挂掉了,找不到网络设备eth0,使用lspci发现使用pcnet的网卡,于是想重新编译fedora 11的内核加载pcnet32的网卡驱动,但make时一直出错,于是想到在新的内核中编译pcnet32网卡驱动的模块,然后copy到fedora 11的内核中加载,但这样做提示module format error,应该是两个内核模块不兼容。于是想到下一个比fedora 11更新的内核来编译,但网络挂了,U盘不能识别,下载的source不能传到虚拟机中,于是这条路又断了,弄了一下午硬是没有成功。
幸亏刚装虚拟机的时候将整个虚拟机的文件备份了(当时不知道vmware的snapshot和clone功能),于是从备份的虚拟机重新启动,结果里面的网络配置跟以前备份的时候竟然不一样了,eth0不见了,ifconfig时显示eth1,但/etc/sysconfig/network-scripts里面却没有eth1对应的配置文件,只有eth0,通过ifconfig,setup修改时,都是修改eth0的ip...非常之无语,虽然可以上网,但感觉非常之不爽。(移动虚拟机文件可能导致移动后的文件不能用,应为虚拟机将文件夹虚拟为磁盘,而拷贝后的文件夹却没有这个特性,所以导致很多配置都跟以前不一样了,我之前重装windows,重装vmware后,没有动过fedora 11的虚拟机文件,使用一点没变)
于是在虚拟机里重装了fedora 11,配置好网络,马上做了个snapshot,并且做了个clone,我可不想下次内核出问题时又重装,浪费时间,浪费精力。
总结一下,编译内核应该注意的问题。
如果只是实验在make menuconfig时最好选择arch/x86下默认的配置文件,将该文件拷贝为源码目录下的.config即可。
make包含make bzImage,make modules即生成可启动的压缩内核和各个模块。
make modules_install 安装模块到/lib/modules下