Compiling Linux Kernel

http://www.kernel.org/

1
下載kernel-source
ps:
Linux kernel 2.4.x ~ 2.6.30有嚴重的安全漏洞,漏洞編號為CVE-2009-2692

2
解開到/usr/src /kernels
tar -jxvf linux-2.6.30.3.tar.bz2 -C /usr/src/kernels/

3
建立連結
ln -s /usr/src/linux-2.6.30 /usr/src/linux

4
清除殘留檔
到/usr/src /linux內清除殘留檔案,及相關.config設定檔
make mrproper
ps:
make clean只清除編譯過程產生的檔案,而不會刪除相關設定檔


………………..

5
設定kernel
常見的方法有:

make menuconfig
最常使用的,文字模式下可以顯示類似圖形介面的方式,不需啟動 X Window 就能夠挑選核心功能選單

make oldconfig
透過使用已存在的 ./.config 檔案內容,使用該檔案內的設定值為預設值,只將新版本核心內的新功能選項列出讓使用者選擇,可簡化核心功能的挑選過程,對升級核心原始碼後的功能挑選非常好用

make xconfig
透過以 Qt 為圖形介面基礎功能的圖形化介面顯示,需要具有 X window 的支援
ex:KDE 就是透過Qt來設計的X Window,因此在 KDE 畫面中可以使用此一項目

make gconfig
透過以 Gtk 為圖形介面基礎功能的圖形化介面顯示,需要具有 X window 的支援
ex:GNOME 就是透過 Gtk 來設計的 X Window,因此在 GNOME 畫面中可以使用此一項目

make config
最舊式的功能挑選方法,每個項目都以條列式一條一條的列出讓你選擇,如果設定錯誤只能夠再次選擇

ps:
建議在General setup內的Local version修改成新的名稱,避免安裝模組時覆蓋到原模組
ex:設定核心版本成為2.6.30.3.test
(test) Local version – append to kernel release
[*] Automatically append version information to the version string

ps:
設定kernel後,系統會在/usr/src/linux底下產生一個名為.config的隱藏檔,之後此檔案移到 /boot/config-xxx 的檔案
……………………………………

6
清除暫存檔
make clean

7
編譯核心
make bzimage
完成後將kernel放在/usr /src/kernels/linux-2.6.30.3/arch/x86/boot/bzImage

8
編譯模組
make modules

9
安裝模組
make modules_install
ps:模組會安裝到/lib/modules/$(uname -r)

………………………………………

10
開機設定
cp /usr/src/kernels/linux/arch/x86/boot/bzImage /boot/vmlinuz-2.6.30.3test
cp /usr/src/kernels/linux/.config /boot/config-2.6.30.3test
ps:建議.config也備份

ps:
若使用sata硬碟需使用 initrd載入
ex:
製作initrd-2.6.30.3test.img檔案 
mkinitrd -v /boot/initrd-2.6.30.3test.img 2.6.30.3test
ps:
若出現No modules available for kernel
需檢查是否有打錯字,並檢查目錄/lib/module/2.6.30.3test是否存在
ps:
若出現No module ata_piix found for kernel 2.6.18, aborting.
則執行mkinitrd –builtin=ata_piix /boot/initrd-2.6.18.img 2.6.18

11
/boot/grub/menu.lst內加入以下
title newkerneltest
root (hd0,0)
kernel /boot/vmlinuz-2.6.30.3test ro root=LABEL=/ rhgb
initrd /boot/initrd-2.6.30.3test.img

……………………………………..


重開機後進入newkerneltest,確認系統可正常work