本文是基于kernel 2.6.0-test5的测试报告,描述了升级过程、软硬件的评测、系统性能等。
一. 编译前准备
下载kernel,建议在www.kernel.org官方网站下载,小网站上的kernel的代码,有可能被别有居心的人改过
因为2.6内核模块装入器有所改变,所以我们需要编译modutils。否则在make modules时,会有许多“unresolved symbol”的错误。我用的是0.9.14的版本。步骤如下:
#tar jxvf module-init-tools-0.9.14-pre1.tar.bz2
#cd module-init-tools-0.9.14-pre1
#./configure
#make
#make moveold
#make install
#./generate-modprobe.conf /etc/modprobe.conf
其他的相关工具最低要求相对于2.4有所提升,一般发行版(如redhat、debian等)都能满足。具体参考Document/Changes,如下:
o Gnu C 2.95.3
o Gnu make 3.78
o binutils 2.12
o util-linux 2.10o
o module-init-tools 0.9.9
o e2fsprogs 1.29
o jfsutils 1.1.3
o reiserfsprogs 3.6.3
o xfsprogs 2.1.0
o pcmcia-cs 3.1.21
o quota-tools 3.09
o PPP 2.4.0
o isdn4k-utils 3.1pre1
o nfs-utils 1.0.5
o procps 2.0.9
o oprofile 0.5.3
二. 编译kernel
新的内核在2.4的基础上有所改进,速度更快。同时它增加了一些make目标选项,如下:
make gconfig、allyesconfig、allnoconfig、allmodconfig配置工具。Make现在是首选命令,如果没有目标,它会编译arch-zimage和modules。
“make –jN”是首选的并行make
“make xx.o”可以指定编译某个文件。Make path/指定编译某个目录及其下面的文件。这对驱动开发或内核人员来说,是一个好消息,在我们更改了kernel中的一个文件后,我们可以直接编译这个文件。
“make dep”已经不需要
“make help”帮助
我是步骤如下:
#make menuconfig
#make bzImage && make modules && make modules_install && make install
需要说明的是,make install会自动将相关文件安装到/boot目录下,如bzImage 、vmlinux、System.map,同时生成initrd文件,并在grub.conf中增加相应启动项,所以不需要手工修改grub(我没用lilo测试,如果你有兴趣,可以试试,然后把结果发给我)。Reboot,新的内核就可以启动了。
我在编译过程中,默认情况下,有几个无关紧要的模块不能编译通过,将他们去掉了。
三. 体验2.6内核
新内核目前在以下几方面有所改变:
改进包括改善对硬件构架的支持。在新版内核中增加对最新AMD 64位Opteron CPU以及PowerPC 64位CPU的支持;
更好地支持多处理器系统,将支持16个或以上的CPU、更好地支持嵌入式设备、对点击鼠标和键盘的反应速度更快和彻底改善了块设备软件插件等。
使用新的new 0(1) 调度程序;
使用真正的异步I/O以改善企业应用;
提高了文件系统的性能;
改进了线程功能,可以支持更多的线程;
改进了对宽带联网的支持等。
就我使用的来看,鼠标和键盘明显好用,鼠标滑动更流畅。打开文件,响应也加快。其他的无法感觉到。
新内核在结构和API上有所改变,详细请参考
http://www.codemonkey.org.uk/post-halloween-2.5.txt
各发行版的最近版本上带的软件基本上都能运行。需要注意的一些问题如下:
1.内核编译成功,重起,解压kernel后,屏幕一片黑
解决办法:确定你的.config文件有CONFIG_INPUT=y,CONFIG_VT=y,,CONFIG_VGA_CONSOLE=y 和 CONFIG_VT_CONSOLE=y。许多人没有将CONFIG_VT=y选中。
2.RPM工具将不能使用,会有如下错误:
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
warning: initscripts-7.28-1.i386.rpm: V3 DSA signature: NOKEY, key ID 9d6b4012
rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages database in /var/lib/rpm
解决办法:
#export LD_ASSUME_KERNEL=2.2.5。我将其加到/etc/bashrc中,这样以后不需要export了。
3.模块不能载入,需要更新modutils,参考上面的“编译前准备”
4.2.6内核对键盘等设备提高了灵活的接口,如果你的键盘或鼠标等输入设备不能工作,试着选中下面的选项:
--- Input I/O drivers
< > Serial i/o support
< > i8042 PC Keyboard controller
[ ] Keyboards
[ ] Mice
(记得选中keyboard/mouse里的列表)
5.2.4及以前的内核,打补丁的方式为:
gzip -cd patchXX.gz | patch -p0
在2.6里,linux在diffs里增加了另外的路径元素,所以推荐的方式为用-p1
6.如果想使用Hotplug需要,作如下改动:将/etc/rc.sysinit中的所有/proc/ksyms改为/proc/kallsyms。
7.同时usb的模块名字有改变,这将影响到/etc/modules.conf、/etc/rc.sysinit。如果用到usb的设备,只要将其改动成相应的就行。因为我没有usb的设备,所以没有做其测试。