用了一段時間的Ubuntu了。打算裝個Gentoo來用用。那麼關於內核的編譯那是必須得學的。這裏以Linux/i386 3.3.3 Kernel Configuration爲例來學習關於內核編譯中選項配置的學習。
Linux/i386 3.3.3 Kernel Configuration
│ │ [*] Enable the block layer ---> 塊設備支持
│ │ Processor type and features ---> 處理器類型和功能
│ │ Power management and ACPI options ---> 電源管理和ACPI選項
│ │ Bus options (PCI etc.) ---> 總線選項(PCI等)
│ │ Executable file formats / Emulations ---> 可執行的文件格式
│ │ -*-Networking support ---> 網絡支持
│ │ Device Drivers ---> 設備驅動
│ │ Firmware Drivers ---> 固件驅動
│ │ File systems ---> 文件系統
│ │ Kernel hacking ---> 核心黑客
│ │ Security options ---> 安全選項
│ │ -*-Cryptographic API ---> 密碼編譯API
│ │ [*] Virtualization ---> 虛擬化
│ │ Library routines ---> 函式庫
以上爲make menuconfig 出來的選項菜單。在第一篇裏先把這主菜單進行說明。
(一)General setup:與Linux 最相關的程序互動、核心版本說明、是否使用發展中程序代碼等信息都在這裏設定的。 這裏的項目主要都是針對核心不程序之間的相關性來設計的。
(二)Enable loadable module support:模塊是一小段代碼,編譯 後可在系統內核運行時動態的加入內核,從而爲內核增加一些特性或是對某種硬件進行支持。一般一些不常用到的驅動或特性可以編譯爲模塊以減少內核的體積。在 運行時可以使用modprobe命令來加載它到內核中去(在不需要時還可以移除它)。一些特性是否編譯爲模塊的原則是,不常使用的,特別是在系統啓動時不 需要的驅動可以將其編譯爲模塊,如果是一些在系統啓動時就要用到的驅動比如說文件系統,系統總線的支持就不要編爲模塊,否則無法啓動系統。在啓動時不用到
的功能,編成模塊是最有效的方式。
(三)Enable the block layer:使用硬盤/USB/SCSI設備者必選這選項使得塊設備可以從內核移除。如果不選,那麼 blockdev 文件將不可用,一些文件系統比如 ext3 將不可用。這個選項會禁止 SCSI 字符設備和 USB 儲存設備,如果它們使用不同的塊設備。
(七)Executable file formats / Emulations:是給 Linux 核心運作執行文件之用的數據。通常是不編譯行爲有關。
(八)Networking support:是相當重要的選項,因爲他還包括了防火牆相關的項目。由於防火牆是在啓動網絡之後再設定即可,所以絕大部分的內容都可以被編譯成爲模塊,而且也建議你編成模塊!有用到再載入到核心即可。
(九)Device Drivers:設備驅動設定。
(十)Firmware Drivers:固件驅動設定。
(十一)File systems:文件系統的支持也是很重要的一項核心功能!因爲如果不支持某個文件系統,那我們的 Linux kernel 就無法識別,當然也就無法使用。
(十二)Kernel hacking:這裏翻譯爲核心黑客。有點怪怪的。這裏和核心開發者比較有關的部分,這部分建議保留默認值即可, 應該不需要去修改他!除非
你想要進行核心方面的研究。
(十三)Security options:這裏是屬於信息安全方面的設定, 包括 SELinux 這個細部權限強化模塊也在這裏編入核心的!這部分可以作一些額外的設定。
(十四)Cryptographic API:是微軟在 Windows 操作系統中添加的密碼編譯機能,作爲資料加密與解密功能的重要基礎,CryptoAPI 支援同步,異步的金鑰加密處理,以及操作系統中的數位憑證的管理工作。
(十五)Virtualization:虛擬化是近年來非常熱門的一個議題,因爲計算機的能力太強,所以時常閒置在那邊, 此時,我們可以透過虛擬化技術在一部主機上面同時啓勱多個操作系統來運作,這就是所謂的虛擬化。 Linux 核心已經主動的納入虛擬化功能!而 Linux 認可的虛擬化使用的機制爲 KVM(Kernel base Virtual Machine)。
(十六) Library routines:常用的核心函式庫也可以全部編爲模塊。