編譯前準備
1)下載一份核心原始碼,我下的是linux-2.6.7.tar.bz2,你可在如下地址下載它或者是更新的版本.
http://kernel.org/pub/linux/kernel/v2.6/
2) 下載最新版本的module-init-tools( "module-init-tools-3.0.tar.gz" and "modutils-2.4.21-23.src.rpm")
http://www.kernel.org/pub/linux/kernel/people/rusty/modules/module-init-tools-3.0.tar.gz
http://www.kernel.org/pub/linux/kernel/people/rusty/modules/modutils-2.4.21-23.src.rpm
3)安裝module-init-tools. 它會替代depmod [/sbin/depmod]和其他工具.
tar -zxvf module-init-tools-3.0.tar.gz
cd module-init-tools-3.0
./configure --prefix=/sbin
make
make install
./generate-modprobe.conf /etc/modprobe.conf
4)安裝modutils-2.4.21-23.src.rpm. 你可能會看到"user rusty and group rusty not existing"的警告. 沒關係,你只需強制安裝就是了.如果你不對Redhat 9和Redhat 8做這幾步, 你將會在"make modules_install"這一步時出現問題.
rpm -i modutils-2.4.21-23.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/modutils.spec
rpm -Fi /usr/src/redhat/RPMS/i386/modutils-2.4.21-23.i386.rpm
以上軟體 如果實在找不到,可以給我發Email索取。
編譯:
2.6.0 的編譯方法已經簡潔了很多,下面的辦法假設你的現有系統上已經具備了所有操作所需要的東西(絕大多數系統預設都已經提供)
1.下載
在 http://www.kernel.org/pub/linux/kernel/v2.6/ 下載 linux-2.6.0.tar.bz2
選擇 bz2 的原因就是壓縮比高,節約點時間 。
2.解壓
代碼:
# cd /usr/src# tar xvjpf [$NEW-KERNEL-PATH]/linux-2.6.0.tar.bz2
$NEW-KERNEL-PATH 就是你剛才將新核心下載到的路徑,以下操作都在 /usr/src 目錄下完成
3.配置代碼:
# make mrproper# make menuconfig
make mrproper 是清理代碼樹的動作,保證原始碼是乾淨的
make menuconfig 如果失敗,很可能是 ncurses 庫沒有裝,可以用 make xconfig 或者 make config 來替代
4.編譯代碼:
# make
如果不放心,也可以用舊的命令:make bzImage && make modules 。
5.安裝代碼:
# make install
如果不放心,也可以用 cp [$bzImage-PATH]/bzImage /boot/vmlinuz-2.6.0 && cp System.map /boot/System.map-2.6.0 來替代
另外, make modules_install 也一樣還可以用。
不過,建議在沒有 make clean 之前,如果增加了新的模組,可以直接 make menuconfig && make moduels && make modules_install,不需要全部重新來過
6.檢驗代碼:
# ls /boot
如果看到了 vmlinuz-2.6.0 和 System.map-2.6.0 ,那麼恭喜你,成功了!
如果你是用 make install 安裝的,還會看到個 config-2.6.0 檔案
7.清理代碼:
make clean
如果你以後還要利用這次編譯的成果,也可以省略這一步,如果你想直接刪除原始碼目錄,也可以省略這一步。
8.修改 grub
在 grub 的設定檔中進行修改,增加新核心的支援。建議保留舊核心的項目,避免編譯失敗後痛哭流涕 。
通常 grub 設定檔在下面三個地方(根據發行版的不同):
/etc/grub.conf
/boot/grub/menu.lst
/boot/grub/grub.conf
根據你的實際情況來修改。
修改參照下面:
代碼:
title Kernel 2.6.0root (hd0,0)kernel /vmlinuz-2.6.0 ro root=/dev/hda1
將 (hd0,0) 和 /dev/hda1 換成你的實際資訊,如果重新啟動後出現 kernel panic 錯誤或者顯示應該修改 init 資訊,則基本都是 kernel 語句錯誤。
8.其他
如果你的 kernel 支援記憶體鏡像,就用 mkinitrd 命令製作一個鏡像檔案,然後拷貝到 /boot 路徑下。通常在 redhat 的 /boot 下有一個 initrd-2.6.0.img 就是這麼做的,呵呵。不過這個步驟似乎並非必要,而且很多發行版預設不提供
mkinitrd 命令。就算你真的非要這麼做,也要記得在 make menu 的時候記得選擇核心鏡像 ram image,並且不能安裝為模組,否則 initrd 就不會運作。