我不是为了编译内核而编译内核,只是看书看到了这里,于是去实践一下手动编译。
第一次:
因为我用的是CentOS,内核是2.6.18,所以从kernel.org上下载了比较接近的版本2.6.20.
然后开始按照书上和从网上文章里学到的方法,比较死板的一项一项选了下来。在这个过程中,基本上遇到不知道的选项就是按照那些方法一带而过,所以基本上没有什么新的升级或者功能的完善。
make bzImage&&make modules && make modules_install && make install
一条命令串就完成了编译,重启切入新内核后,感觉很满足,觉得已经差不多掌握了。
==========================
第二次:
又考虑到熟练的问题,于是决定再编译了一次2.6.20,
rm -f /boot/相关文件 /lib/modules/内核模块文件 && make clean && make menuconfig
结果进去之后发现等于又是一阵茫然,看到那些选项依然不知道是什么东西。
等一条条的翻译,记下不认识的单词,查找每个项目对应的意思,查阅相关硬件的资料之后,才又一次顺了下来。
然后又开始安装。这次安装没有用 make install ,而是手动的把bzimage System.map 设置到/boot 然后又用mkinitrd 制作了initrd.img文件,设置好,这次开机切入新内核也同样顺利。
=================
第三次~ 第n次:
这次还是为了熟练。可是这次遇到了kernel panic
用了2.6.32 内核,发现里面改动/新增了不少的功能选项,然后又是一阵的记录和查资料。
编译很顺利,但是制作initrd.img文件出了错误,找不到相关的模块。用make install 可以“换另一种方法”制作出initrd.img,可是切到新内核却kernel panic .
这样,我有点绝望,盲目的在网上查相关问题实在毫无头绪。
第二天仔细的分析了那些错误信息,然后又查阅了mkinitrd / initrd.img /make install 这些脚本阿文件阿命令参数的真实的意义。
好像顺出了点头绪。
先考虑initrd.img 这个文件的制作,这个文件的制作可以手动和自动,当然,自动的是mkinitrd了,红帽系列专有。
我在/sbin/目录下尝试的找出了mkinitrd , file一下,发现是shell脚本,然后就复制了一份到我的text练习目录下,先取消掉了它的执行权限 chmod a-x mkinitrd.text ,这样防止我又不小心执行引起麻烦,vim打开后吓我一跳,几千行的代码,这下真晕了。
不过分析了之前制作initrd文件错误讯息,既然它能给出错误讯息,那么这个脚本里就有这个错误讯息的echo 错误讯息 的代码,搜索找到后,发现mkinitrd 是默认探测并将一些USB等的模块加入 initrd 中的lib里面,
我有点头绪,我查看了我编译的那些选项和/lib/modules/对应内核 下的模块,果然没有发现mkinitrd中要探测的那些模块。我想,或许人家之前就明白,一般人都是渴望kenel越小越精炼越好的,所以一般都是把那些驱动编成模块,然后利用initrd引导出来,这样kernel就能够精干了。
我本来想把mkinitrd 关于探测那些我编译进内核的模块的那些代码 #掉,可是怕之后又出问题,于是干脆就将内核从新选则那些initrd需要的模块,准确的说是mkinitrd需要的模块的选项为模块,然后编译二次。
这次mkinitrd 顺利的制作了initrd文件,可惜,重启切入新内核后就挂了,依然kernel panic
我记下了那些错误信息。
然后又指向了 initrd 里面的那个 nash 脚本 init。
开始分析,看步骤没什么好说的。 不过出错都在最后的 switchroot上了。
或许是因为我将SCSI支持直接编译到内核中了。
于是从新打开make menuconfig 仔细的看了SCSI 选项的说明,人家说明说的很详细,倘若想让内核直接支持SCSI 就编译进内核,否则用模块,来让initrd引导。
这下有点思路,又去查阅了很多的关于initrd的资料。开始重新编译(本来想干脆直接编译个scsi模块放到内核模块目录下面,可是总觉得不爽,于是花时间再整一次)。
这次再制作initrd 特意打开来看了一下它里面的lib目录,然后确认有scsi一些支持模块后,就设置好重新启动切入内核。
结果…… 又遇到kernel panic!!
又是 switchroot 那里集中错误了。
再想!再想!
打开initrd 的lib ,对比了原来的initrd的lib目录下的模块,似乎又有了答案。
================
Xuein 于 2009-12-11 16:29:35发表:
向楼主学习