经Druggo的介绍,一直在我的Genbox (我的Gentoo机器名)下使用TuxOnIce内核。现在在家里的Montty (我的Archlinux机器名)下实在觉得Archlinux的预编译内核太大了,而且全部以模块方式加载启动系统时的Loading Udev Events要花去尽20秒,难以忍受。很有必要自己编译一个精简的内核,而Archlinux的AUR里正好有TuxOnIce的PKGBUILD。
先说下为什么在Archlinux下自己编译一个TuxOnIce内核:
- 精简内核,去掉不需要的模块,减少启动时间
- AUR里的TuxOnIce打了Gentoo的内核补丁集
- TuxOnIce支持休眠到swap,充分利用绰绰有余的swap空间
- 支持断电休眠,重新唤醒系统速度快,免去重启烦恼
步骤
先用$ 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就是其一。
by 怪猫杰里米
看不懂.. = = 师傅 HOHO 来踩踩,,