好累! 又要再編過啦 @_@! 因為 Kernel 2.6.29 的 CONFIG_KMOD 設定參數不知跑那去了,讓 Madwifi-ng 模組重編造成無線無法軀動不能上網! Orz
另外就是要拿掉 Symmetric multi-processing support (對稱多處理程序的支援) 設定,因為這台只有單 CPU 也不是雙核心!
Symmetric multi-processing support 跟 CONFIG_MSI 有關係, 關了前者就不能開了
來吧! 開始累人的事囉! 寫文件也是很累呀! 這裡是介紹用 Gentoo Linux 編譯新 Kernel 的方法!
Kernel 版本是 linux-2.6.28-gentoo-r6
- 因為不要再把 Kernel 2.6.29 版再裝到 Server 上,可以用安裝指令指定版本 (emerge =gentoo-sources-2.6.28-r?)或把 2.6.29 加到 package.mask 中,加 package.mask 會比較好,因為下次更新時才不會又安裝到啦!
echo "=sys-kernel/linux-headers-2.6.29*" >> /etc/portage/package.mask
echo "=sys-kernel/gentoo-sources-2.6.29*" >> /etc/portage/package.mask
emerge linux-headers gentoo-sources
rm /usr/src/linux
ln -s /usr/src/linux-2.6.28-gentoo-r6 /usr/src/linux
- 使用目前在用的 Kernel Config,使用 genkernel 指令來編譯 kernel 如果沒有這個就要先安裝下 emerge genkernel 來安裝即可,要再設一下 Kernel Config 就加 --menuconfig 參數
zcat /proc/config.gz > /tmp/kernel-config
genkernel --kernel-config=/tmp/kernel-config --menuconfig all
- 此時會出現下面的字樣,接著就會到 Linux Kernel Configuration 的選單中
* Gentoo Linux Genkernel; Version 3.4.10.904
* Running with options: --kernel-config=/tmp/kernel-config --menuconfig all
grep: /usr/src/linux/.config: 沒有此一檔案或目錄
* Linux Kernel 2.6.28-gentoo-r6 for x86...
* kernel: >> Running mrproper...
* config: Using config from /tmp/kernel-config
* Previous config backed up to .config.bak
* >> Running oldconfig...
* kernel: >> Cleaning...
* config: >> Invoking menuconfig...
- 怪怪,用選單也看不出來那一個是 CONFIG_KMOD, 用斜線「/」來搜尋一下看看,按 / 後輸入「KMOD」(這是要讓 Madwifi-ng 能正常安裝的選項,沒用無線不用特別選擇)
- 都選擇好後按 ESC 幾次跳出選單就會開始編譯 Kernel 囉! 出現下面這樣:
#
# configuration written to .config
#
*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
* >> Compiling 2.6.28-gentoo-r6 bzImage...
- 會編譯好長一段時間,這時可以先去吃飯或睡覺啦,等編譯好後再設定 grub.conf
vi /boot/grub/grub.conf
- 在檔案新增一段新 Kernel 的設定,原本像這樣:
default 0
timeout 5
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.28-r4
root (hd0,0)
kernel /kernel-genkernel-x86-2.6.28-gentoo-r4 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3
initrd /initramfs-genkernel-x86-2.6.28-gentoo-r4
- 在 splashimage 跟 title 之間新增新 Kernel 的設定,最後改成這樣:
default 0
timeout 5
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.28-r6
root (hd0,0)
kernel /kernel-genkernel-x86-2.6.28-gentoo-r6 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3
initrd /initramfs-genkernel-x86-2.6.28-gentoo-r6
title=Gentoo Linux 2.6.28-r4
root (hd0,0)
kernel /kernel-genkernel-x86-2.6.28-gentoo-r4 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3
initrd /initramfs-genkernel-x86-2.6.28-gentoo-r4
- 把模組重編一下用 module-rebuild 指令
module-rebuild rebuild
- 要驗收成果啦,就是重開後是不是正常能開機,網路通不通,服務可不可以正常起動
若不正常就要重開用舊 Kernel 開機再編一次,看是硬碟沒抓到還是網卡 Driver 沒選到!! 正常應該不會有 Driver 沒選到的情況,因為是用舊 Kernel 的 Config 來做的! 通常會有問題是新 Kernel 拿掉了什麼支援造成失敗!
參考資料 http://www.gentoo.org/doc/en/kernel-upgrade.xml [2]