Kernel (核心)是作業系統的核心元件,負責處理應用程式和硬體之間的溝通。不但負責硬體的驅動,更提供了各種系統所需的核心功能、包括防火牆機制、是否支援 LVM 或 Quota 等檔案系統等…都是靠核心所負責的
在 kernel 中,為符合不同計算機結構的需求,可能需要對 kernel source 作一些調整,如調整 memory mapped I/O 或增加專屬於該結構的特殊功能。

安裝相關套件
在開始設定之前,請先安裝所需的套件
gcc gcc-c++ : 用於make 編譯時使用
ncurses-devel : 用於make menuconfig 時使用
 
Kernel 的版本有很多,請依照自己需要的下載
首先下載要更新的核心,並且解壓縮
切換到 kernel 目錄
首先要做 make mrproper (清理原始檔)
make mrproper 會將所有編譯出來的檔案(含.configure)都清除,這個動作可以確保這次編譯的kernel不會被之前的設定所影響。
再來是 make clean
Make clean : 只會刪除類似目標檔之類的編譯過程產生的中間檔案,而不會刪除設定檔
把原本的核心config 複製成.config 放在 kernel 目錄
接下來
make menuconfig
到最下面load config 把剛剛的.config 載入,並且以它設定新核心
最後儲存成新的.config
 
重要的設定如下
General setup
–> [*] enable deprecated sysfs features to support old userspace tools
 

開始compiler編譯新核心
首先執行
make bzImage
再來執行
make modules
最後執行
make modules_install
 
mkinitrd -v /boot/initrd-2.6.39.4.img 2.6.39.4
 
剛編譯好的核心會放在 kernel 目錄 arch/x86/boot/bzImage
複製新核心到 /boot 且修改核心檔名
cp bzImage /boot/vmlinuz-2.6.39.4 (我是從2.6.39.4編譯新核心)
 
編輯開機選單 (grub)

重新以新核心開機測試

編譯新核心產生的錯誤訊息修正:
 
make install 时出现一下警告:
WARNING: No module ehci-hcd found for kernel 2.6.39.4, continuing anyway
WARNING: No module ohci-hcd found for kernel 2.6.39.4, continuing anyway
WARNING: No module uhci-hcd found for kernel 2.6.39.4, continuing anyway
 
這三個警告是由於USB相關的module沒有編譯成module所導致的
解決方法:
vim .config
分別找到一下:
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
將其改為:
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
 
WARNING: No module ata_piix found for kernel 2.6.39.4, continuing anyway
這個警告是因為沒有將ATA的相關驅動加載到module
CONFIG_ATA_PIIX=y
將其改為
CONFIG_ATA_PIIX=m
 

開機遇到的問題
mount: could not find filesystem ‘/dev/root’
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic – not syncing: Attempted to kill init!
 
解決方法就是加入對舊版sysfs路徑的支持,方法如下:
 
1)、通過make menuconfig選中以下對應的選項
 
General setup –>
[*] enable deprecated sysfs features to support old userspace tools
2)、修改.config文件
  修改.config文件中CONFIG_SYSFS_DEPRECATED_V2,將原本被註釋掉的
CONFIG_SYSFS_DEPRECATED_V2 改成CONFIG_SYSFS_DEPRECATED_V2=y
 
注 : 修改這項是因為舊版的mkinitrd及其nash在核心沒有CONFIG_SYSFS_DEPRECATED_V2參數時默認使用舊版sysfs路 徑格式,從而在新核心下無法正確存取/sys
1439803896437

Tags: , , ,