Druggo的介绍,一直在我的Genbox (我的Gentoo机器名)下使用TuxOnIce内核。现在在家里的Montty (我的Archlinux机器名)下实在觉得Archlinux的预编译内核太大了,而且全部以模块方式加载启动系统时的Loading Udev Events要花去尽20秒,难以忍受。很有必要自己编译一个精简的内核,而Archlinux的AUR里正好有TuxOnIce的PKGBUILD。

先说下为什么在Archlinux下自己编译一个TuxOnIce内核:

  1. 精简内核,去掉不需要的模块,减少启动时间
  2. AUR里的TuxOnIce打了Gentoo的内核补丁集
  3. TuxOnIce支持休眠到swap,充分利用绰绰有余的swap空间
  4. 支持断电休眠,重新唤醒系统速度快,免去重启烦恼

步骤

先用$ yaourt kernel26-ice获取TuxOnIce的PKGBUILD,它会提示是否修改PKGBUILD文件。我打算自己配置内核选项,所以去掉PKGBUILD里那句make menuconfig的注释。

# use menuconfig, if you want to change the configuration
make menuconfig
yes "" | make config

然后Y下去,直到出现内核配置界面。我偏向于把东西编译内核,而不是编译为模块,这样做的好处是根本不用去管该手动加载哪些模块,哪些是需要的。为了让Suspend功能运转,需要把勾选以下设置。

 Power management options (ACPI, APM)  --->
   [*] Hibernation (aka 'suspend to disk')
   (/dev/<swap-partition>) Default resume partition
   <*>   Enhanced Hibernation (TuxOnIce)  --->
     ---   Image Storage (you need at least one allocator)
     <*>   File Allocator
     <*>   Swap Allocator
     ---   General Options
     <*>   Compression support
     <*>   Userspace User Interface support
     (/sbin/tuxoniceui_text) Default userui program location 
     [ ]   Allow Keep Image Mode
     [*]   Replace swsusp by default
     < >   Cluster support  --->
     [*]   Checksum pageset2
     (25)  Default waiting time for emergency boot messages
     < >   Test pageflags
 Cryptographic options  --->
   <*>   LZF compression algorithm

其中/dev/<swap-partition>为swap分区位置,开启LZF压缩可以加快休眠/唤醒速度,不过需要耗费点CPU资源。怕啥,我PIII 667Mhz的老爷机都用上它了。

用多核CPU的还需要勾选这些 (与我无关)

Kernels before 2.6.22

Processor type and features  --->
 [*] Support for hot-pluggable CPUs (EXPERIMENTAL)

Kernel 2.6.22 and after:

Processor type and features  --->
 [*] Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)

修改好config后等它自动编译吧,然后运行$ sudo pacman -U kernel26-ice-2.6.26-3-i686.pkg.tar.gz安装内核,其间会运行mkinitcpio生成initramfs,无所谓。反正都编译进kernel了,而且又是自己手动编译的,根本不需要initramfs。

完成后添加类似几行到/boot/grub/menu.1st:

title  Arch Linux TuxOnIce
root   (hd1,0)
kernel /vmlinuz26-ice root=/dev/sdb3 ro

其中(hd1,0)指的是/boot分区,/dev/sdb3/ 分区。

我用的是N卡,还需要去AUR下个nvidia-96xx-ice的显卡驱动 (我的还是GeForce 2系列的卡)。$ yaourt nvidia-96xx-ice或者$ yaourt nvidia-ice就是了。

要用Suspend功能,还需要$ yaourt hibernate-script。然后修改/etc/hibernate/blacklisted-modules,把nvidia这行注释了,不然hibernate会报错。

/etc/hibernate/common.conf里找到这几行,去掉注释,以便在休眠时断开网络,唤醒时重新连接。

### network
DownInterfaces eth0
UpInterfaces auto

我用的是Nvidia的GeForce 2的卡,还需要在/etc/X11/xorg.conf里的Device Section里添加一句Option "NvAGP" "1",如下:

Section "Device"
        Identifier  "Card0"
        Driver      "nvidia"
        VendorName  "nVidia Corporation"
        BoardName   "NV11 [GeForce2 MX/MX 400]"
        BusID       "PCI:1:0:0"
        Option      "NvAGP" "1"
        ...
EndSection

最后在/etc/rc.conf里检查下MODULES这行,把不需要的模块都清除掉,因为我是全部编进了kernel,直接将此行留空。

全部搞定后重启进入新的TuxOnIce内核吧,我的Loading Udev Events时间由20秒缩短为7秒了(还是很不爽啊! Gentoo多快啊!)再次重编,Udev Events Loading缩短为4秒了,总算比较可以忍受了,运行$ sudo hibernate -n进行休眠测试,没问题的话以后就$ sudo hibernate进行休眠吧。唤醒的话正常开机由grub引导进入就行了。

参考

最后抱怨几句:

为什么Archlinux要把kde3赶出repo,kde4还不足够稳定到给广大用户使用吧。像Gentoo那样用不同的slot机制来并存kde3和kde4多好。

Archlinux的源很痛苦,ABS的rsync服务器更是痛苦…

尽管有官方预编译包,我还是需要自己去手动编译那些软件,scim就是其一。

1 Response So Far ↓

  1. 怪猫杰里米:

    看不懂.. = = 师傅 HOHO 来踩踩,,

Leave a Reply ↓