為什麼定制內核?
任何 Linux 系統的核心是內核本身
這部分講述編譯定制的內核
為什麼要定制內核
構建內核的兩個基本方法
編譯內核的步驟以及應該知曉的各種選項
一般來說
Linux 的長期用戶很少在他們的系統中使用標准內核
這並不是因為多數分發版提供的內核存在嚴重錯誤 — 實際上
Red Hat 在他們的產品中提供的內核是穩定的而且
做工精良
這是婦孺皆知的
問題是
多數主流發行商編譯的內核需在盡可能多的體系結構和系統中穩定運行
所以
幾乎可以肯定地說
適合於廣大用戶的內核並不是為您的系統和需求而優化的
編譯定制內核的一些常見理由是
越少越好
一般來說
為某個系統編譯的內核要比標准內核運行得快而且在日常操作中更穩定
定制的內核往往使用更少的內存
這將減少 I/O 開銷(內存中的內核代碼從不被轉移到交換區)
釋放系統資源
供其它進程使用
在標准內核被發布後
定制內核使您能夠利用改進的代碼
新的驅動程序和錯誤修正
當您從內核中除去沒用的驅動程序和功能後
新內核自然要比標准內核更安全
把重要的功能和驅動程序構建到內核中去而不是把它們作為模塊裝入
這樣做能提高系統的響應速度
很多人不願編譯內核的主要原因很可能是以為編譯過程很復雜(或者說可怕)
希望通過學習這部分內容能使您認識到編譯過程並不復雜
兩種思路……
在編譯內核時有兩種基本的思路
基於模塊的和單塊的
在單塊的內核中
所有的系統服務
功能和驅動程序都被直接構建到內核中
在與之相對的基於模塊的內核中
只有一些關鍵組件才被構建到內核中
其余的組件將在需要的時候作為模塊被裝入
正如 Linux 中的許多其它作法那樣
常用的定制方法是兩種方法並用
關鍵的服務和驅動程序被編譯到內核中去
較少用到的組件被構建成模塊
一般的規律是
為某一個系統構建的內核往往更少使用模塊
為多個系統構建的內核往往更多地使用模塊
內核編譯概述
只要您仔細地完成某些步驟
構建內核並不象有些人想象的那樣困難
簡而言之
構建的步驟如下
決定構建內核
下載所需的源代碼 tarball 並將它移到 /usr/src
cd
至 /usr/src
為安全起見
刪除當前內核源代碼的現有的符號鏈接(symbolic link)( rm
rf /usr/src/linux )
當前內核軟件包被解壓到名為 /usr/src/linux
kernel
version 的目錄
但一些舊的軟件包仍按舊的約定被解壓到 /usr/src/linux — 這將覆蓋現有的 Linux 源代碼樹
解壓源代碼軟件包( tar xvzf linux
kernel
version )
再次創建先前刪除的符號鏈接( ln
sf /usr/src/linux
kernel
version linux )
cd
至 /usr/src/linux
輸入 make mrproper
這個命令將清理源代碼樹並刪除所有舊的目標文件
現有的nfig 文件也將被刪除nfig 保存著編譯選項)
所以
如果您想保存該文件中的設置
請把該文件復制到安全的位置
等 make 進程完成後再把它復制到 /usr/src/linux
下一頁將完成定制過程
內核編譯概述
在前一頁
我們已開始構建內核的過程
下載和解壓源代碼
清理源代碼樹
在這頁中我們將完成構建內核的過程
根據您偏愛的界面
輸入 make config
make menuconfig
make xconfig 或 make oldconfig
make config 是基於控制台的配置過程
make menuconfig 提供基於光標的菜單配置界面
make xconfig 是基於 X
Window 的界面
如果您想用現有的內核配置來構建新的內核而且您只想看到新內核樹中存在的新選項
請使用 make oldconfig
當您作出合適的配置選擇後
請輸入 make dep ; make clean
為了實際構建內核
請輸入 make bzImage 或 make install
前一個命令構建內核映象但並不把它安裝到 /boot 目錄
後一個命令構建並安裝內核映象
如果內核編譯時有錯誤
請輸入 make modules && make modules_install
這兩個命令將構建並安裝所有基於模塊的組件
最後
把新的內核復制到 /boot(如果您使用了 make bzImage 命令)
如果您運行的是 Red Hat 的分發版
那麼您還得更新 System
map 和 initrd 映象
別忘了在引導裝入程序的配置中加入新的內容
這樣做的目的是為了在內核引導失敗的情況下使用戶仍然能夠回到系統中
作出合適的修改
Red Hat 提供一個綜合的實用指南
該指南詳細描述了如何編譯內核(請參閱參考資料)
對於初次構建 Linux 內核的人來說
這個指南值得一讀
配置竅門和提示
構建優化的 Linux 內核的最重要的步驟是前面提到的 make configure/menuconfig/xconf/oldconfig 過程
在這個過程中
您選擇把哪些系統
服務和驅動程序包括在內核中
哪些東西被構建成模塊
在這個過程中
最常見的問題是
在配置中包括哪些東西
不包括哪些東西?
和
哪些組件被構建到內核中去
哪些組件被構建成模塊?
對第一個問題的簡短回答是
只包括您所需的並使系統按您的要求運行的東西
(別忘了
越少越好)
對於第二個問題
回答是
摸著石子過河
這有點令人費解
甚至有經驗的管理員也未必能夠在第一次配置後就能使系統達到最佳性能
如果編譯過程失敗或者您得到的是無法引導的內核
那麼請使用引導裝入程序的備用選項
返回系統後仔細檢查配置
試試另一組選項
第二個問題(哪些組件被構建到內核中去
哪些組件被構建成模塊?)的回答取決於您將怎樣使用系統
還有經驗
例如
如果 Maestro
聲音驅動程序被編譯到內核中去
那麼該驅動程序無法在某些 Dell 筆記本電腦上運行 — 出於某些原因
應該以模塊的形式裝入這個驅動程序
在其它使用主流硬件的系統中
您可以把任何需要的東西構建到內核中去
在這裡
系統配置和經驗常常決定了您的選擇
內核配置中的重要選項
為了使初學者熟悉內核配置的過程
下幾頁將講述值得注意的一些重要選項
這些選項可能提高或降低系統性能
在我們開始以前
請注意
在使用 menuconfig 和 xconfig 配置界面的時候
您可以獲得大多數選項的描述
方法是選擇您有問題的選項
用 Tab 鍵選中 help 按鈕
再按 Enter 鍵
還有
不同版本的內核的配置選項是不相同的
如果您在內核中沒有看到某個選項而您需要這個功能
那麼您有兩種選擇
試試另一個內核
或者查找合適的 diff 文件
然後手工修補內核
如果您想了解如何使用補丁
請參閱前面提及的 Kernel
HOWTO 文件(請參閱參考資料)
內核配置選項
代碼成熟程度和級別選項
第一個需要注意的選項是列表中的第一個菜單項
Code maturity level options
除非您選擇
Prompt for development and/or incomplete code/drivers
否則您將無法看到許多內核配置選項
General setup 和 Loadable module support 中的缺省值適合於大多數系統
在 Processor type and features 中
請注意內核編譯的目標處理器的類型(缺省值是 Pentium
/Celeron)
SMP 是缺省值
如果您在為單處理器系統構建內核
請您取消選擇這個選項
當前的內核為
Preempible Kernel
提供支持
請選擇這個選項
該功能的描述中說
在響應實時或交互式事件時
通過使優先級較低的進程失效(即便它在內核模式中執行系統調用)
減少內核的等待時間
即使在系統負載不大的時候
該功能也能使應用程序運行地更穩定
內核配置選項
電源管理選項
在列表的下面
下一個值得注意的菜單組是 Power management options
一般來說
膝上型電腦的用戶至少需要某種形式的電源管理
但在這方面
BIOS 在與操作系統交互時常常會出現問題
這一點是眾所周知的
除非您確信您的系統完全支持 ACPI
請使用簡單的 APM
除了少數一些筆記本電腦
啟用 ACPI 將使所構建的內核在引導時遇到麻煩
對於台式機用戶和服務器管理員來說
設置電源管理就象設置
個人偏愛
那樣無關緊要
Bus options 包括對各種總線拓撲結構的支持
例如 PCI
EISA
MCA 和 PCI 熱插拔支持
除了一個值得注意的選項外
其它缺省值已被合適地設好
如果您准備使用 PCMCIA 網絡或無線卡並計劃使用 pcmcia
cs 驅動程序代碼而不是 Linux 內核提供的驅動程序
那麼請在 Network device support 菜單中禁用 PCMCIA/Cardbus 支持選項但啟用 PCMCIA network device support
內核配置選項
設備支持選項
配置菜單上的大多數設備支持選項不需要特別的說明
如果您需要某個選項的支持
請選擇它
否則就別選它
需要特別說明的是 Network device support
目前的
x 開發內核在缺省情況下啟用一小部分設備
但一些舊的內核缺省地啟用許多設備(作為模塊)
仔細地查看每個選項
不選所有今後用不到的選項
建議您把一個或兩個 EtherExpressPro/
選項構建到內核中去
因為許多一般的網卡支持這種芯片組
而且准備一個備用網絡設備選項是不錯的主意
Filesystems 菜單是另一個需要仔細選擇的菜單
如果您選擇 ReiserFS 或 EXT
文件系統
那麼必須啟用相關的支持並把它構建到內核中去
否則
您的系統將無法引導(在系統初始化時
Linux 必須能訪問分區上的文件系統)
建議您選擇 EXT
選項
它所包含的代碼相對較少
在出現問題時
內核中的 EXT
支持可能有用
如果您准備通過 Samba 連接到 Windows 共享文件系統
那麼請在 Filesystems
>Network files systems
From:http://tw.wingwit.com/Article/program/Oracle/201311/17822.html