再谈升级系统内核

整机外设

  尽管在《升级你的系统内核》及其补遗篇里我们向大家介绍了升级系统内核的基本方法和注意事项,但还是有不少读者在升级过程中碰到了这样或那样的问题。下面是最近比较常见的这方面的问题,给大家再提供一些解决的方法。

  1.失效的RPM包问题

  2.6内核使用了新的线程库,会导致某些程序不可用。如果你在使用RPM时出现不可用的信息,可以进行如下操作:

  打开文件/usr/lib/rpm/macros,在里面寻找:

  %__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb

  修改成:

  %__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

  如果还不行的话,执行如下命令:

  export LD_ASSUME_KERNEL=2.2.5

  如果想每次启动时都自动运行这些命令的话,可以把以上命令(export LD_ASSUME_KERNEL=2.2.5)加在/etc/profile文件里。

  2.配置内核的工具、命令

  除了基本的一些内核配置工具、命令外,比较重要的还有:

  make oldconfig

  它检测现有的config配置文件,并在此基础上生成新的配置信息。利用它可以简化你的配置过程,如果你只是想做小的升级(例如2.6.7到2.6.8)就可以运行这个命令后直接用make命令编译。但对于跨度较大的版本升级,例如2.4升到2.6效果并不好。建议使用下面的命令:

  make defconfig

  系统会自动检测硬件,并给出最基本的配置,再用make xconfig进行更详细的修改。

  3.模块名的改变

  以前的内核模块名是.o,2.6内核的模块名改为.ko,以区别于其他的非内核模块。不仅如此,由于从2.4到2.6时很多模块名也都改变了,例如声卡(因为增加了新的alsa驱动)。

  特别是USB部分更是如此。所以需要修改modprobe.conf文件,将alias usb-controller usb_uhci

  改成:

  alias usb-controller uhci-hcd

  4.修改系统脚本

  2.6内核将设备和它的驱动分开了。原先的/proc/device转移到了/sys/device而/proc/driver还是不变,所以需要修改/etc/rc.sysinit文件,USB鼠标和键盘的模块名在2.4下是mousedev和keybdev,在2.6下是usbkbd和usbmouse。有时还要修改rc.sysinit来解决。

  关于以上修改可以直接从http://people.redhat.com/arjanv/2.6/RPMS.kernel/下载initscripts*.rpm文件升级现有的系统脚本,避免修改错误。

  提示:不同的USB控制器使用不同的模块,可以在配置时选择你需要的,它们的关系是:

  EHCI→USB2.0

  UHCI→Intel,VIA系列主板的USB控制芯片

  OCHI→非PC系统的USB控制芯片,以及SiS, ALi系列主板的USB控制芯片

  5.新内核I/O调度器的编译

  2.6内核增加了四个新的I/O调度器。不少发行版官方内核并没有编译它,我们自己编译时可以打开它。

  在General setup里选中Configure standard kernel features (for small systems) (EMBEDDED)

  然后分别选择其中的四个I/O scheduler。

  正常编译安装后,在/etc/grub.conf文件里新生成的启动项目后添加elevator=*,意思是让内核使用新的调度器。“*”分别可选noop、as、deadline、cfq,形如kernel /boot/vmlinuz-2.6.8.1-new ro root=/dev/hda10 rhgb quiet elevator=deadline。

  还可以选择Configure standard kernel features (for small systems) (EMBEDDED)中的Optimize for size。这样在编译内核时就会向编译器gcc传递“-Os”参数,代替默认的“-O2”,以生成更小的内核。