Linux的一個重要的特點就是其源代碼的公開性,全世界任何一個軟件工程師都可以將自己認為優秀的代碼加入到其中,由此引發的一個明顯的好處就是Linux修補漏洞的快速以及對最新軟件技術的利用。而Linux的內核則是這些特點的最直接的代表。 為什麼要升級內核 正如它的名字的字面意義,Linux的內核承擔著Linux操作系統的最為核心的任務,是其它程序和硬件等運行過程中的仲裁者:它要管理所有進程的內存,保證它們都能平等得到處理器的時隙。此外,它還提供程序和硬件之間的接口等功能。 通常,更新的內核會支持更多的硬件,具備更好的進程管理能力,運行速度更快、更穩定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。 一般,內核的版本序列號使用三個數字表示,如2.2.14,版本號越高表示功能越強。版本號分為兩個系列:一種是產品系列,以偶數命名,例如,1.2.x、2.0.x、2.2.x等,運行穩定,已經經過較為周密的測試;另外一種是開發測試系列,以奇數命名,用以進行最新功能的測試,不建議初學者和生產過程中使用。 本文的後面部分將分別以內核2.0.34到2.2.14的升級過程介紹內核升級用到的步驟、概念、注意事項以及可以參考的更多文檔,文中出現的斜體字是直接輸入的命令。 內核的配置與編譯 Linux當前支持的CPU類型包括x86、ARM、DEC Alpha、SUN Sparc、M68000、MIPS、PowerPC等,應該說上述類型已經包括絕大多數用戶使用的CPU型號。在安裝與配置過程中,Linux會自動識別這些型號。 通常要運行的第一個命令是:#cd /usr/src/linux;make mrproper。確保源代碼目錄下沒有不正確的.o文件以及文件的互相依賴。 接下來的內核配置過程比較煩瑣,但是配置的適當與否與日後Linux的運行直接相關,有必要了解一下一些主要的且經常用到的選項的設置。 配置內核可以根據需要與愛好使用下面命令中的一個: #make config (基於文本的最為傳統的配置界面) #make menUConfig (基於文本選單的配置界面) #make xconfig (基於圖形窗口模式的配置界面) #make oldconfig (如果只想在原來內核配置的基礎上修改一些小地方,會省去不少麻煩) 進行配置時,大部分選項可以使用其缺省值,只有小部分需要根據用戶不同的需要選擇。例如,如果需要內核支持DOS分區的文件系統,則要在文件系統部分選擇FAT或DOS系統支持;系統如果配有網卡、PCMCIA卡等,需要在網絡配置中選擇相應卡的類型。 選擇相應的配置時,有三種選擇,它們分別代表的含義如下: “Y”- 將該功能編譯進內核 “N”- 不將該功能編譯進內核 “M”- 將該功能編譯成可以在需要時動態插入到內核中的模塊。 將與核心其它部分關系較遠且不經常使用的部分功能代碼編譯成為可加載模塊,有利於減小內核的長度,減小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響。許多功能都可以這樣處理,例如像上面提到的網卡的支持、對FAT等文件系統的支持。 配置完內核,接下來需要對內核源代碼文件的依賴性和完整性進行檢驗,並且進行編譯,此時要保證系統所使用的gcc版本在gcc-2.7.2以上: #make dep (確保關鍵文件在正確的位置) #make clean (確保所有有關文件都處於最新版本狀態) #make zImage (編譯壓縮形式的內核) 在需要內核支持較多的外設和功能時,內核可能變得很大,此時可以編譯大內核: #make bzImage 編譯的時間與機器的硬件條件及內核的配置等因素有關,以筆者的64MB內存的賽揚300為例,編譯內核一次大致需要20多分鐘。所獲得的內核的位置在/usr/src/linux/arch/i386/boot目錄下,當然這裡假設用戶的CPU是x86型的。 如果選擇了可加載模塊,編譯完內核後,要對選擇的模塊進行編譯: #make module (編譯選擇的模塊) #make module-install (將編譯後的模塊轉移到系統標准位置) 模塊在系統中的標准目錄位於/lib/modules/x.y.z,後面的x.y.z是版本號,為安全起見,在運行#make modules-install之前最好對/lib/modules進行備份。模塊通常是帶有擴展名.o的文件,使用命令#lsmod可以對當前內核的模塊進行列表。 軟件下載與解包 選擇相對快速並且具有權威性的站點下載最新的內核源代碼包,例如條件允許的話可以到下面的站點下載: FTP://sunsite.unc.edu/pub/linux/kernel 國內Linux用戶可以到下面的站點下載: http://studio.openunix.org http://www.clinuxworld.com 注意,如果升級版本的跨度很大,並且預計會配置外部模塊時,還要下載最新的模塊工具modules-x.y.z.tar.gz。 Linux系統的核心代碼存放於目錄/usr/src/linux,實際上,該目錄是一個鏈接,指向當前所用的核心版本的目錄,例如如果當前使用的版本是2.0.34,則該核心的實際目錄應該是:/usr/src/linux-2.0.34。而新下載的內核中的目錄是linux,這樣,直接在/usr/src下解包會導致原來的內核目錄被覆蓋。所以穩妥的做法是,首先刪除鏈接linux,然後解包、更名、重新鏈接。 在解包前要確認在/usr/src目錄下沒有叫linux的目錄,或者不再想保留該目錄。 另外,隨著Linux內核功能的增強及對更多外設的支持,文件包也越變越大,當前最新的穩定版2.2.14內核壓縮包的大小約為14MB,但實際上解壓縮及編譯等環節,要求/usr/src目錄所在的分區的空閒空間大於60MB字節。 啟用新內核 將編譯好的新內核拷貝到系統目錄/boot下,例如 #cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage-2.2.14 然後,編輯系統引導配置文件/etc/lilo.conf,仿照原有選項添入新內核選項,給它起一個明顯好記的標簽(label),記住此時最好保留原有內核以及相應的選項,這樣不用害怕升級失敗而機器啟動不了,至少還可以使用舊的內核引導自己的計算機。保存編輯後退出,此時要記住運行命令:#lilo,更新系統引導映象,這樣對lilo.conf的修改才能起作用。 重啟機器後,在LILO的提示符下按“Tab”鍵,則應該看到加入的新內核選項。 對於當前國內進行漢化後的Linux版本,由於其中的幾個主要版本是在內核中進行,例如沖浪平台的Xteam Linux、藍點Bluepoint Linux等,所以使用這些發行版本的用戶如果按照上面的步驟進行內核升級則會導致漢化失敗、系統運行不穩定等後果。用戶需要等待廠家發行新內核的漢化包,然後到廠家指定的下載站點下載,按照其中的說明進行升級。