2007年10月26日 星期五

◎在什麼情況下需要重新編譯Linux的系統核心?

 
有關編Kernel的問題請看官們自己看看...相信這作者寫得很清楚,我的記性實在不好呀。

--

Linux需要重新編譯系統核心(Kernel)的時機有以下幾個:更新版本讓系統具備更多功能、支援更多硬體裝置;其次是開啟預設未啟用的功能。

在Linux將要載入核心之前,我們可以在GRUB選單看到目前所使用的核心版本,或者是在開機完成之後,於終端機的文字介面下輸入「uname –r」指令查詢核心版本。

在官方網站Linux Kernel Archives(www.kernel.org),可以取得所需要的核心版本。Linux核心的更新速度非常快,平均每幾天就會有一個新版本出現,不過這也不意味著我們需要如此頻繁地更新。

一般來說,只有為了新版本已提供我們所需要的功能,以及舊版本有若干問題需要修補時,才需要下載新版本的核心予以置換。

置換核心的方式有2種,一種是下載完整版本系統核心原始檔,一種則是透過修補檔(Patch)的方式升級。

當新版本的核心下載完成之後,需要在「/usr/src」的路徑下解開,然後以ln指令在同一路徑下連結建立一個名為linux的新目錄,之後再透過手動編譯的方式,以便產生出可供系統使用的新核心。

在/usr/src/linux,也就是剛才所建好的linux目錄下,輸入「make config」、「make menuconfig」,以及「make gconfig」3個指令當中的任何一個,開始編譯並設定新核心的功能。

不同之處在於前2者是在文字介面下執行,make gconfig則是在X-Windows介面下提供圖形化介面,讓使用者可以透過滑鼠選取想要開啟的功能,對於剛接觸Linux的人來說,這是比較簡單的一種方式。

最後我們再依序輸入make all、make modules_install、depmod–a,以及mkinitrd……等4個指令,就會開始執行編輯的動作,並產生出所需要的系統核心。

有了新核心之後,接著就要開始進行置換核心的工作,首先將/usr/src/linux下的資訊檔System.map複製到/boot下,並更名為System.map.xxx(xxx命名的方法,需參考/usr/src/linux下的Makefile)。

然後在/usr/src/linux/atch/i386/boot找到一個叫做bzImage的檔案,這個檔案就是我們所需要的新核心,同樣必須將它複製到/boot下,將檔名改為vmlinuz.xxx(需和System.map的xxx字串一致),最後一個步驟就是以文字編輯器開啟/boot/grub下的menu.lst檔,在開機選單當中加入新的選項,儲存之後重新啟動系統。

測試上沒有問題的話,核心的編譯與更新作業,就算是告一段落。


如果是第二種方式,也就是透過更新檔升級核心,首先還是要下載完整版本系統核心原始檔,然後將更新檔解開至核心原始檔的所在目錄,接著執行gzip –cd patch-xxx.gz patch –pl的指令,完成修補的動作之後,最後還必需再進行一次編譯核心。

更新檔的使用除了單純升級升級版本之外,一些新推出的硬體裝置,驅動程式也會以更新檔的形式加以包裝,舉例來說,在Intel新版的Santa Rosa平臺啟用ACHI模式就是例子之一。文⊙楊啟倫
 
 

轉載至iThome這篇,原文為完整版。

0 意見: