升級RH9.0到2.6.5核心全過程(轉)

BSDLite發表於2007-08-11
升級RH9.0到2.6.5核心全過程(轉)[@more@]linux-2.6.x核心釋出後,與2.6.x核心配套的系統程式並沒有相應的來得及更新, 升級過程會碰到很多問題。雖然網上已有很多關於升級到2.6.x文章,但總是有些細節沒有作很好的總結,因此撰寫本文將我的經驗與大家分享一下。我是在虛擬機器上將Linux系統從Redhat9.0升級到2.6.5核心,虛擬機器軟體為:VMware Workstation 4.0.5 build-6030。


準備工作

1、做好重要資料的備份工作,這是一個好習慣。

2、下載最新的2.6.x核心原始碼包

所有Linux核心的官方版本可以在 找到。核心2.6.5 具體的下載地址是:。

3、升級module-init-tools軟體包

要編譯與正常執行新的核心你需要升級一些軟體包,這些資訊在原始碼目錄下的Documentation/Changes檔案中,請根據你的實際情況選擇升級。

特別要說明的是,因為2.4.x下的modutils工具包已經不在適合新的2.6.x核心, 必需將其升級到module-init-tools工具包.,我下載module-init-tools-3.0.tar.gz原始碼包的地方是:

接下來, 按照下列步驟安裝module-init-tools工具包:

tar -zxvf module-init-tools-3.0.tar.gz

在module-init-tools-3.0目錄下,

# configure --prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf

命令"make moveold"將把系統原來的modutils工具程式改名為"*.old"(比如,lsmod.old等等). NOTE! 這是非常重要的一步, 千萬不要省略. 這將使得你可以繼續使用原有的linux-2.4.x系統, 因為在2.4.x系統下, 新的module-init-tools工具包實際上是倚賴原來"*.old"程式來載入核心模組. 如果忘記了這一步也不要緊張, 可以先下載並安裝原來的modutils程式包, 然後按照上面的步驟重來一遍就可以了.

新的module-init-tools工具包不再使用原來的/etc/modules.conf配置檔案了, 而是使用新的配置檔案/etc/modprobe.conf. 因此必需用命令"./generate-modprobe.conf /etc/modprobe.conf"來生成新的配置檔案/etc/modprobe.conf.

如果你使用devfs系統你還需要複製modprobe.devfs 到/etc目錄下。

當你升級完相關軟體包之後,準備工作就算完成了,下面我們將進入到編譯階段。

配置,編譯和安裝linux-2.6.x核心

2.6的build系統與2.4有很大的不同,實際上是更加簡單與方便了。

將linux-2.6.5.tar.gz 複製到 /usr/src/ 下

tar -zxvf linux-2.6.5.tar.gz

cd linux-2.6.5

如果是新核心沒有編譯過,就不需要用make mrproper 把原來編譯產生的垃圾刪除

make menuconfig,進入核心選項卡。選擇相應的配置時,有三種選擇:

  Y--將該功能編譯進核心

  N--不將該功能編譯進核心

M--將該功能編譯成可以在需要時動態插入到核心中的模組

在編譯核心的過程中,最煩雜的事情就是這步配置工作了,很多新手都不清楚到底該如何選取這些選項。實際上在配置時,大部分選項可以使用其預設值,只有小部分需要根據使用者不同的需要選擇。選擇的原則是將與核心其它部分關係較遠且不經常使用的部分功能程式碼編譯成為可載入模組,有利於減小核心的長度,減小核心消耗的記憶體,簡化該功能相應的環境改變時對核心的影響;不需要的功能就不要選;與核心關心緊密而且經常使用的部分功能程式碼直接編譯到核心中。關於這方面,有很多文章,就不作詳細介紹了。

其中要注意的是:RH9.0使用的是ext3檔案系統,要把ext3 fs編譯進核心。如果系統是SCSI硬碟,並且root fs在SCSI硬碟上,配置核心時也要把SCSI裝置支援編譯進核心。總之,升級後的系統需要什麼,就要把相應的內容編譯進核心。

· make

· make modules

· make modules_install

· make install

該命令是最近的從2.5.69核心(按照核心釋出時間算)開始才有的選項,他可以幫你完成很多東西: (1)把壓縮核心映象複製到/boot目錄下, 並建立相應的System.map符號連結; (2)修改bootloader的配置檔案; (3)呼叫mkinitrd程式建立核心的initrd映象. 對於GRUB而言, 將在/boot/grub/grub.conf配置檔案增加如下類似的配置行:

title Red Hat Linux (2.6.5)
root(hd0, 0)
kernel /boot/vmlinuz-2.6.5 ro root=LABEL=/
initrd /boot/initrd-2.6.5.img

注意:一定要先編譯並安裝模組,再執行make install;否則可能會出現錯誤,導致升級失敗!

修改/boot/grub/grub.conf配置檔案。新核心並不識別"root=LABEL=/"這個啟動引數, 如果現在你就重新啟動新核心的話, 將發生kernel panic錯誤。因此,必需把這個" LABEL=/"替換成你真實的根分割槽,就OK了。

如何知道你的根目錄""在哪個partition上? 命令為: # df

以下是偶機器的部分輸出:

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 3834496 1609188 2030520 45% /
/dev/hda1 101089 15154 80716 16% /boot
none 46548 0 46548 0% /dev/shm

可見,我的根目錄在/dev/hda2上,需要將啟動引數改為 "root=/dev/hda2"。

重啟便可以看見kernel-2.6.5了。

宣告:本升級過程參照了網上很多相關的文章,並且得到網友們的幫助,深表感謝!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946191/,如需轉載,請註明出處,否則將追究法律責任。

相關文章