星期日, 十月 01, 2006

编译内核 Kernel Rebuild[2006/06/27]

并不是闲来无事编译内核,只是首先很久没有进行这样的活动了,上次做这个练习的时候还是在大学里面,刚刚装Redhat 6.2 还是2.4的内核。现在内核都是2.6的版本了。

很 久以前就想干这个。 第一是NTFS不直接支持,需要重编enable. 第二是disk hibernate 功能,有时候工作到一半要换场地,不想把窗口关掉。所以需要hibernate. 必须要patch & rebuild内核。第三是pptp-mpppe,学校需要VPN连接到window server. 第四是wireless connection. ipw2200 (centrino 无线网卡)支持从2.6.8开始被集成到内核里面并且默认开启。但是新版本驱动要求disable内核的驱动才可以安装,并且要新的ieee802.11 模块。第五是买了新硬盘,手比较痒一点,加上老板出差(我)放羊。第六是看到一个好称地球上最快速的文件系统Reiser4,需要patch 内核加入支持。第七是官方的kernel都是为p4做的优化,我的本本跑的是PM。 Arch. 课上说两个架构还是有一些显著不同的。

有如此七大理由,当然要编一个自己的内核了。

从Kernel.org下载新的内核源码。我用的是2.6.16.22. 最新的已经到2.6.17,可是上面reiser4没有放出2.6.17内核的
patch. 所以就用2.6.16的了。

NTFS 只要turn on /off option

hibernate 从http://www.suspend2.net/ 下载源码的patch.

VPN Suport 也是开开开关就可以

ipw2200主要是要禁用内核的驱动和内核的ieee802.11subsystem

Reiser4 文件系统支持是从www.namesys.com下载patch.

patch 的用法是:

patch -p1 < patch-file

在kernel源码的根目录下面apply patch. 很正常的过去了。都开心地报告说patch成功。

然后是标准的kerenel rebuild 过程。

http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html

给了相当详细的过程。只是在最后一步没写好(咬牙切齿)
mkinitrd /boot/initrd-2.6.0.img 2.6.0
让人摸不到头脑
其实真实的应该是这样的,因为到这一步内核模块都已经安装到相应目录
2.6.0应该替换成我们用的内核版本号,这样mkinitrd程序能找到地方
内核版本号的规则是
$VERSION.$PATCHLEVEL.$SUBLEVEL-$EXTRAVERSION
各变量在Makefile里面起始都能找到,自己编译可以Assign自己喜欢
的Extraversion 比如说Xiaoming, Xiaobai...

而且在enable了hibernation以后应该用mkinitrd-suspend2来作上面的事情。 要不然hibernate以后系统不知道resume.恐怖的。

基本上是跟着guide走就ok了。完了以后重启新内核,成功以后
设成默认。 Reiser4的分区是用mkreiser4fs来做。我下了一个
gparted图形界面的东西。仿pqmagic的,比较容易就做出一个15G
的Reiser大分区。 不过现在还没有测试。

ipw2200禁用内核以后就可以安装网上的最新版本,记得下载相应的
firmware。ieee802.11也用最新的版本。

整个过程比较顺利结束。没有发生不兼容事件。我想过几天装个intel的icc重编一下试试,据说那个优化得比较厉害。Fedora Core 5官方改变了编译内核的步骤, 我还是follow kernel.org的那个版本,被称为
vanilla(un-changed) core patching and rebuild.

最后,其实应该最前说。编译内核需要1G左右的硬盘空间,偶第一次在一个600M freespace上面做,失败。(编玩压缩后内核是14兆,module大概百来兆)。编译完以后那棵tree可以留着,clean干净了继续patch以后发现的好东东上去。

没有评论: