LINUX內核目錄文件說明以及配置並編譯內核的方法

       在下載內核前,我們應該討論一些重要的術語和事實。Linux內核是一個宏內核,這意味着整個操作系統都運行在內核預留的內存裏。說的更清楚一些,內核是放在內存裏的。內核所使用的空間是內核預留的。只有內核可以使用預留的內核空間。內核擁有這些內存空間,直到系統關閉。與內核空間相對應的還是用戶空間。用戶空間是內存上用戶程序擁有的空間。比如瀏覽器、電子遊戲、文字處理器、媒體播放器、壁紙、主題等都是放在內存裏的用戶空間。當一個程序關閉的時候,任何程序都可以使用新釋放的空間。在內核空間,一旦內存被佔用,則沒有任何其他程序可以使用這塊空間。

  Linux內核也是一個搶佔式多任務內核。這意味該內核可以暫停一些任務來保證任何應用都有機會來使用CPU。舉個例子,如果一個應用正在運行但是正在等待一些數據,內核會把這個應用暫停並允許其他的程序使用新釋放的CPU資源,直到數據到來。否則的話,系統就會浪費資源給那些正在等待數據或者其他程序執行的的任務。內核將會強制程序去等待或者停止使用CPU。沒有內核的允許,應用程序不能脫離暫停或者使用CPU。

  Linux內核使得設備作爲文件顯示在/dev文件夾下。舉個例子,USB端口位於/dev/bus/usb。硬盤分區則位於/dev/disk/分區。因爲這個特性,許多人說:“在Linux上,一切皆文件”。舉個例子,如果一個用戶想要訪問在存儲卡上的數據,他們能通過設備文件訪問這些數據。(譯註:此處原文是“If a user wanted to access data on their memory card, for example, they cannot access the data through these device files.”,但根據上下文和實際經驗看,應該是“can 能”

  Linux內核是可移植的。可移植性是Linux流行的一個最重要的原因。可移植性使得內核可以工作在各種處理器和系統上。一些內核支持的處理器的型號包括:Alpha、AMD、ARM、C6X、Intel、x86、Microblaze、MIPS、PowerPC、SPARC、UltraSPARC等,這還不是全部的列表。

  在引導文件夾(/boot),用戶會看到諸如“vmlinux”或者“vmlinuz”的文件。這兩者都是已編譯的Linux內核。以“z”結尾的是已壓縮的。“vm”代表虛擬內存。在SPARC處理器的系統上,用戶可以看見一個zImage文件。一小部分用戶可以發現一個bzImage文件,這也是一個已壓縮的Linux內核。無論用戶有哪個文件,這些引導文件都是不能更改的,除非用戶知道他們正在做什麼。否則系統會變成無法引導,也就是說系統啓動不了了。

  內核源代碼就是程序編碼。有了源代碼,程序員可以修改內核並能觀察到內核是如何工作的。

下載內核:

  現在我們想更多地瞭解了內核,就要下載內核源代碼了。進入並點擊那個巨大的下載按鈕。下載完成後,解壓下載的文件。

  對於本文,我使用的源代碼是Linux kernel 3.9.4.這個文章系列的所有指導對於所有的內核版本是相同的(或者非常相似的)

  更多精彩內容請看下一頁

  Linux Kernel 的詳細介紹:請點這裏
Linux Kernel 的下載地址:請點這裏

  推薦閱讀:

  怎樣在 Ubuntu 上安裝 Linux 3.11 內核

  Ubuntu 13.10 (Saucy Salamander) 內核已升級至 Linux Kernel 3.10 RC5

  Linux內核參數設置文件nf

  在下載並解壓內核源代碼後,用戶可以看到許多文件夾和文件。源代碼以一個特定的方式組織的。這使開發者能夠輕鬆找到任何文件或者內核的一部分。


kernel第一級目錄:

  內核源代碼的根目錄下包含了以下文件夾

  arch
block
crypto
Documentation
drivers
firmware
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
tools
usr
virt

arch - 這個文件夾包含了一個Kconfig文件,它用於設置這個目錄裏的源代碼編譯所需的一系列設定。每個支持的處理器架構都在它相應的文件夾中。如,Alpha處理器的源代碼在alpha文件夾中。請記住,隨着時間的推移,一些新的處理器將被支持,有些會被放棄。

  block – 此文件夾包含塊設備驅動程序的代碼。塊設備是以數據塊方式接收和發送的數據的設備。數據塊都是一塊一塊的數據而不是持續的數據流。-----該目錄用於實現塊設備的基本框架和塊設備的I/O調度算法

  crypto - 這個文件夾包含許多加密算法的源代碼。例如,“sha1_generic.c”這個文件包含了SHA1加密算法的代碼。

  Documentation - 此文件夾包含了內核信息和其他許多文件信息的文本文檔。如果開發者需要一些信息,他們也許能在這裏找到所需要的信息。

  drivers - 該目錄包含了驅動代碼。驅動是一個控制硬件的軟件。例如,要讓計算機知道鍵盤並使其可用,鍵盤驅動是必要的。這個文件夾中存在許多文件夾。每個文件夾都以硬件的種類或者型號命名。例如,'bluetooth'包含了藍牙驅動程序的代碼。還有其他很明顯的驅動像SCSI、USB和火線等。有些驅動程序可能會比較難找到。例如,操縱桿驅動不在'joystick'文件夾中,它們卻在./drivers/input/joystick。同樣鍵盤和鼠標驅動也在這個input文件夾中。 'Macintosh'包含了蘋果的硬件代碼。 'Xen'包含了Xen hypervisor代碼。(hypervisor是一種允許用戶在一臺計算機上運行多個操作系統的軟件或硬件。這意味着在Xen允許用戶在一臺計算機上同時運行的兩個或兩個以上的Linux系統。用戶還可以運行Windows,Solaris,FreeBSD或其他操作系統在Linux系統上。)driver文件夾下還有許多其他的文件夾,但他們在這篇文章中無法一一列舉,他們將在以後的文章中提到。

  firmware - fireware中包含了讓計算機讀取和理解從設備發來的信號的代碼。舉例來說,一個攝像頭管理它自己的硬件,但計算機必須瞭解攝像頭給計算機發送的信號。Linux系統會使用vicam固件(firmware)來理解攝像頭的通訊。否則,沒有了固件,Linux系統將不知道如何處理攝像頭髮來的信息。另外,固件同樣有助於將Linux系統發送消息給該設備。這樣Linux系統可以告訴攝像頭重新調整或關閉攝像頭。

  fs - 這是文件系統的文件夾。理解和使用的文件系統所需要的所有的代碼就在這裏。在這個文件夾裏,每種文件系統都有自己的文件夾。例如,ext4文件系統的代碼在ext4文件夾內。 在fs文件夾內,開發者會看到一些不在文件夾中的文件。這些文件用來控制整個文件系統。例如,mount.h中會包含掛載文件系統的代碼。文件系統是以結構化的方式來存儲和管理的存儲設備上的文件和目錄。每個文件系統都有自己的優點和缺點。這是由文件系統的設計決定的。舉例來說,NTFS文件系統支持的透明壓縮(當啓用時,會在用戶不知道的情況下自動壓縮存儲文件)。大多數文件系統缺乏此功能,但如果在fs文件夾裏編入相應的文件,它們也有這種能力。

  include - include包含了內核所需的各種頭文件.這個名字來自於C語言用"include"來在編譯時導入頭文件。

  init - init文件夾包含了內核啓動的處理代碼(INITiation)。main.c是內核的核心文件,這是用來銜接所有的其他文件的源代碼主文件。

  ipc - IPC代表進程間通訊。----用於實現System V的進程間通信(Inter Process Communication,IPC)模塊 .       此文件夾中的代碼是作爲內核與進程之間的通信層。內核控制着硬件,因此程序只能請求內核來執行任務。假設用戶有一個打開DVD托盤的程序。程序不直接打開托盤,相反,該程序通知內核托盤應該被打開。然後,內核給硬件發送一個信號去打開托盤。這些代碼同樣管理kill信號。舉例來說,當系統管理員打開進程管理器去關閉一個已經鎖死的程序,這個關閉程序的信號被稱爲kill信號。內核接收到信號,然後內核會要求程序停止或直接把進程從內存和CPU中移除(取決於kill的類型)。命令行中的管道同樣用於進程間通信。管道會告訴內核在某個內存頁上寫入輸出數據。程序或者命令得到的數據是來自內存頁上的某個給定的指針。

  kernel - 這個文件夾中的代碼控制內核本身。例如,如果一個調試器需要跟蹤問題,內核將使用這個文件夾中代碼來將內核指令通知調試器跟蹤內核進行的所有動作。這裏也有跟蹤時間的代碼。在內核文件夾下有個"power"文件夾,這裏的代碼可以使計算機重新啓動、關機和掛起。

  lib - 這個文件夾包含了內核需要引用的一系列內核庫文件代碼。

  mm - mm文件夾中包含了內存管理代碼。內存並不是任意存儲在RAM芯片上的。相反,內核小心地將數據放在RAM芯片上。內核不會覆蓋任何正在使用或保存重要數據的內存區域。

  net - net文件夾中包含了網絡協議代碼。這包括IPv6、AppleTalk、以太網、WiFi、藍牙等的代碼,此外處理網橋和DNS解析的代碼也在net目錄。

  samples - 此文件夾包含了程序示例和正在編寫中的模塊代碼。假設一個新的模塊引入了一個想要的有用功能,但沒有程序員說它已經可以正常運行在內核上。那麼,這些模塊就會移到這裏。這給了新內核程序員一個機會通過這個文件夾來獲得幫助,或者選擇一個他們想要協助開發的模塊。

  scripts - 這個文件夾有內核編譯所需的腳本。最好不要改變這個文件夾內的任何東西。否則,您可能無法配置或編譯內核。

  security - 這個文件夾是有關內核安全的代碼。它對計算機免於受到病毒和黑客的侵害很重要。否則,Linux系統可能會遭到損壞。關於內核的安全性,將在以後的文章中討論。

  sound - 這個文件夾中包含了聲卡驅動。------存放聲音系統架構相關代碼和具體聲卡的設備驅動程序

  tools - 這個文件夾中包含了和內核交互的工具。

  usr - 還記得在以前的文章中提到vmlinuz和其他類似的文件麼?這個文件夾中的代碼在內核編譯完成後創建這些文件。----該目錄中的代碼爲內核尚未完全啓動時執行用戶空間代碼提供了支持

  virt - 此文件夾包含了虛擬化代碼,它允許用戶一次運行多個操作系統。這與先前提到的Xen是不同的。通過虛擬化,客戶機操作系統就像任何其他運行在Linux主機的應用程序一樣運行。通過Xen這樣的hypervisor(注:虛擬機管理程序),兩個操作系統可以同時管理硬件。在虛擬化中,在客戶機操作系統上運行在Linux內核上,而在hypervisor中,它沒有客戶系統並且所有的系統不互相依賴。


  還有一些文件在源代碼的根目錄下。它們會在下面列出。

  COPYING -許可和授權信息。Linux內核在GPLv2許可證下授權。該許可證授予任何人有權免費去使用、修改、分發和共享源代碼和編譯代碼。然而,沒有人可以出售源代碼。

  CREDITS - 貢獻者列表

  Kbuild - 這是一個設置一些內核設定的腳本。打個比方,這個腳本設定一個ARCH變量,這是開發者想要生成的內核支持的處理器類型。

  Kconfig - 這個腳本會在開發人員配置內核的時候用到,這會在以後的文章中討論。

  MAINTAINERS - 這是一個目前維護者列表,他們的電子郵件地址,主頁,和他們負責開發和維護的內核的特定部分或文件。當一個開發者在內核中發現一個問題,並希望能夠報告給能夠處理這個問題的維護者時,這是是很有用的。

  Makefile - This script is the main file that is used to compile the kernel. This file passes parameters to the compiler as well as the list of files to compile and any other necessary information. 這個腳本是編譯內核的主要文件。這個文件將編譯參數和編譯所需的文件和必要的信息傳給編譯器。

  README - 這個文檔提供給開發者想要知道的如何編譯內核的信息。

  REPORTING-BUGS - 這個文檔提供如何報告問題的信息。


 

第二級目錄:

(1)ARCH目錄

對於Linux v3.9.4,arch下有以下文件夾:

alpha
arc
arm
arm64
avr32
blackfin
c6x
cris
frv
h8300
hexagon
ia64
m32r
m68k
metag
microblaze
mips
mn10300
openrisc
parisc
powerpc
s390
score
sh
sparc
tile
um
unicore32
x86
xtensa


該目錄中每個子目錄都與某種體系結構對應,用於存放系統結構相關代碼,向平臺無關的系統核心模塊提供所需的功能接口。每個體系結構對應的子目錄下通常至少包含以下幾個子目錄: 
         Kernel子目錄:用於存放特定體系結構特有信號量的實現代碼和對稱多處理器(Symmetric MultiProccessing,簡稱SMP)相關模塊。
Lib子目錄:用於存放以來依賴當前體系結構的輔助功能,如利用當前體系結構特性實現的strlen和memcpy內存操作函數;與通用的實現方法相比,他們的開銷小、更加高效。 
         Mm子目錄:用於存放體系架構特定的內存管理模塊,包括內存的初始化、頁表管理等內容。
         Boot子目錄:該目錄中包含了當前平臺上系統引導過程使用的部分或全部代碼。這部分代碼以來當前平臺,用於完成向系統內存裝載內核鏡像的工作。


各處理器簡單介紹:

alpha 處理器
Alpha 處理器最早由美國DEC 公司設計製造,在Compaq (康柏)公司收購DEC 之後,Alpha 處理器繼續得到發展,並且應用於許多高檔的Compaq 服務器上,HP (惠普)收購的Compaq ,Alpha 便爲HP(惠普)所有,不過HP (惠普)已經放棄發展alpha 處理器。
arm 處理器
Arm 系列處理器 是英國Arm 公司設計的主流嵌入式32 位RISC 處理器,Arm 公司不直接生產Arm 處理器,而是採用IP 授權的方式由第3 方開發生產,著名的公司如Ti 、Samsung 等都有出品Arm 處理器。目前在手機領域廣泛應用。
avr32 處理器
Avr32 處理器美國 Atmel 公司設計開發的32 位RISC 處理器, 設計目的是在每一個時鐘週期內完成更多處理工作,從而在較低的時鐘頻率下實現相同的吞吐量。適合在工業控制、汽車電子等嵌入式設備領域中使用。Avr32 屬於MCU 型的處理器。
blackfin 處理器
Blackfin 處理器是美國ADI 公司開發的具有DSP 能力的 32 位RISC 處理器, Blackfin 處理器基於由 ADI 和 Intel 公司聯合開發的微信號架構 (MSA ), 適用於 嵌入式音頻、視頻和通信應用等領域。
cris 處理器
Cris 處理器是 瑞典 Axis 通信公司開發的32 位RISC 處理器,主要用於網絡設備,屬於比較專業的應用領域。因爲 Axis 通信公司主要開發網絡監控設備,所以 Cris 處理器在其網絡監控設備中應用廣泛。
frv 處理器
Frv 處理器是 日本富士通開發的32 位高性能RISC處理器, 採用VLIW (Very Long Instruction Word )構架,具備良好的多媒體處理能力,在機頂盒(STB )、數碼刻錄機(DVR )、數碼相機(DSC)等嵌入式領域應用廣泛。
h8300 處理器
H8300 處理器是 日本瑞薩科技開發的32 位高性能RISC 處理器, 具有強大的位操作指令,最適於實時控制應用如汽車電子、家用電器、醫療器械等領域。H8300 屬於MCU 型的處理器。

ia64 處理器
Ia64 處理器是 美國英特爾開發的面向服務器應用的64 位處理器, 由於具有64 位尋址能力,它能夠使用100 萬TB 的地址空間,足以運算企業級或超大規模的數據庫任務;64 位寬的寄存器可以使CPU 浮點運算達到非常高的精度。
m32r 處理器
M32r 處理器是 日本瑞薩科技開發的32 位高性能RISC 處理器, 內置大容量存儲器,適用於車載系統、數字AV 設備、數字成像設備等產品領域。屬於MCU 型的處理器。
m68k 處理器
M68k 處理器是美國 Motorola 公司開發的高性能處理器, 具有高性價比、高集成度等特點,在工業自動化設備、控制設備、醫療儀器系統、安全系統等領域多有應用。現在爲Freescale 公司所有, 風頭已不敵PowerPC 處理器。
microblaze 處理器
Microblaze 處理器是美國 Xilinx 公司提供的嵌入在其FPGA 芯片上的32 位RISC 軟核。 它具有運算能力強、外圍接口配置靈活等特點,集成在 FPGA之中,可以和FPGA 實現協同設計,具備軟硬件可配置的靈活性。
mips 處理器
Mips 處理器 是由美國斯坦福大學Hennessy 教授領導的研究小組研製出來, 現爲Mips 公司擁有,和Arm 處理器一樣採用IP 授權的方式由第3 方開發生產。著名的公司如Broadcom 、Nxp 等都有出品Mips處理器。我國的龍芯CPU 也是採用Mips 體系結構。
mn10300 處理器
Mn10300 處理器 日本松下開發的32 位多媒體處理器。
parisc 處理器
Parisc 處理器是由 HP (惠普)開發設計的處理器,主要用於HP (惠普)公司的服務器中,目前HP(惠普)已經放棄 Parisc 處理器的開發,不過一些Parisc 處理器技術已經融合到ia64 處理器之中。
powerpc 處理器
Powerpc 處理器是由美國IBM 、Apple 、Motorola 聯合開發的處理器,Powepc 處理器在IBM 的服務器、Apple 的MAC 電腦中都有應用。不過現在多應用在網絡設備、視頻系統、工業系統等領域。Sony PS3 遊戲機Cell 處理器也是Powerpc 體系結構。
s390 處理器
S390 處理器是由美國IBM 開發的面向大型機應用的處理器 。
score 處理器
Score 處理器是由臺灣 凌陽開發的32 位RISC 處理器。Score 屬於MCU 型的處理器。
sh 處理器
Sh 處理器又稱SuperH 處理器 ,最先由日本Hitachi 公司開發,後由 Hitachi 及 ST Microelectronics 兩家公司共同開發,2003 年 瑞薩科技從 Hitachi 公司繼承到擁有權。Sh 屬於MCU 型的處理器。
sparc 處理器
Sparc 處理器是由美國SUN 和TI 公司共同開發的RISC 微處理器,最突出的特點就是它的可擴展性。SUN 公司將它做爲高端處理器應用到服務器產品。
x86 處理器
X86 處理器是由美國Intel 推出的 複雜指令集(cisc ) 處理器,廣泛應用在PC 電腦領域和服務器領域,在工業控制領域也有應用。目前主要是Intel、AMD 、VIA 在開發x86 體系結構的處理器。
xtensa 處理器
Xtensa 處理器是由美國 Tensilica (泰思立達)公司開發的可配置及可擴展的微處理器

OpenRisc處理器

OpenRisc是OpenCores組織提供的基於GPL協議的開放源代碼的RISC(精簡指令集計算機)處理器。有人認爲其性能介於ARM7和ARM9之間,適合一般的嵌入式系統使用。最重要的一點是OpenCores組織提供了大量的開放源代碼IP核供研究人員使用,因此對於一般的開發單位具有很大的吸引力


(2)drivers目錄有以下文件夾:

許多驅動程序是通用驅動程序,這意味着一個通用鍵盤驅動可以使內核可以處理幾乎所有的鍵盤。然而,有些驅動是專用驅動,像蘋果和Commodore就分別爲蘋果電腦和Amiga系統製造了專門的硬件。Linux內核中已經包含了許多諸如智能手機、蘋果、Amiga系統、PS3、Android平板,和許多其他設備的驅動程序。

  注意有些設備的驅動不在本目錄中。比如,射頻驅動在net和media文件夾下。

  accessibility - 這些驅動提供支持一些輔助設備。在Linux 3.9.4中,這個文件夾中只有一個驅動就是盲文設備驅動。

  acpi - 高級配置和電源接口(ACPI : Advanced Configuration and Power Interface)驅動用來管理電源使用。

  amba - 高級微控制器總線架構(AMBA : Advanced Microcontroller Bus Architecture)是與片上系統(SoC)的管理和互連的協議。SoC是一塊包含許多或所有必要的計算機組件的芯片。這裏的AMBA驅動讓內核能夠運行在這上面。

  ata - 該目錄包含PATA和SATA設備的驅動程序。串行ATA(SATA)是一種連接主機總線適配器到像硬盤那樣的存儲器的計算機總線接口。並行ATA(PATA)用於連接存儲設備,如硬盤驅動器,軟盤驅動器,光盤驅動器的標準。PATA就是我們所說的IDE。

  atm - 異步通信模式(ATM : Asynchronous Transfer Mode)是一種通信標準。這裏有各種接到PCI橋的驅動(他們連接到PCI總線)和以太網控制器(控制以太網通信的集成電路芯片)。

  auxdisplay - 這個文件夾提供了三個驅動。LCD 幀緩存(framebuffer)驅動、LCD控制器驅動和一個LCD驅動。這些驅動用於管理液晶顯示器 —— 液晶顯示器會在按壓時顯示波紋。注意:按壓會損害屏幕,所以請不要用力戳LCD顯示屏。

  base - 這是個重要的目錄包含了固件、系統總線、虛擬化能力等基本的驅動。

  bcma - 這些驅動用於使用基於AMBA協議的總線。AMBA是由博通公司開發。

  block - 這些驅動提供對塊設備的支持,像軟驅、SCSI磁帶、TCP網絡塊設備等等。

  bluetooth - 藍牙是一種安全的無線個人區域網絡標準(PANs)。藍牙驅動就在這個文件夾,它允許系統使用各種藍牙設備。例如,一個藍牙鼠標不用電纜,並且計算機有一個電子狗(小型USB接收器)。Linux系統必須能夠知道進入電子狗的信號,否則藍牙設備無法工作。

  bus - 這個目錄包含了三個驅動。一個轉換ocp接口協議到scp協議。一個是設備間的互聯驅動,第三個是用於處理互聯中的錯誤處理。

  cdrom - 這個目錄包含兩個驅動。一個是cd-rom,包括DVD和CD的讀寫。第二個是gd-rom(只讀GB光盤),GD光盤是1.2GB容量的光盤,這像一個更大的CD或者更小的DVD。GD通常用於世嘉遊戲機中。

  char - 字符設備驅動就在這裏。字符設備每次傳輸數據傳輸一個字符。這個文件夾裏的驅動包括打印機、PS3閃存驅動、東芝SMM驅動和隨機數發生器驅動等。

  clk - 這些驅動用於系統時鐘。

  clocksource - 這些驅動用於作爲定時器的時鐘。

  connector - 這些驅動使內核知道當進程fork並使用proc連接器更改UID(用戶ID)、GID(組ID)和SID(會話ID)。內核需要知道什麼時候進程fork(CPU中運行多個任務)並執行。否則,內核可能會低效管理資源。

  cpufreq - 這些驅動改變CPU的電源能耗。

  cpuidle - 這些驅動用來管理空閒的CPU。一些系統使用多個CPU,其中一個驅動可以讓這些CPU負載相當。

  crypto - 這些驅動提供加密功能。

  dca - 直接緩存訪問(DCA : Direct Cache Access)驅動允許內核訪問CPU緩存。CPU緩存就像CPU內置的RAM。CPU緩存的速度比RAM更快。然而,CPU緩存的容量比RAM小得多。CPU在這個緩存系統上存儲了最重要的和執行的代碼。

  devfreq - 這個驅動程序提供了一個通用的動態電壓和頻率調整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,可以根據需要改變CPU頻率來節約能源。這就是所謂的CPU節能。

  dio - 數字輸入/輸出(DIO :Digital Input/Output)總線驅動允許內核可以使用DIO總線。

  dma - 直接內存訪問(DMA)驅動允許設備無需CPU直接訪問內存。這減少了CPU的負載。

  edac - 錯誤檢測和校正( Error Detection And Correction)驅動幫助減少和糾正錯誤。

  eisa - 擴展工業標準結構總線(Extended Industry Standard Architecture)驅動提供內核對EISA總線的支持。

  extcon - 外部連接器(EXTernal CONnectors)驅動用於檢測設備插入時的變化。例如,extcon會檢測用戶是否插入了USB驅動器。

  firewire - 這些驅動用於控制蘋果製造的類似於USB的火線設備。

  firmware - 這些驅動用於和像BIOS(計算機的基本輸入輸出系統固件)這樣的設備的固件通信。BIOS用於啓動操作系統和控制硬件與設備的固件。一些BIOS允許用戶超頻CPU。超頻是使CPU運行在一個更快的速度。CPU速度以MHz(百萬赫茲)或GHz衡量。一個3.7 GHz的CPU的的速度明顯快於一個700Mhz的處理器。

  gpio - 通用輸入/輸出(GPIO :General Purpose Input/Output)是可由用戶控制行爲的芯片的管腳。這裏的驅動就是控制GPIO。

  gpu - 這些驅動控制VGA、GPU和直接渲染管理(DRM :Direct Rendering Manager )。VGA是640*480的模擬計算機顯示器或是簡化的分辨率標準。GPU是圖形處理器。DRM是一個Unix渲染系統。

  hid - 這驅動用於對USB人機界面設備的支持。

  hsi - 這個驅動用於內核訪問像Nokia N900這樣的蜂窩式調制解調器。

  hv - 這個驅動用於提供Linux中的鍵值對(KVP :Key Value Pair)功能。

  hwmon - 硬件監控驅動用於內核讀取硬件傳感器上的信息。比如,CPU上有個溫度傳感器。那麼內核就可以追蹤溫度的變化並相應地調節風扇的速度。

  hwspinlock - 硬件轉鎖驅動允許系統同時使用兩個或者更多的處理器,或使用一個處理器上的兩個或更多的核心。

  i2c - I2C驅動可以使計算機用I2C協議處理主板上的低速外設。系統管理總線(SMBus :System Management Bus)驅動管理SMBus,這是一種用於輕量級通信的two-wire總線。

  ide - 這些驅動用來處理像CDROM和硬盤這些PATA/IDE設備。

  idle - 這個驅動用來管理Intel處理器的空閒功能。

  iio - 工業I/O核心驅動程序用來處理數模轉換器或模數轉換器。

  infiniband - Infiniband是在企業數據中心和一些超級計算機中使用的一種高性能的端口。這個目錄中的驅動用來支持Infiniband硬件。

  input - 這裏包含了很多驅動,這些驅動都用於輸入處理,包括遊戲杆、鼠標、鍵盤、遊戲端口(舊式的遊戲杆接口)、遙控器、觸控、耳麥按鈕和許多其他的驅動。如今的操縱桿使用USB端口,但是在上世紀80、90年代,操縱桿是插在遊戲端口的。

  iommu - 輸入/輸出內存管理單元(IOMMU :Input/Output Memory Management Unit)驅動用來管理內存管理單元中的IOMMU。IOMMU連接DMA IO總線到內存上。IOMMU是設備在沒有CPU幫助下直接訪問內存的橋樑。這有助於減少處理器的負載。

  ipack - Ipack代表的是IndustryPack。 這個驅動是一個虛擬總線,允許在載體和夾板之間操作。

  irqchip - 這些驅動程序允許硬件的中斷請求(IRQ)發送到處理器,暫時掛起一個正在運行的程序而去運行一個特殊的程序(稱爲一箇中斷處理程序)。

  isdn - 這些驅動用於支持綜合業務數字網(ISDN),這是用於同步數字傳輸語音、視頻、數據和其他網絡服務使用傳統電話網絡的電路的通信標準。

  leds - 用於LED的驅動。

  lguest - lguest用於管理客戶機系統的中斷。中斷是CPU被重要任務打斷的硬件或軟件信號。CPU接着給硬件或軟件一些處理資源。

  macintosh - 蘋果設備的驅動在這個文件夾裏。

  mailbox - 這個文件夾(pl320-pci)中的驅動用於管理郵箱系統的連接。

  md - 多設備驅動用於支持磁盤陣列,一種多塊硬盤間共享或複製數據的系統。

  media - 媒體驅動提供了對收音機、調諧器、視頻捕捉卡、DVB標準的數字電視等等的支持。驅動還提供了對不同通過USB或火線端口插入的多媒體設備的支持。

  memory - 支持內存的重要驅動。

  memstick - 這個驅動用於支持Sony記憶棒。

  message - 這些驅動用於運行LSI Fusion MPT(一種消息傳遞技術)固件的LSI PCI芯片/適配器。LSI大規模集成,這代表每片芯片上集成了幾萬晶體管、

  mfd - 多用途設備(MFD)驅動提供了對可以提供諸如電子郵件、傳真、複印機、掃描儀、打印機功能的多用途設備的支持。這裏的驅動還給MFD設備提供了一個通用多媒體通信端口(MCP)層。

  misc - 這個目錄包含了不適合在其他目錄的各種驅動。就像光線傳感器驅動。

  mmc - MMC卡驅動用於處理用於MMC標準的閃存卡。

  mtd - 內存技術設備(MTD :Memory technology devices)驅動程序用於Linux和閃存的交互,這就就像一層閃存轉換層。其他塊設備和字符設備的驅動程序不會以閃存設備的操作方式來做映射。儘管USB記憶卡和SD卡是閃存設備,但它們不使用這個驅動,因爲他們隱藏在系統的塊設備接口後。這個驅動用於新型閃存設備的通用閃存驅動器驅動。

  net - 網絡驅動提供像AppleTalk、TCP和其他的網絡協議。這些驅動也提供對調制解調器、USB 2.0的網絡設備、和射頻設備的支持。

  nfc - 這個驅動是德州儀器的共享傳輸層之間的接口和NCI核心。

  ntb - 不透明的橋接驅動提供了在PCIe系統的不透明橋接。PCIe是一種高速擴展總線標準。

  nubus - NuBus是一種32位並行計算總線。用於支持蘋果設備。

  of - 此驅動程序提供設備樹中創建、訪問和解釋程序的OF助手。設備樹是一種數據結構,用於描述硬件。

  oprofile - 這個驅動用於從驅動到用戶空間進程(運行在用戶態下的應用)評測整個系統。這幫助開發人員找到性能問題----性能分析機制-是用於 Linux 的若干種評測和性能監控工具中的一種

  parisc - 這些驅動用於HP生產的PA-RISC架構設備。PA-RISC是一種特殊指令集的處理器。

  parport - 並口驅動提供了Linux下的並口支持。

  pci - 這些驅動提供了PCI總線服務。

  pcmcia - 這些是筆記本的pc卡驅動

  pinctrl - 這些驅動用來處理引腳控制設備。引腳控制器可以禁用或啓用I/O設備。

  platform -這個文件夾包含了不同的計算機平臺的驅動像Acer、Dell、Toshiba、IBM、Intel、Chrombooks等等。

  pnp - 即插即用驅動允許用戶在插入一個像USB的設備後可以立即使用而不必手動配置設備。

  power - 電源驅動使內核可以測量電池電量,檢測充電器和進行電源管理。

  pps - Pulse-Per-Second驅動用來控制電流脈衝速率。這用於計時。

  ps3 - 這是Sony的遊戲控制檯驅動- PlayStation3。

  ptp - 圖片傳輸協議(PTP)驅動支持一種從數碼相機中傳輸圖片的協議。

  pwm - 脈寬調製(PWM)驅動用於控制設備的電流脈衝。主要用於控制像CPU風扇。

  rapidio - RapidIO驅動用於管理RapidIO架構,它是一種高性能分組交換,用於電路板上交互芯片的交互技術,也用於互相使用底板的電路板。

  regulator - 校準驅動用於校準電流、溫度、或其他可能系統存在的校準硬件。----用於控制系統中某些設備的電壓電流供應

  remoteproc - 這些驅動用來管理遠程處理器。

  rpmsg - 這個驅動用來控制支持大量驅動的遠程處理器通訊總線(rpmsg)。這些總線提供消息傳遞設施,促進客戶端驅動程序編寫自己的連接協議消息。----該基礎架構允許主處理器上的 Linux 操作系統管理遠程處理器上遠程軟件環境的生命週期和通信-用於在 AMP 環境中的操作系統之間實現 IPC 的 rpmsg 組件和 API

  rtc - 實時時鐘(RTC)驅動使內核可以讀取時鐘。

  s390 - 用於31/32位的大型機架構的驅動。

  sbus - 用於管理基於SPARC的總線驅動。

  scsi - 允許內核使用SCSI標準外圍設備。例如,Linux將在與SCSI硬件傳輸數據時使用SCSI驅動。

  sfi -簡單固件接口(SFI)驅動允許固件發送信息表給操作系統。這些表的數據稱爲SFI表。

  sh - 該驅動用於支持SuperHway總線。

  sn - 該驅動用於支持IOC3串口。

  spi - 這些驅動處理串行設備接口總線(SPI),它是一個在在全雙工下運行的同步串行數據鏈路標準,。全雙工是指兩個設備可以同一時間同時發送和接收信息。雙工指的是雙向通信。設備在主/從模式下通信(取決於設備配置)。

  ssb - ssb(Sonics Silicon Backplane)驅動提供對在不同博通芯片和嵌入式設備上使用的迷你總線的支持。

  staging - 該目錄含有許多子目錄。這裏所有的驅動還需要在加入主內核前經過更多的開發工作。

  target - SCSI設備驅動

  tc - 這些驅動用於TURBOchannel,TURBOchannel是數字設備公司開發的32位開放總線。這主要用於DEC工作站。

  thermal - thermal驅動使CPU保持較低溫度。---Linux溫控框架

  tty - tty驅動用於管理物理終端連接。

  uio - 該驅動允許用戶編譯運行在用戶空間而不是內核空間的驅動。這使用戶驅動不會導致內核崩潰。-----運行在用戶空間的IO技術

  usb - USB設備允許內核使用USB端口。閃存驅動和記憶卡已經包含了固件和控制器,所以這些驅動程序允許內核使用USB接口和與USB設備。

  uwb - Ultra-WideBand驅動用來管理短距離,高帶寬通信的超低功耗的射頻設備

  vfio - 允許設備訪問用戶空間的VFIO驅動。----用戶態驅動框架

  vhost - 這是用於宿主內核中的virtio服務器驅動。用於虛擬化中。

  video - 這是用來管理顯卡和監視器的視頻驅動。

  virt - 這些驅動用來虛擬化。

  virtio - 這個驅動用來在虛擬PCI設備上使用virtio設備。用於虛擬化中。

  vlynq - 這個驅動控制着由德州儀器開發的專有接口。這些都是寬帶產品,像WLAN和調制解調器,VOIP處理器,音頻和數字媒體信號處理芯片。

  vme - WMEbus最初是爲摩托羅拉68000系列處理器開發的總線標準

  w1 - 這些驅動用來控制one-wire總線。

  watchdog - 該驅動管理看門狗定時器,這是一個可以用來檢測和恢復異常的定時器。

  xen - 該驅動是Xen管理程序系統。這是個允許用戶運行多個操作系統在一臺計算機的軟件或硬件。這意味着xen的代碼將允許用戶在同一時間的一臺計算機上運行兩個或更多的Linux系統。用戶也可以在Linux上運行Windows、Solaris、FreeBSD、或其他操作系統。

  zorro - 該驅動提供Zorro Amiga總線支持。

  Linux內核是所有Linux系統的核心。如果有任何惡意代碼控制或破害了內核的任何一部分,那麼系統會嚴重受損,文件可能被刪除或損壞,私人信息可能被盜等等。很明顯,保持內核安全涉及到用戶的最大利益。值得慶幸的是,由於Linux內核極其安全,Linux是一個非常安全的系統。在用戶比例上,Linux病毒比Windows病毒更少,並且Linux用戶比Windows用戶個人更少感染病毒。(這就是爲什麼許多公司使用Linux來管理他們的服務器的一個原因。) 然而,我們仍然沒有藉口去忽視內核的安全。Linux有幾個安全特性和程序,但本文只討論Linux安全模塊(LSM)及其它的內核安全特性。

  提示: 絕不在內核源代碼內移動文件,除非你知道你在做什麼。否則,編譯會由於 失文件失敗。

  Linux內核的文件夾結構保持相對穩定。內核開發者會做一些修改,但總體來說,這些設置對整個內核版本都是一樣。驅動程序文件夾的佈局也基本保持一樣。

  驅動程序是使內核能夠溝通和操作硬件或協議(規則和標準)的小程序。沒有驅動程序,內核不知道如何與硬件溝通或者處理協議(內核實際上先發送指令給BIOS,然後BIOS傳給硬件)。 Linux的內核代碼在驅動程序文件夾中以源代碼的形式包含了許多驅動程序。驅動文件夾中的每個文件夾會在下面說明在配置和 編譯內核時,這樣有助於你瞭解驅動程序。否則,用戶可能會在編譯時加入不必要的或者漏掉重要的驅動。驅動代碼通常會包含一個單行註釋來指出驅動的目的。 比如,tc的驅動代碼,有一行的註釋說是用於TURBOchannel總線。由於這些文檔,用戶應該看驅動前幾行的註釋來了解它們的用途。

  有幾個術語你應該已經知道,所以下面的信息應該是明白的。一個I/O設備指的是輸入/輸出設備。例如調制解調器和網卡,他們發送和接收數據。監視器是一個輸出設備 - 只有信息出來。鍵盤、鼠標和遊戲杆是數據輸入系統存儲設備用於存儲數據,例如SD卡、硬盤、光盤、存儲卡等。CPU(處理器)是計算機的“大腦”或“心臟” ,如果沒有它,電腦就無法運作。主板則是一塊連接板上不同組件的印刷線路板。主板及各個組件是計算機的運行的基礎。許多計算機用戶說主板是電腦的心臟(主板上有CPU)。主板包含了用於連接外設的端口,外設包括輸入、輸出和存儲設備。總線是主板的電路,它連接着外設。網絡設備用於兩臺或多臺計算機之間的連接。端口則是用戶可以插入另外一臺設備或一根電纜的設備,例如,用戶可以將插入一根火線記憶棒插入一個火線端口;將以太網電纜插入一個以太網端口。光碟的讀取是利用激光,從可以散射或反射的激光的反射面上讀出數據,一個常見的 光盤是DVD。許多系統說自己是32位或者64位,這指的是寄存器、地址總線或數據總線的位數。例如,在一塊64位的主板上,數據總線(組件之間的銀線)有64根並排到目的的線。存儲器地址以位(0和1)的形式在存儲器中編址,因此,一個32位存儲地址包含32個0和1來表示存儲器上的某處地址。

  

 




Linux安全模塊:

  AppArmor(應用盔甲)最初是由Immunix寫的安全模塊。自從2009年以來,Canonical維護着這些代碼(Novell在Immunix之後,Canonical以前管理這些代碼)。這個安全模塊已經從2.6.36版本進入Linux主分支之中。AppArmor限制了程序的能力。AppArmor使用文件路徑來跟蹤程序限制。許多Linux管理員稱AppArmor是最容易配置的安全模塊。然而,而許多Linux用戶覺得這個模塊與其它的替代品相比很糟糕。

  安全增強Linux(SELinux)是AppArmor的替代品,它最初由美國國家安全局開發(NSA)。SELinux自從2.6版本就進入內核主分支中。SELinux是限制修改內核和用戶空間的工具。SELinux給可執行文件(主要是守護進程和服務端程序)最小特權去完成它們的任務。SELinux也可以用來控制用戶權限。SELinux不像AppArmor那樣使用文件路徑,而SELinux在追蹤權限時使用文件系統去標記可執行文件。因爲SElinux本身使用文件系統管理可執行文件,所以SELinux不能像AppArmor那樣對整個文件系統提供保護。

  注意:守護進程是在後臺運行的程序

  注意:雖然在內核中有AppArmor、SELinux及其它安全模塊,但只能有一個安全模塊被激活。

  Smack是安全模塊的另一種選擇。Smack從2.6.25起進入內核主分支。Smack應能比AppArmor更安全,但比SELinux更容易配置。

  TOMOYO,是另外一個安全模塊,在2.6.30進入內核主分支。TOMOYO可以提供安全防護,但是它的主要用途是分析系統安全缺陷。

  AppArmor、SELinux、Smack和TOMYO組成了四個標準Linux安全模塊。這些都通過使用強制訪問控制(MAC : mandatory access control)工作,這種訪問控制是通過限制程序或者用戶執行一些任務來實現的。安全模塊還有某些形式的列表規定了它們可以做什麼不可以做什麼。

  Yama在Linux內核中一個新安全模塊。Yama還沒有作爲標準的安全模塊,但是在將來他會成爲第5個標準安全模塊。Yama和其他安全模塊一樣使用相同的機制。

  “grsecurity”是一系列Linux內核安全補丁的集合。多數補丁用於處理遠程網絡連接和緩衝區溢出的安全問題(以後討論)。grsecurity中有一個叫PaX的有趣組件。PaX補丁允許內存裏的代碼使用最少的所需權限。例如,存儲程序的內存段被標爲不可寫。想想看,爲什麼一個可執行的程序需要在內存中是可寫的?通過這個補丁,惡意代碼就不能修改目前正在執行的程序。緩衝區溢出是一種當程序由於bug或者惡意代碼在內存上寫入數據,並讓它的內存邊界超出到其他程序的內存頁上的安全事件。當Pax被激活時,它會幫助阻止這些緩衝區溢出,因爲程序沒有寫到其他內存頁上的權限了。

  Linux入侵檢測系統(LIDS)是一個內核安全補丁,提供了強制訪問控制(MAC)的特性。這個補丁就像扮演LSM模塊的角色。

  Systrace是一個減少和控制應用程序訪問系統文件和系統調用的工具。系統調用是對內核的服務請求。比如,當一個文本編輯器寫入一個文件到硬盤上時,程序將會發送一個系統請求讓內核寫入文件到硬盤中。

  這些是在Linux安全系統中非常重要的組件。這些安全模塊和補丁使內核免於受到惡意代碼的攻擊。沒有這些特性,Linux系統將會變成一個不安全的操作系統。

配置並編譯內核代碼:

  現在我們已經瞭解了內核,現在我們可以進入主要工作:配置並編譯內核代碼。配置內核代碼並不會花費太長時間。配置工具會詢問許多問題並且允許開發者配置內核的每個方面。如果你有不確定的問題或者特性,你最好使用配置工具提供的默認值。本系列教程會使讀者逐步瞭解配置內核的整個過程。

  

  配置代碼前需要在源文件的文件夾內打開一個終端。當終端打開後,基於你喜好的配置界面,這裏有幾種不同的配置方法:


make config - 純文本界面 (最常用的選擇)。 
make menuconfig - 基於文本彩色菜單和單選列表。這個選項可以加快開發者開發速度。需要安裝ncurses(ncurses-devel)。 
make nconfig - 基於文本的彩色菜單。需要安裝curses (libcdk5-dev)。 
make xconfig - QT/X-windows 界面。需要安裝QT。 
make gconfig - Gtk/X-windows 界面。需要安裝GTK。 
make oldconfig - 純文本界面,但是其默認的問題是基於已有的本地配置文件。 
make silentoldconfig - 和oldconfig相似,但是不會顯示配置文件中已有的問題的回答。 
make olddefconfig -和silentoldconfig相似,但有些問題已經以它們的默認值選擇。 
make defconfig - 這個選項將會創建一份以當前系統架構爲基礎的默認設置文件。 
make ${PLATFORM}defconfig - 創建一份使用arch/$ARCH/configs/${PLATFORM}defconfig中的值的配置文件。 
make allyesconfig - 這個選項將會創建一份儘可能多的問題回答都爲‘yes’的配置文件。 
make allmodconfig - 這個選項將會創建一份將盡可能多的內核部分配置爲模塊的配置文件。

  注意:內核代碼可以放進內核自身,也可以成爲一個模塊。例如,用戶可以將藍牙驅動作爲一個模塊加入(獨立於內核),或者直接放到內核慄,或者完全不加藍牙驅動。當代碼放到內核本身時,內核將會請求更多的內存並且啓動會花費更長的時間。然而,內核會執行的更好。如果代碼作爲模塊加入,代碼將會一直存在於硬盤上直到被需要時加載。接着模塊被加載到內存中。這可以減少內核的內存使用並減少啓動的時間。然而,因爲內核和模塊在內存上相互獨立所以會影響內核的性能。另一種選擇是不添加一些代碼。舉例來說,內核開發人員假如知道系統永遠都不會使用藍牙設備,因此這個驅動就可以不加到內核中。這提升了內核的性能。然而,如果用戶之後需要藍牙設備,那麼他麼需要安裝藍牙模塊或者升級內核纔行。


make allnoconfig - 這個選項只會生成內核所必要代碼的配置文件。它對儘可能多的問題都回答no。這有時會導致內核無法工作在爲編譯該內核的硬件上。 
make randconfig - 這個選項會對內核選項隨機選擇(譯註:這是做什麼用途的?!)。 
make localmodconfig - 這個選項會根據當前已加載模塊列表和系統配置來生成配置文件。 
make localyesconfig - 將所有可裝載模塊(LKM)都編譯進內核(譯者注:這裏與原文 ‘This will set all module options to yes - most (or all) of the kernel will not be in modules’的意思不同,作者也作出瞭解釋:13307)。

  貼士:最好使用“make menuconfig”,因爲用戶可以保存進度。“make config”不會提供這樣的便利,因爲配置過程會耗費大量時間。

配置:

  大多數開發者選擇使用“make menucongfig”或者其他圖形菜單之一。當鍵入上述配置命令後,第一個問題,是受否將內核編譯成64位。選項有“Y”、“n”和“?”。問號用來解釋這個問題,“n”代表這個問題回答否(no),"Y"代表這個問題回答是(yes)。在這個教程裏,我選擇是。 這裏我輸入"Y"(這裏是大小寫敏感的)並輸入回車。

  注意:當內核在32位系統上編譯時,編譯工具會詢問內核是否編譯成32位。第一個問題在不同的處理器上不一樣。

  下一行顯示的是"Cross-compiler tool prefix (CROSS_COMPILE) []"(交叉編譯器工具前綴)。如果你不是做交叉編譯就直接按下回車。如果你正在交叉編譯,對ARM系統輸入像"arm-unknown-linux-gnu-",對64位PC輸入像"x86_64-pc-linux-gnu-"的字樣。對其他處理器而言還有許多其他可能的命令,但是這個表太大了。一旦一名開發者知道他們想要支持的處理器,很容易就可研究出處理器需要的命令。

  注意:交叉編譯是爲別的處理器編譯代碼。比如,一臺Intel系統正編譯着不在Intel處理器上運行的程序,比如,這個系統可能正在編譯着要在ARM或AMD處理器上運行的代碼。

  注意:每一項選擇會改變接下來顯示什麼問題及何時顯示。我會(在教程裏)包含上我的選擇讓讀者可以在他們自己的系統上跟上配置的進度。

  接下來,用戶會看到“Local version - append to kernel release (LOCALVERSION) []”(本地版本號,附加到內核版本號後面)。這使開發人員可以給定一個特殊版本號或命名他們自定義的內核。我將輸入“LinuxDotOrg”,這樣,內核版本會顯示爲“3.9.4-LinuxDotOrg”。接下來,配置工具會詢問“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”(是否自動添加版本信息到版本號後)。如果本地有一個Git版本庫,git的修訂號會被添加到版本號後面。這個例子中我們沒有使用git,所以我回答"no"。不然git修訂號將會追加到版本號中。還記得vmlinuz和幾個類似的文件麼?好了,下一個問題就是問使用哪一種格式壓縮內核。開發人員可以從五個選項中選擇一個。它們是

Gzip (KERNEL_GZIP) 
Bzip2 (KERNEL_BZIP2) 
LZMA (KERNEL_LZMA) 
XZ (KERNEL_XZ) 
LZO (KERNEL_LZO)


  Gzip是默認值,所以我選擇"1"並按回車。每種壓縮格式和其他壓縮格式相比都有更高或者更低的壓縮比。更好的壓縮比意味着更小的體積,但是與低壓縮比文件相比,它解壓時需要更多的時間。

  現在這行顯示“Default hostname (DEFAULT_HOSTNAME) [(none)]”(默認主機名)。這裏可以配置主機名。通常地,開發者這行留空(我這裏留空),以便以後Linux用戶可以自己設置他們的主機名。

  接下來開發者可以啓用或者禁用交換分區。Linux使用一個叫做"swap space"的獨立分區來使用虛擬內存。這相當於Windows中的頁面文件。典型地,開發者在這行“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”(是否支持匿名內存換頁)回答“Y”。

  接下來的一行(System V IPC (SYSVIPC) [Y/n/?])詢問內核是否支持IPC。進程間通信使進程間可以通信和同步。最好啓用IPC不然許多程序將無法工作。這個問題回答“Y”會使配置工具接下來問“POSIX Message Queues (POSIX_MQUEUE) [Y/n/?]”(是否使用POSIX消息隊列),這個問題只會在IPC啓用後看見。POSIX消息隊列是一種給每條消息一個優先級的消息隊列(一種進程間通信形式)。默認的選擇是“Y”。按回車選擇默認選擇(以大寫選擇指示默認)。

  下一個問題“open by fhandle syscalls (FHANDLE) [Y/n/?]”(是否使用文件句柄系統調用來打開文件)是問當有需要進行文件系統操作的時候,程序是否允許使用文件句柄而不是文件名進行。默認上,這個選擇是“Y”。

  有時,開發者在做了一些選擇後,某些問題會自動回答。比如,下一個問題“Auditing support (AUDIT) [Y/?]”(是否支持審計)會在沒有提示的情況下自動回答,因爲先前的選項需要這個特性。審計支持會記錄所有文件的訪問和修改。下一個關於審計的問題“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”(是否啓用系統調用審計支持)。如果啓用,所有的系統調用都會記錄下來。如果開發者想要更好的性能,那麼最好儘可能地禁用審計特性並且不把它加入內核。而另外一些開發者可能爲了安全監控而啓用審計。這個問題我選擇“n”。下一個審計方面的問題“Make audit loginuid immutable (AUDITLOGINUIDIMMUTABLE) [N/y/?]”(是否要審計進程身份ID不可變)是詢問進程是否可以改變它們的loginuid(LOGIN User ID),如果啓用,用戶空間的進程將無法改變他們的loginuid。爲了更好的性能,我們這裏禁用這個特性。(譯註:對於使用systemd這樣的系統,其是通過中央進程來重啓登錄服務的,設置爲“y”可以避免一些安全問題;而使用較舊的SysVinit和Upstart的系統,其需要管理員手工重啓登錄服務,應該設置爲“N”)

  注意:當通過“make config”配置時,這些通過配置工具回答的問題會顯示出來但是用戶無法改變答案。當通過"make menuconfig"配置時,無論用戶按任何鍵都無法改變選項。開發者不需要去改變這些選項,因爲之前的選擇決定了另外一個問題的選擇。

  這一部分我們講配置內核IRQ子系統。中斷請求(IRQ)是硬件發給處理器的一個信號,它暫時停止一個正在運行的程序並允許一個特殊的程序佔用CPU運行。

  這個目錄中的第一個問題屬於內核特性(Expose hardware/virtual IRQ mapping via debugfs (IRQ_DOMAIN_DEBUG))(通過debugfs來顯示硬件/虛擬的IRQ映射),它詢問是否可以使用虛擬的調試文件系統來映射硬件及Linux上對應的IRQ中斷號。這個用作調試目的,大多數用戶不需要用到,所以我選擇了"no"。

  下一個標題顯示"Timers subsystem"(計時器子系統)。第一個有關定時器子系統的問題是“Tickless System (Dynamic Ticks) (NO_HZ)”(無滴答系統)。我選擇了“yes”,這會啓用一個無滴答系統。這意味着定時器中斷將會按需使用,定時器中斷允許任務以特定的時間間隔執行。下一個問題(High Resolution Timer Support (HIGH_RES_TIMERS))問是否支持高精度定時器。並不是所有的硬件支持這個,通常地說,如果硬件很慢或很舊,那麼選擇"no",否則像我一樣選擇"yes"。

  下一個標題"CPU/Task time and stats accounting"(CPU/任務用時與狀態統計),這個是關於進程的追蹤。第一個問題看上去像這樣:

  Cputime accounting (CPU用時統計)

  Simple tick based cputime accounting (TICK_CPU_ACCOUNTING) (簡單基於滴答的用時統計) 
Full dynticks CPU time accounting (VIRT_CPU_ACCOUNTING_GEN) (NEW) (全動態滴答的用時統計) 
Fine granularity task level IRQ time accounting (IRQ_TIME_ACCOUNTING) (細粒度的任務級IRQ用時統計) 
TICKCPUACCOUNTING會在每個CPU滴答中檢測/proc/stat。這是默認的選項,這個記賬方法非常簡單。

  注意:CPU滴答是抽象測量CPU時間的方式。每個處理器、操作系統和安裝的系統都不同,比如說,一個更強大的處理器會比老的處理器擁有更多的CPU滴答。如果你安裝了一個Linux系統,然後接着在同一塊磁盤上重新安裝了它,你可能會得到一個更快或更慢的CPU滴答時間(至少一些計算機技術書上這麼說)。通常來講,一個更快的時鐘速度意味着更多的CPU滴答。

  如果啓用了VIRT_CPU_ACCOUNTING_GEN,任務和CPU時間統計將由監視內核-用戶邊界實現。這個選擇的代價是會增加額外的開銷。

  IRQ_TIME_ACCOUNTING記賬方式則通過檢測IRQ狀態間的時間戳工作,這個性能開銷很小。

  我選擇了"1"並被詢問有關BSD記賬"BSD Process Accounting (BSD_PROCESS_ACCT)"(BSD進程記賬)的問題。這個內核特性會記錄每個進程不同的關閉信息。爲了得到一個更小和更快的內核,我選擇了"no".

  下一組問題看上去就像下面這樣。

  Export task/process statistics through netlink (TASKSTATS) (通過netlink導出任務/進程統計數據) 
Enable per-task delay accounting (TASK_DELAY_ACCT) (啓用針對每個任務的延遲統計) 
Enable extended accounting over taskstats (TASK_XACCT) (啓用taskstats的擴展統計) 
TASKSTATS使內核可以通過網絡套接字導出進程統計。網絡套接字是內核和用戶空間進程間IPC通信的一種形式。TASKDELAY\ACCT監視進程並注意資源訪問的延遲。比如,TASKDELAYACCT可以看到X進程正在爲了CPU時間而等待,如果TASK_DELAY_ACCT觀察到進程已經等待了太長時間,這個進程接着就會被給予一些CPU時間。TASK_XACCT會收集額外的統計數據,爲了更小的內核負載我會禁用這個。

  現在接下來的目錄就會顯示RCU子系統:讀取-複製-更新子系統是一種低負載的同步機制,它允許程序查看到正在被修改/更新的文件。配置工具已經回答了第一個問題。

  RCU Implementation (RCU 實現方式)

  > 1. Tree-based hierarchical RCU (TREE_RCU) (樹形分層結構的RCU)

  choice[1]: 1

  這裏就選擇“1”。除了TREE_RCU,還有classic RCU(更老的實現)。下一個問題(Consider userspace as in RCU extended quiescent state (RCU_USER_QS) [N/y/?])(是否在用戶空間記錄擴展的quiescent狀態)問RCU是否可以在CPU運行在用戶空間時設置一個特殊的quiescent狀態。這個選項通常被禁用,因爲這會增加太多消耗。下面是另一個RCU問題(Tree-based hierarchical RCU fanout value (RCU_FANOUT) [64])(樹形分層結構的RCU端點數),問的是關於端點數。下一個問題(Tree-based hierarchical RCU leaf-level fanout value (RCU_FANOUT_LEAF) [16])(樹形分層結構的RCU葉級端點數),是另外一個關於端點數的問題,但它只處理葉級。還有另外一個RCU問題(Disable tree-based hierarchical RCU auto-balancing (RCU_FANOUT_EXACT) [N/y/?])(是否禁用樹形分層結構的RCU的自動平衡),詢問是否禁用RCU自動平衡樹,而採用上述的端點數。

  接下來,配置腳本將會詢問"Accelerate last non-dyntick-idle CPU's grace periods (RCU_FAST_NO_HZ)"(加速最後的非dyntick-idle CPU的RCU寬限期)。在這之後會顯示"Offload RCU callback processing from boot-selected CPUs (RCU_NOCB_CPU)"(從選擇引導的CPU裏面卸載RCU回調)。(譯註:此處作者沒做解釋。前一個能夠節省電力,但是降低了性能;後一個用於調試。)

  下一個問題非常重要(nfig support (IKCONFIG))(內核nfig支持)。開發人員可以選擇保存由這個配置工具生成的設置到一個文件中。這個文件可以放在內核中,也可在一個模塊中,或者完全不保存。這個文件可以被想要編譯一個完全跟某人相同內核的開發者使用。這個文件還可以幫助開發人員使用一個更新的編譯器重新編譯一個內核。舉例來說,開發人員配置並編譯了一個內核,然而編譯器有一些bug,但開發人員仍然需要一個使用這些設置的內核。而值得慶幸的是,開發人員可以升級他們的編譯器,並使用設置文件來節省他們重新配置內核的時間。開發人員也可以在另一臺計算機上保存源代碼和配置文件並編譯內核。至於另一個目的,開發人員可以加載該文件,並根據需要調整設置。我選擇保存配置文件在一個模塊中,這個問題 "Enable access nfig through /proc/config.gz (IKCONFIG_PROC)"(啓用通過/proc/config.gz來訪nfig的功能)是詢問這個文件是否是可以通過這次方式訪問的,我選擇了"yes"。

  下一個問題是內核使用多大的log緩衝區(Kernel log buffer size (16 => 64KB, 17 => 128KB) (LOG_BUF_SHIFT) [17])(內核日誌緩衝區大小)。小的緩衝區意味着它無法像更大的緩衝區那樣保持日誌更長的時間。這個選擇取決於開發者想要日誌保持的時間,我選擇的是"12"。

  接着,出現了另外一個問題。該問題詢問關於是否啓用NUMA(非一致性內存訪問)的內存/任務的均衡(Automatically enable NUMA aware memory/task placement (NUMA_BALANCING_DEFAULT_ENABLED))(自動啓用NUMA的內存/任務均衡)。如果在NUMA的機器上設置了該選項,那麼NUMA自動平衡就會啓用。在NUMA下,處理器可以比非本地內存(內存分配給另外一個處理器或在處理器之間共享的內存)更快地訪問它的本地內存。如果上面啓用了(我啓用了),那麼最好對這個問題"Memory placement aware NUMA scheduler (NUMA_BALANCING)"(由NUMA調度器進行內存分配)回答"yes",這是一個NUMA調度器。

  在新的標題"Control Group support"(Cgroup支持)下,因爲先前的選擇,"Control Group support (CGROUPS)"(Cgroup支持)被自動地回答了"yes"。

  以下設定(Example debug cgroup subsystem (CGROUP_DEBUG))(導出Cgroup子系統的調試信息)是啓用一個用於調試cgroup框架的一個簡單cgroup子系統。下一個選項(Freezer cgroup subsystem (CGROUP_FREEZER))(凍結Cgroup子系統)可以讓程序員可以凍結或解凍cgroup內的任務。

  注意:cgroup是一組進程。

  下面我們要求回答"Device controller for cgroups (CGROUP_DEVICE)"(Cgroup的設備控制器)。cgroup(控制組)是一種用來控制資源使用的特性。回答"yes"可以允許設備cgroup的白名單可以使用open和mknod系統調用(用來創建文件系統節點的系統調用)。

  下一個問題(Cpuset support (CPUSETS))(CPU分組支持)詢問的是內核是否可以創建和管理CPU分組。這允許管理員可以在一個系統上動態分配各組內存節點,並分配任務在這些內存上運行。這通常用於SMP和NUMA系統中。我這個問題回答的是"no"。

  注意:請記住,如果我沒有指定我選的是什麼,那麼我選的就是默認選項。

  啓用cgroup統計子系統(Simple CPU accounting cgroup subsystem (CGROUP_CPUACCT))(Cgroup子系統的簡單CPU統計)會生成一個資源控制器來監控在一個cgroup組內的獨立任務的CPU使用情況。我選擇了"no"。

  資源計數器(Resource counters (RESOURCE_COUNTERS))使控制器的獨立資源統計功能能夠統計cgroup。我選擇了"no"。

  下一個問題(Enable perf_event per-cpu per-Container group (cgroup) monitoring (CGROUP_PERF))(啓用每個CPU、每個容器組的pref_event監控)允許開發者擴展每個CPU的模式,使它可以只監控運行在特定CPU上的一個特別的cgroup組的線程。

  下一章節是"Group CPU Scheduler"(CPU分組調度器)。前兩個已經回答的問題包括:

  Group CPU scheduler (CGROUPSCHED)(CPU分組調度器) Group scheduling for SCHEDOTHER (FAIRGROUP\SCHED)(SCHED_OTHER分組調度)

  第一個已回答的問題(CPU bandwidth provisioning for FAIR_GROUP_SCHED (CFS_BANDWIDTH))(CPU帶寬分配)詢問的是內核是否允許用戶設置在公平組調度器內執行的任務的CPU帶寬限制。沒有限制的組會被認爲不受約束,並會沒有限制地運行。

  注意:並不是所有內核選項都在這裏。我這裏提到的組只是爲了便於閱讀,並挑出那些新的和大的部分。並不需要了解所有的分組。分組有助於使用圖形工具配置內核,這樣開發者可以在搜索特定的設置時,直接通過分組菜單找到。

  開發者可以通過回答"Group scheduling for SCHED_RR/FIFO (RT_GROUP_SCHED)"(SCHED_RR/FIFO分組調度)這個問題爲"yes"來讓用戶可以分配CPU帶寬到任務組中。

  下一個問題是"Block IO controller (BLK_CGROUP)"(阻塞IO控制器)。任務組可以被識別,並且它們的磁盤帶寬是由使用塊IO控制器實現的CFQ IO調度器分配的。BIO在塊級的限制邏輯使用塊IO控制器來提供設備上的IO速率上限。

  這裏有一個調試問題(Enable Block IO controller debugging (DEBUGBLKCGROUP) [N/y/?])(啓用阻塞IO控制器的調試)詢問是否啓用塊IO控制器的調試。爲了製作一個精簡的內核,最好禁用這個 性。

  爲了啓用內核中的檢查點和還原特性。這個問題“Checkpoint/restore support (CHECKPOINT_RESTORE)”(檢查點及還原支持)可以選擇“yes”,不過爲了更低的負載這裏我選擇了“n”。啓用這個特性會增加輔助的進程控制代碼來設置進程的代碼段、數據段和堆的大小,並增加了一些額外的程序入口。

  下面我們就要配置命名空間的支持了。命名空間是一組標識符的容器。比如,/usr/lib/python3/dist-packages/re.py就是一個標識符,/usr/lib/python3/dist-packages/就是一個命名空間。而re.py是這個命名空間下的本地名稱。

  第一個命名空間問題(Namespaces support (NAMESPACES))詢問的是是否啓用命名空間。這允許可以使用相同的PID但在不同的命名空間內(譯註:原文爲" This will allow the same PIDs (Process ID) to be used but indifferent namespaces",這裏indiffernt根據上下文應該是少了空格),否則PID永遠不會重複。

  下一個問題(UTS namespace (UTS_NS))詢問是否可以讓UTS命名空間內的任務可以在uname()系統調用中看到不同的信息。uname()系統調用提供查看機器和操作系統的信息。

  啓用IPC命名空間(IPC namespace (IPC_NS))將允許在這個命名空間內的任務與其他命名空間內相對應IPC ID的對象協同工作。

  PID命名空間(PID Namespaces (PID_NS))就是進程ID命名空間。這可以使不同的進程在不同的PID命名空間使用相同的PID。這是一個容器的構建塊。

  接下來,啓用網絡命名空間(Network namespace (NET_NS))可以使用戶創建一個擁有多個實例的網絡棧。

  當啓用後,自動進程分組調度(SCHED_AUTOGROUP)會填充並創建任務組來優化桌面程序的調度。它將把佔用大量資源的應用程序放在它們自己的任務組,這有助於性能提升。

  這裏是一個調試特性,除非你有特別的需求否則應該禁用它。這個問題(Enable deprecated sysfs features to support old userspace tools (SYSFS_DEPRECATED))(啓用不推薦的sysfs功能來支持舊式的用戶空間工具)詢問是否啓用sysfs,這是調試內核時用的虛擬文件系統。

  接下來,因爲當前的配置需要它,所以"Kernel->user space relay support (formerly relayfs) (RELAY)"(內核->用戶空間的中繼支持,即relayfs)已經被設成"yes"了。最好啓用initrd支持(Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD))(初始化內存文件系統和內存盤(initramfs/initrd))。

  用戶會被問及哪裏放置initramfs源文件。如果沒有需要,請留空。

  接下來,開發人員會被詢問關於初始虛擬磁盤(Linux的內核映像文件)所支持的壓縮格式。你可以啓用所有支持的壓縮格式。

  Support initial ramdisks compressed using gzip (RD_GZIP) 
Support initial ramdisks compressed using bzip2 (RD_BZIP2) 
Support initial ramdisks compressed using LZMA (RD_LZMA) 
Support initial ramdisks compressed using XZ (RD_XZ) 
Support initial ramdisks compressed using LZO (RD_LZO) 
這裏設置了內核的編譯內核編譯選項(Optimize for size (CC_OPTIMIZE_FOR_SIZE))(優化大小)。開發者可以讓編譯器在編譯時優化代碼。我選擇了"yes"。

  用戶想要配置更多的內核特性,那麼下個問題就回答"yes"(Configure standard kernel features (expert users) (EXPERT))(配置標準內核特性(專家級用戶))。

  要啓用過時的16位UID系統調用封裝器,這個問題設成"yes"(Enable 16-bit UID system calls (UID16))。系統調用就會使用16位UID。

  推薦啓用"sysctl syscall"(Sysctl syscall support (SYSCTL_SYSCALL))支持。這使/proc/sys成爲二進制路徑的接口。

  接下來的兩個問題已經被預先回答了"yes",它們是"Load all symbols for debugging/ksymoops (KALLSYMS)"(載入所以的調試符號)和"“Include all symbols in kallsyms (KALLSYMS_ALL)"(包括所有的kallsyms符號)。這些都是啓用調試標誌。

  下一步,開發者應該啓用printk支持( (Enable support for printk (PRINTK))),這會輸出內核消息到內核日誌中。這在內核出錯時是很重要的。編譯一個"啞巴"內核並不是一個好主意。然而,如果我們啓用了這個支持,就會被一些開發者看到這些出錯,要麼就不要啓用。

  除非有必要,開發者可以禁用bug支持(BUG() support (BUG))。禁用這項將會不支持WARN信息和BUG信息。這會減小內核的體積。

  OK,我們還繼續配置內核。還有更多功能等待着去配置。

  下一個問題(Enable ELF core dumps (ELF_CORE))詢問的是內核是否可以生成內核轉儲文件。這會使內核變大4KB。所以我選擇了"no"。

  注意:內核轉儲文件(內存或者系統的轉儲)是程序崩潰前已記錄的狀態。內核轉儲是用來調試問題的。這個轉儲文件的格式是ELF(Executable and Linkable Format )。

  下面可以啓用PC揚聲器(Enable PC-Speaker support (PCSPKR_PLATFORM))。大多數計算機用戶擁有並使用揚聲器,所以這個啓用它。

  

  雖然下面的特性會增加內核的大小(Enable full-sized data structures for core (BASE_FULL))(啓用完全大小的內核數據結構),但性能也隨之增加。所以我選擇"yes"。

  爲了使內核可以運行基於glibc的程序,必須啓用FUTEX(Enable futex support (FUTEX))。這個特性啓用了快速用戶空間互斥鎖(Fast Userspace muTEXes)。

  注意:glibc(GNU C Library)是由GNU實現的標準C庫。

  注意:FUTEX (fast userspace mutex)是用來防止兩個線程訪問同一個不能被多個線程使用的共享資源。

  下一個問題(Enable eventpoll support (EPOLL))可以通過回答"no"來禁用epoll系統調用。然而,爲了含有epoll系統調用,我選擇了"yes"。epoll是一種I/O事件通知系統。

  爲了收到來自文件描述符的信號,我們啓用signalfd系統調用(Enable signalfd() system call (SIGNALFD)。

  如果啓用這個特性(Enable timerfd() system call (TIMERFD)),它允許程序使用定時器事件獲取文件描述符。

  我們現在的配置必須啓用eventfd系統調用(Enable eventfd() system call (EVENTFD))。它默認啓用訪問共享內存文件系統(Use full shmem filesystem (SHMEM)。共享內存文件系統是一種虛擬內存文件系統。

  下一個問題是"Enable AIO support (AIO)"。這個特性啓用了線程化程序使用的POSIX異步I/O。

  注意:異步I/O用來處理輸入/輸出,它允許線程在傳輸完成前就完成處理。

  如果你正在給一個嵌入式系統配置一個內核,那麼問題“Embedded system (EMBEDDED)”可以選擇"yes"。否則就像我一樣選擇"no"。

  注意:嵌入式系統是運行在一個更大的電子系統的實時計算機。

  現在,我們可以配置內核性能事件和計時器了。配置工具沒有給開發者選擇,直接啓用了事件和計數器(Kernel performance events and counters (PERF_EVENTS))(內核性能事件和計數器)。這是一個重要特性。

  接下來,我們可以禁用另外一個調試特性(ebug: use vmalloc to back perf mmap() buffers (DEBUG_PERF_USE_VMALLOC))。

  如果啓用了VM事件計數器,那麼事件計數就會顯示在/proc/vmstat(Enable VM event counters for /proc/vmstat (VM_EVENT_COUNTERS))。如果禁用了事件計數就不會顯示,/proc/vmstat只會顯示內存頁計數。

  爲了更好地支持PCI芯片,(Enable PCI quirk workarounds (PCI_QUIRKS))回答yes。這會啓用對PCI芯片的怪異行爲和bug的臨時解決方案。

  下面一個調試特性可以像我一樣禁用掉(Enable SLUB debugging support (SLUB_DEBUG))。這個特性會耗費很多空間並且會禁用用於調試內核的SLB sysfs。如果這個特性被禁用,那麼/sys/slab就不會存在並且系統上也不再支持緩衝驗證。

  堆隨機化是一個讓利用堆漏洞更加困難的特性(Disable heap randomization (COMPAT_BRK))。然而我們不應該去啓用它,因爲任何基於libc5的軟件都無法工作在這個系統上!只有我們有特別的理由這麼做或者如果你不會使用基於libc5的軟件時纔去啓用它。我禁用了這個特性。當編譯一個通用的內核時,開發這會希望禁用這個特性。

  接下來必須選擇一個SLAB分配器。SLAB分配器是一個沒有碎片且有效率地將內核對象放置在內存中的內存管理系統。默認選擇是"2"。

  Choose SLAB allocator

  1. SLAB (SLAB)

  > 2. SLUB (Unqueued Allocator) (SLUB)

  3. SLOB (Simple Allocator) (SLOB)

  choice[1-3?]: 2

  爲了支持擴展性能支持,(Profiling support (PROFILING))回答"yes"。

  下一個問題讓開發者選擇是否啓用OProfile系統。它可以禁用、啓用或者添加爲一個模塊在需要時載入。我選擇禁用這個特性。

  Kprobes允許用戶捕捉幾乎任意的內核地址去啓動一個回調函數。這是一個可以像我一樣禁用的調試工具(Kprobes (KPROBES))。

  這個優化特性可以啓用(Optimize very unlikely/likely branches (JUMP_LABEL))(優化非常近似/不近似的分支)。這使分支預判更加簡單並可以減小開銷。

  配置工具啓用了一個實驗性特性"透明用戶空間探針"(Transparent user-space probes (EXPERIMENTAL) (UPROBES))。不過不要擔心,系統可以很好工作,並不是所有的實驗性特性是不穩定或者壞的。

  接下來,我們會被詢問基於gcov的內核分析(Enable gcov-based kernel profiling (GCOV_KERNEL))。這可以被禁用。

  爲了允許內核加載模塊,需要啓用可加載模塊支持(Enable loadable module support (MODULES))。

  內核一般只能加載有版本號的模塊。如果想允許內核加載沒有版本號的模塊,就啓用這個特性(Forced module loading (MODULE_FORCE_LOAD))(強制模塊載入)。這麼做是一個很糟糕的注意,所以我已經禁用了它,除非你有特定的需求需要這個特性。

  如果啓用了這個特性(Module unloading (MODULE_UNLOAD)),Linux內核也能卸載模塊,最好啓用。如果內核判斷你要卸載的模塊不應該被卸載,那麼用戶則無法卸載模塊。啓用強制卸載也行,但是不建議(Forced module unloading (MODULE_FORCE_UNLOAD)。

  爲了使用不是爲你的內核開發的或者並不適用你的版本號的模塊,可以啓用版本支持(Module versioning support (MODVERSIONS))。最好不要混用不同版本號的模塊,所以我禁用了這個特性。

  模塊在它們的modinfo(模塊信息)裏有一個字段名爲"srcverion"。這個字段允許開發者知道使用什麼源碼版本來編譯模塊。啓用這個選項可以在編譯模塊的時候加入這個字段。這個並不必要,所以我禁用了它(Source checksum for all modules (MODULE_SRCVERSION_ALL))。如果啓用了先前的選項,開發者可以將校驗和加入到模塊中(Source checksum for all modules (MODULE_SRCVERSION_ALL))。

  爲了啓用模塊簽名驗證(Module signature verification (MODULE_SIG)),這個選項回答"yes"。因爲這個並不必要,我選擇了"no",否則內核在加載模塊前會檢查並驗證簽名。

  爲了啓用塊級支持(Enable the block layer (BLOCK)),像我一樣選擇"yes"。禁用這個將會使塊設備無法使用並且無法啓用某些文件系統。

  下面,SG支持已經默認啓用(Block layer SG support v4 (BLK_DEV_BSG))(塊級SG支持V4版),並且輔助庫也啓用了(Block layer SG support v4 helper lib (BLK_DEV_BSGLIB))。

  下面回答的問題是關於對塊設備的數據完整性支持(Block layer data integrity support (BLK_DEV_INTEGRITY))。這個特性允許擁有更好的數據完整性來提供設備數據保護特性。許多設備不支持這個特性,所以我禁用了它。

  如果啓用了塊級bio帶寬限制(Block layer bio throttling support (BLK_DEV_THROTTLING))那就可以限制設備的IO速率。

  爲了啓用外部分區方案的支持,這個問題就回答"yes"(Advanced partition selection (PARTITION_ADVANCED))。我禁用了這個特性。

  爲了啓用CSCAN(譯註:循環掃描)和FIFO過期請求,那就啓用最後期限IO調度器(Deadline I/O scheduler (IOSCHED_DEADLINE))。

  CFQ IO調度器在處理器之間平均地分配帶寬。因此啓用這個特性feature (CFQ I/O scheduler (IOSCHED_CFQ))是個好主意。

  下面,開發者可以啓用或禁用CFQ組支持(CFQ Group Scheduling support (CFQ_GROUP_IOSCHED))。接下來,開發者可以選擇默認的IO調度器,最好選擇DEFAULT_DEADLINE。

  對於小於32位尋址的設備,下面的特性會分配16MB的尋址空間(DMA memory allocation support (ZONE_DMA))。如果你不使用這些設備,那麼這個是可以禁用的,所以我禁用了它。

  對於有多個CPU的系統,最好啓用SMP(Symmetric multi-processing support (SMP))。對於只有單個處理器的設備,內核會在禁用這個特性後執行得更快。我啓用了這個特性。

  對於支持x2apic的CPU,啓用x2apic支持support (Support x2apic (X86_X2APIC))。如果你的系統缺乏這個特性就像我一樣禁用它。

  接下來我們可以啓用對那些缺乏合適的ACPI支持的舊式SMP系統的MPS表(Enable MPS table (X86_MPPARSE))。一些擁有ACPI、DSDT、MADT支持的更新的系統不需要這個特性。我禁用了它。

  下面的問題允許我們啓用擴展x86平臺的支持(Support for extended (non-PC) x86 platforms (X86_EXTENDED_PLATFORM))。只有在你需要一個通用內核或者內核運行在某個特定的需要擴展支持的處理器上時才啓用它。我禁用了這個特性。

  爲了支持Intel低功耗子系統,就啓用這個特性(Intel Low Power Subsystem Support (X86_INTEL_LPSS))。

  單一深度WCHAN輸出(Single-depth WCHAN output (SCHED_OMIT_FRAME_POINTER))是用來計算電量(/proc//wchan),然而這會導致更多的功耗。

  下面,我們啓用虛擬客戶系統支持(Paravirtualized guest support (PARAVIRT_GUEST))。這允許一個Guest操作系統與主操作系統一起運行。我會禁用這個特性。

  Memtest是一個在系統啓動時檢測內存的軟件。Memtest可以配置爲每次或者有時開機運行。Memtest並不必要,所以我禁用了它。

  這裏我們可以選擇一個內核應該支持的處理器家族。我選擇了5 – Generic-x86-64。這是一個64位的系統,x86是32系統。

  下面我們能選擇也支持x86(32位)處理器 (Supported processor vendors (PROCESSOR_SELECT))。

  爲了發現機器異常,我們可以啓用DMI掃描(Enable DMI scanning (DMI)),這可以檢測異常。

  要啓用DMA訪問系統上32位內存的3GB以上的內存,下一個問題(GART IOMMU support (GART_IOMMU))我們回答"yes"。

  在這個第四部分裏,我們將繼續配置更多的設置和特性。

  

  這裏我們被問及關於"IBM Calgary IOMMU support (CALGARY_IOMMU)"。這個選項將會提供對IBM xSeries x366和x460的IOMMU的支持。這也將讓那些32位PCI的設備工作正常——在這些系統上不支持雙地址週期(DAC : Double Address Cycle)——因爲該系統設置在訪問超過3GB內存的時候會有問題。如果需要這些IOMMU設備可以用"iommu=off"在啓動時關閉。(這些內核/模塊參數會在以後的文章中討論)

  IOMMU(input/output memory management unit)是一個內存管理單元(MMU),它連接具有DMA功能的I/O總線到主內存上。DMA(Direct Memory Access)是許多計算機支持的一種允許特定設備不借助CPU直接訪問內存的特性。雙地址週期(Double Address Cycle, DAC)是64位DMA;而通常的DMA使用32位。

  下面,我們被問及是否默認啓用Calgary(Should Calgary be enabled by default? (CALGARY_IOMMU_ENABLED_BY_DEFAULT))。Calgary與上面提到的IOMMU是同一個概念。這兩者之間的不同是IOMMU可以支持許多設備而Calgary只能支持IBM IOMMU設備。如果禁用了它,但是以後需要使用到它,可以使用內核參數(iommu=calgary)。

  這裏有個問題需要小心處理(Enable Maximum number of SMP Processors and NUMA Nodes (MAXSMP))。只有在內核運行在擁有很多SMP處理器和NUMA節點的情況下才啓用它,如Core i7和許多AMD CPU芯片。如果系統缺乏或者只有少量的SMP處理器和NUMA節點,內核就會變得低效。這個最好選擇"No"。

  非一致性內存訪問(Non-Uniform Memory Access (NUMA))是一個每塊內存都需要花費更長時間訪問其他部分內存的系統。一個節點就是一組內存。例如,一個NUMA系統可能有三塊內存芯片。每塊芯片是一個節點,在帶CPU的主板上有一個節點/芯片(這是最快的節點),另外兩個在不同的總線上。這兩個節點需要比第一個節點花費更長的時間去訪問。

  注意:ccNUMA和NUMA目前是一樣的,至少是非常相似的。

  對稱多處理器(Symmetric Multi-Processing (SMP))是NUMA的替代品。它的內存在同一根總線上。只有限定數量的CPU可以訪問總線,所以這限制了SMP系統上處理器的數量。然而它內存的訪問速度一樣塊。

  注意:我是在爲AMD64系統在編譯內核,所以我會告訴你我的選擇,來幫助讀者理解過程和選擇。如果我沒有指出我的選擇,那麼我用的就是默認選擇。如果你在爲不同的系統編譯或者你有不同的需求,你需要在你的情況下做出替代的選擇。

  接下來,除非配置工具已經爲你做了選擇,選擇一個內核需要支持的最多CPU的數量。這個配置根據你給的數量優化內核。

  接着啓用或禁用"SMT (Hyperthreading) scheduler support (SCHED_SMT)"(超線程調度器支持)。SMT調度器提升了在使用了超線程技術的Pentium 4處理器上的CPU決策能力。然而,這會帶來額外的功耗,在一些系統上最好像我一樣選擇"no"。

  超線程一種專有的SMT並行微處理器(Intel 實現了它)。這是多任務/多線程(同時做許多任務)的一種特殊形式,並行多線程(Simultaneous multithreading (SMT))提升了多線程執行的效率。

  在這之後,啓用或者禁用"Multi-core scheduler support (SCHED_MC)"。這樣也是一種提升多核CPU決策的特性。然而這回帶來額外功耗,我選擇了"No"。

  在下一個選項中可以選擇搶佔模式。

  Preemption Model(搶佔模式)

  1. No Forced Preemption (Server) (PREEMPT_NONE) (非強制搶佔)

  > 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY) (自願內核搶佔)

  3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT) (可搶佔內核)

  choice[1-3]: 2

  搶佔就是暫停一個意圖讓它之後繼續執行的中斷任務的過程。搶佔強制一個進程暫停,執行中的任務無法忽視搶佔。

  接着,我們被詢問關於"Reroute for broken boot IRQs (X86_REROUTE_FOR_BROKEN_BOOT_IRQS)"。這是一個對於假中斷的簡單修復。假中斷是一種無用的硬件中斷,這些通常是有電子干擾或者錯誤連接的電子產品觸發。記住,中斷是發送給處理器需要馬上注意的信號。

  這個選項對任何機器都很重要;我懷疑任何人可能都會有禁用這個特性的理由(Machine Check / overheating reporting (X86_MCE))。內核必須意識到過熱和數據損壞,不然,系統將會繼續操作,這樣只會導致進一步的破壞。

  下面,用戶可以啓用禁用"Intel MCE features (X86_MCE_INTEL)",這是一種額外的對像熱度監控的Intel MCE特性的支持。因爲我是爲AMD64處理器編譯內核所以我選擇了"no"。機器檢測異常(MCE)是一種當處理器發現硬件問題時的錯誤輸出。MCE通常會導致內核嚴重錯誤(kernel panic)(相當於Windows中的"藍屏")。

  這個除了是AMD設備外是同一個問題Intel MCE features (X86_MCE_INTEL)。

  下一個是我會禁用的調試特性(Machine check injector support (X86_MCE_INJECT))。這個會允許注射檢查。如果你偶爾執行機器注射,那最好編譯成模塊而不是編譯進內核。機器注射可以使設備即使實際沒有錯誤也可以發送一個僞造的錯誤信息。這個用來確認內核和其他進程可以正常處理錯誤。比如,如果CPU過熱,接着應該關機,但是開發者如何在不損壞CPU的情況下測試代碼。注射錯誤是一種最好的方法,因爲它只是一種告訴硬件發送錯誤信號的軟件。

  注:模塊是對可能被使用或者很少執行的特性/驅動而言的。只加入在許多使用該內核的系統中用到的特性/驅動到內核中。

  如果內核很可能用在Dell筆記本上,那麼啓用這個特性(Dell laptop support (I8K))。否則,如果一些用戶可能在戴爾筆記本電腦上用到這個內核,將其作爲一個模塊加入。如果這個內核不打算支持Dell筆記本,那就像我一樣忽略掉它。特別地,這個支持是一個允許Dell Inspiron 8000系列筆記本訪問處理器的系統管理模式的驅動。系統管理模式的目的是得到處理器的溫度和風扇狀態,這對一些需要控制風扇的系統有用。

  下面,用戶可以選擇微碼加載支持(CPU microcode loading support (MICROCODE))。這可以允許用戶在支持這個特性的AMD或者Intel芯片上更新微碼。

  注意:爲了加載微碼,你必須擁有一個爲你的處理器設計的合法的二進制微代碼拷貝。

  如果要加載微碼補丁(修復bug或加入次要的特性)到intel芯片上(Intel microcode loading support (MICROCODE_INTEL)),這個就必須啓用。這裏我禁用了它。

  然後是AMD芯片的類似選項(AMD microcode loading support (MICROCODE_AMD))。

  啓用這個支持(/dev/cpu/*/msr - Model-specific register support (X86_MSR))可以允許某個處理器有權限使用x86特殊模塊寄存器(Model-Specific Registers (MSRs))。這些寄存器是一些字符設備,包括major 202下minor 0到31的設備((/dev/cpu/0/msr to /dev/cpu/31/msr))。這個特性用在多處理器系統上。每個虛擬字符設備都連接到一個特定的CPU。

  注意:MSRs被用來改變CPU設備、調試、性能監控和執行追蹤。MSRs使用x86指令集。

  在這之後,我們有一個選項"CPU information support (X86_CPUID)",啓用這個特性允許處理器訪問x86 CPUID指令,這需要通過字符設備在一個特定的CPU上執行。這些字符設備包括major 202下minor 0到31的設備(/dev/cpu/0/msr to /dev/cpu/31/msr),就像上面x86_MSR支持的這些。

  如果處理器支持,啓用內核線性映射來使用1GB的內存頁(Enable 1GB pages for kernel pagetables (DIRECT_GBPAGES))。啓用這個可以幫助減輕TLB的壓力。

  頁是內存本身的基本單位(位是數據的基本單位)。頁的大小是由硬件自身決定的。頁碼錶是虛擬和物理內存間的映射。物理內存是設備上的內存。虛擬內存是到內存的地址。依賴於系統架構,硬件可以訪問大於實際內存地址的地址。舉例來說,一個64位系統擁有6GB內存,管理員在需要時可以加上更多的內存。這是因爲還有很多虛擬內存地址。然而,在很多32位系統上,系統管理員可以增加一條8GB的內存,但是系統無法完全使用它,因爲系統中沒有足夠的虛擬內存地址去訪問大容量的內存。轉換後援緩衝器(Translation Lookaside Buffer (TLB))是一種提升虛擬內存轉換速度的緩存系統。

  下面,我們看到了NUMA選項(Numa Memory Allocation and Scheduler Support (NUMA))。這可以允許內核在CPU本地內存分配器上分配CPU可使用的內存。這個支持同樣可使內核更好感知到NUMA。很少的32位系統需要這個特性,但是一些通用的645位處理器使用這個特性。我選擇了"no"。

  爲了系統使用舊方式來檢測AMD NUMA節點拓撲,啓用這個特性(Old style AMD Opteron NUMA detection (AMD_NUMA))。下一個選項是一種更新的檢測方式(ACPI NUMA detection (X86_64_ACPI_NUMA))。如果兩個都啓用,新的方式將會佔支配作用。一些硬件在使用其中一種方式而不是另外一個時工作得更好。

  如果爲了調試目的的NUMA仿真,可以啓用下一個特性(NUMA emulation (NUMA_EMU))。

  注意:如果你不打算進行調試並且你需要一個快速、輕量級系統,那麼禁用盡可能多的調試特性。

  下一個選項中,選擇你的內核打算如何處理NUMA節點的最大數量。接下來選擇內存模型,這裏可能只有一個內存模型選擇。內存模型指定了內存如何存儲。

  Maximum NUMA Nodes (as a power of 2) (NODES_SHIFT) [6]

  Memory model

  > 1. Sparse Memory (SPARSEMEM_MANUAL)

  choice[1]: 1

  爲了提升性能,這裏有一個選項用通過虛擬內存映射(Sparse Memory virtual memmap (SPARSEMEM_VMEMMAP))來優化pfn_to_page和page_to_pfn操作。頁幀號是每頁被給定的號碼。這兩個操作用來從號碼得到頁或者從頁得到號碼。

  下一個選項是允許一個節點可以移除內存(Enable to assign a node which has only movable memory (MOVABLE_NODE))。內核頁通常無法移除。當啓用後,用戶可以熱插拔內存節點,同樣可移除內存允許內存整理。作爲出入內存的數據,只要有可用空間一組數據可能被劃分到不同內存。

  接着前面的內存問題,我們還有更多的問題。這些可能已被配置工具預配置了。第三個選項(BALLOON_COMPACTION),當啓用時可以幫助減少內存碎片。碎片內存會減慢系統速度。第四個選項(COMPACTION)允許內存壓縮。下面列到的第五個選 (MIGRATION)允許頁面被移動。


Allow for memory hot-add (MEMORY_HOTPLUG) (允許內存熱添加) 
Allow for memory hot remove (MEMORY_HOTREMOVE) (允許內存熱移除) 
Allow for balloon memory compaction/migration (BALLOON_COMPACTION) (允許泡狀內存規整和合並) 
Allow for memory compaction (允許內存規整) 
Page migration (MIGRATION) (頁合併)

  注意:啓用可移動內存會啓用以上5個特性。

  下一步,我們可以"Enable KSM for page merging (KSM)"。內核同頁合併(Kernel Samepage Merging (KSM))會查看程序認爲可以合併的內核。如果兩頁內存完全相同這可以節約內存。一塊內存可以被刪除或者被合併,並且只有一塊可以使用。

  配置工具可能會自動選擇保存多少內存用於用戶分配(Low address space to protect from user allocation (DEFAULT_MMAP_MIN_ADDR) [65536])。

  下一個選項很重要(Enable recovery from hardware memory errors (MEMORY_FAILURE))。如果內存故障並且系統有MCA恢復或者ECC內存,系統就可以繼續運行並且恢復。要使用這個特性,硬件自身和內核都必須支持。

  機器檢測架構(Machine Check Architecture (MCA))是一個一些CPU上可以發送硬件錯誤信息給操作系統的特性。錯誤更正碼內存(Error-correcting code memory (ECC memory))是一種內存設備檢測和糾正錯誤的形式。

  下面,配置工具會自動啓用"HWPoison pages injector (HWPOISON_INJECT)"。這個特性允許內核標記一塊壞頁爲"poisoned",接着內核會殺死創建壞頁的程序。這有助於停止並糾正錯誤。

  爲了允許內核使用大頁(Transparent Hugepage Support (TRANSPARENT_HUGEPAGE)),啓用這個特性。這可以加速系統但是需要更多內存。嵌入式系統不必使用這個特性。嵌入式系統通常只有非常小的內存。

  如果啓用了上面的,那麼必須配置大頁的sysfs支持。

  Transparent Hugepage Support sysfs defaults

  1. always (TRANSPARENT_HUGEPAGE_ALWAYS)

  > 2. madvise (TRANSPARENT_HUGEPAGE_MADVISE)

  choice[1-2?]: 2

  下面的選項是增加process_vm_readv和process_vm_writev這兩個系統調用(Cross Memory Support (CROSS_MEMORY_ATTACH))。這允許特權進程訪問另外一個程序的地址空間。

  如果有tmem,啓用緩存清理(cleancache)通常是一個好主意 (Enable cleancache driver to cache clean pages if Transcendent Memory (tmem) is present (CLEANCACHE))。當一些內存頁需要從內存中移除時,cleancache會將頁面放在cleancache-enabled的文件系統上。當需要該頁時,頁會被重新放回內存中。超內存(tmem)沒有一組已知大小的內存,內核對此內存使用間接尋址。

  下一個選項允許在tmen激活後緩存交換頁(Enable frontswap to cache swap pages if tmem is present (FRONTSWAP))。frontswap在交換分區放置數據。交換特性的支持需要這個。

  最好啓用下一個特性(Check for low memory corruption (X86_CHECK_BIOS_CORRUPTION))。這會檢測低位內存的內存損壞情況。這個特性在執行期被禁止。爲了啓用這個特性,在內核命令行內加入 "memory_corruption_check=1"(這會在以後的文章中討論;這不同於任何命令行)。即使經常執行這個特性,也只使用非常小的開銷(接近沒有)。

  接下來我門可以設置內存損壞檢測的默認設置(“Set the default setting of memory_corruption_check (X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK))。這可以選擇是否開啓或關閉memory_corruption_check。最好啓用內存損壞檢測不然如果一部分重要內存損壞後可能會導致數據丟失和系統崩潰。

  這個選項關注的是BIOS(Amount of low memory, in kilobytes, to reserve for the BIOS (X86_RESERVE_LOW) [64])。配置工具通常知道給BIOS預留內存的最佳大小。

  對於Intel P6處理器,開發者可以啓用存儲區域類型寄存器(MTRR (Memory Type Range Register) support (MTRR))。這用於連接着VGA卡的AGP和PCI卡。啓用這個特性內核會創建/proc/mtrr。

  如果X驅動需要加入回寫入口,那麼啓用下面的選項(MTRR cleanup support (MTRR_SANITIZER))。這會將MTRR的佈局從連續轉換到離散。存儲區域類型寄存器(Memory type range registers (MTRRs))提供了一種軟件訪問CPU緩存的方法。

  下面,配置工具已經設置了一些MTRR選項


  MTRR cleanup enable value (0-1) (MTRR_SANITIZER_ENABLE_DEFAULT) [1]


  MTRR cleanup spare reg num (0-7) (MTRR_SANITIZER_SPARE_REG_NR_DEFAULT) [1]

  爲了設置頁級緩衝控制,那就啓用PAT屬性(x86 PAT support (X86_PAT))。頁屬性表(Page Attribute Table (PATs))是現在版的MTRRs並比它更靈活。如果你經歷過因啓用它而引發的啓動問題,那麼禁用這個特性後重新編譯內核。我選擇了"no"。

  Linux內核擁有許多可以配置的特性,接下來我們還有許多要配置。

  

  下一個可以配置的特性是x86的隨機數生成器(x86 architectural random number generator (ARCH_RANDOM))。記住,我們現在配置的是針對AMD64系統的內核代碼。這個隨機數生成器使用Intel x86的RDRAND指令。這並不通用,所以爲了一個更輕量的內核我禁用了它。

  接着,我們可以啓用或者禁用"Supervisor Mode Access Prevention (X86_SMAP)"。這是Intel處理器使用的安全特性。SMAP在一些條件下只允許內核訪問用戶空間。這個有助於保護用戶空間。如果啓用,這裏有一點性能和內核大小的開銷,但是開銷很小。由於我是用的是AMD系統,所以我禁用了這個特性。

  開發者可以啓用"EFI runtime service support (EFI)"。只有在有EFI固件的系統上啓用它。擁有這個特性,內核可以使用的EFI服務。EFI是一個操作系統和硬件如何交流的規範,所以EFI固件是使用這個規範的硬件代碼。因爲我沒有EFI固件,所以我禁用了它。

  這是一個應該被啓用的有用的安全方式(Enable seccomp to safely compute untrusted bytecode (SECCOMP))。這個安全特性在使用非可信的字節碼的數值計算(執行大量計算的軟件)中使用。字節碼(可移植代碼)是一種被解釋器有效讀取的代碼。字節碼不是源代碼,但它也不是彙編或者二進制代碼。非可信的代碼是一種可能導致系統/數據損壞的代碼。可能會破壞系統或者毀壞數據的非可信的代碼通過seccomp被隔離在獨立的地址空間中。這是通過文件描述符傳輸的方法。通常上,最好啓用這個安全特性,即使會有一些性能開銷,除非你在製作一個需要榨乾性能的內核。

  這裏是另外一個安全特性(Enable -fstack-protector buffer overflow detection (CC_STACKPROTECTOR))。緩衝溢出是數據被寫在超出了它的內存界限而進入了鄰近的內存中。這是一個安全威脅。一些惡意軟件使用緩衝區溢出來破壞系統。啓用這個會使用GCC選項 "-fstack-protector"。GCC是一個Linux編譯器,在你配置完成後用它來編譯內核。這個編譯器參數會在返回地址前在棧上加入一個canary值(特殊的安全代碼)。這個值會在返回前被驗證。當內存溢出發生時,canary值會得到覆蓋消息。這時,會導致內核崩潰。如許多人知道的那樣,內核錯誤意味着系統將要崩潰,但是這比系統被入侵或者數據永久損害的好。發生內核錯誤,系統會重啓,但是如果緩衝溢出則可能導致系統被入侵。一個簡單的重啓無法修復破壞(譯註:但也不會更壞)。你必須用GCC 4.2或者更高版本支持這個參數的GCC來編譯內核。

  提示:要知道你使用的版本號,在命令行內鍵入"gcc --version"。

  在這之後,我們可以配置定時器頻率。配置工具建議使用250Hz,所以我們使用這個值。

  Timer frequency

  1. 100 HZ (HZ_100)

  >2. 250 HZ (HZ_250)

  3. 300 HZ (HZ_300)

  4. 1000 HZ (HZ_1000)

  choice[1-4?]: 2

  使用1000Hz通常來講對許多系統而言太快了。定時器頻率決定着定時器中斷被使用的頻率。這有助於在時間線上的系統操作。程序並不是隨機地執行一條命令,相反它們會等到定時器中斷結束。這保持着有組織和結構的處理。頻率爲100Hz的定時器中斷之間的時間是10ms,250Hz是4ms,1000Hz是1ms。現在許多開發者會馬上想到1000Hz是最好的。好吧,這取決於你對開銷的要求。一個更大的定時器頻率意味着更多的能源消耗和更多的能源被利用(在定時器上),產生更多的熱量。更多的熱量意味着硬件損耗的更快。

  注意:如果某個特定的特性對你並不重要或者你不確定該選擇什麼,就使用配置工具選擇的默認值。比如,就我現在正在配置的內核而言,使用哪個定時器對我並不重要。總的來說,如果你沒有特別的原因去選擇任何一個選項時,就使用默認值。

  下面這個有趣的系統調用可能會對一些用戶有用(kexec system call (KEXEC))。kexec調用會關閉當前內核去啓動另外一個或者重啓當前內核。硬件並不會關閉,並且這個調用可以無需固件的幫助工作。bootloader是不執行的(bootloader是啓動操作系統的軟件) 。這個重啓發生在操作系統級別上而不是硬件上。使用這個系統調用會快於執行一個標準的關機或者重啓,這會保持硬件在加電狀態。這個系統調用並不能工作在所有系統上。爲了更高性能,啓用這個熱啓動功能。

  爲了使用kexec,對重啓後要使用的內核使用如下命令替換""。同樣,使用之前我們講過的內核參數替換"" (我會在以後的文章中更深入的討論。)

  kexec -l <kernel-image> --append="<command-line-options>”

  特別地,我這裏輸入:

  kexec -l /boot/vmlinuz-3.8.0-27-generic –append="root=/dev/sda1"

  注意:硬件有時不需要重置,所以這不依賴於kexec。

  下面,我們有一個適用於kexec的調試特性(kernel crash dumps (CRASH_DUMP))。當kexec被調用時,一個崩潰信息(crash dump)會生成。除非你有必要調試kexec,否則這個並不必要。我禁用了這個特性。

  再者,我們有另外一個kexec特性(kexec jump (KEXEC_JUMP))。kexec跳允許用戶在原始內核和kexec啓動的內核之間切換。

  最好對內核啓動地址使用默認值(Physical address where the kernel is loaded (PHYSICAL_START) [0x1000000])。

  下一個內核選項(Build a relocatable kernel (RELOCATABLE))允許內核放在內存的任何地方。內核文件會增大10%,但是超出部分會在執行時從內存移除。許多人也許想知道這爲什麼很重要。在2.6.20內核前,救援內核(rescue kernel)必須被配置和編譯運行在不同的內存地址上。當這個特性發明後,開發者不必再編譯兩個內核。救援內核不會在第一個已加載的內核的地方加載,因爲該塊內存已被佔用或者發生了錯誤。(如果你正在使用救援內核,那麼明顯第一個內核發生了錯誤)

  下面這個特性應該在可以增加CPU數量的系統中啓用,除非你有特別的理由不去這麼做(Support for hot-pluggable CPUs (HOTPLUG_CPU))。配置工具會自動啓用這個特性。在這個特性下,你可以在一個擁有很多處理器的系統上激活/停用一個CPU,這並不是說在系統中插入新的CPU,所有的CPU必須已經安裝在系統中。

  下面的選項會讓我們選擇設置上面的特性是否默認啓用(Set default setting of cpu0hotpluggable (BOOTPARAM\HOTPLUG_CPU0))。爲了性能最好禁用這個特性直到需要的時候。

  接着的這個調試特性允許開發者調試CPU熱插拔特性(Debug CPU0 hotplug (DEBUG_HOTPLUG_CPU0))。我禁用了它。

  爲了兼容舊版本的glibc(<2.3.3),可以啓用這個特性(Compat VDSO support (COMPAT_VDSO))。這適用於通過映射32位在VDSO(虛擬動態鏈接共享對象)的舊式地址。Glibc是GNC C庫;這是GNU工程實現的C標準庫。

  如果系統內核被用於一個缺乏完整功能的bootloader上,那麼啓用這個特性(Built-in kernel command line (CMDLINE_BOOL))。這允許用戶在內核自身上使用一條命令行(譯註:及其參數),那麼管理員可以修復內核問題。如果bootloader已經有了一條命令行(像grub),那麼這個特性不必啓用。

  現在我們可以配置ACPI和電源了。首先,我們被要求選擇系統是否可以掛起到內存(Suspend to RAM and standby (SUSPEND))。高級配置和電源接口(ACPI)是一種對於設備配置和電源管理的開放標準。掛起系統會將數據放在內存上,同時硬件進入一種低功耗的狀態。系統不會完全關機。如果用戶需要計算機進入一個低功耗的狀態,但是希望保留當前已打開程序時是非常有用的。關閉一個系統會完全關閉系統電源並且清理內存。

  下面,我們可以啓用睡眠(Hibernation (aka 'suspend to disk') (HIBERNATION))。睡眠就像掛起模式,但是內存中所有數據被保存到硬盤上,並且設備完全關閉。這允許用戶在電源恢復後繼續使用他們已打開的程序。

  這裏,我們可以設置默認的恢復分區(Default resume partition (PM_STD_PARTITION))。很少有開發者和管理員需要這個特性。當系統從睡眠中恢復時,他會加載默認的恢復分區。

  在這之後,我們可以啓用"Opportunistic sleep (PM_AUTOSLEEP)"。這會讓內核在沒有活躍的喚醒調用被調用時進入掛起或者睡眠狀態。這意味着空閒的系統將會進入掛起模式以節省電源。我啓用了這個特性。

  接下來,是詢問關於"User space wakeup sources interface (PM_WAKELOCKS)"。啓用這個特性將會允許喚醒源對象被激活、停用,並通過基於sysfs接口由用戶空間創建。喚醒源對象會追蹤喚醒事件源。

  sysfs是位於/sys/的虛擬文件系統。這個虛擬文件系統包含了關於設備的信息。當進入/sys/時,它似乎是硬盤的一部分,但是這個並不是一個真正的掛載點。這些文件實際存在於內存中。這與/proc/是同一個概念。

  注意:"/sysfs/"是一個文件夾,而"/sysfs"則可以是一個根目錄下名爲"sysfs"的文件。許多Linux用戶會混淆這兩種命名約定。

  如果啓用了上面的選項,那麼你可以設置"Maximum number of user space wakeup sources (0 = no limit) (PM_WAKELOCKS_LIMIT)"。最好選擇默認,那麼你就可以啓用垃圾收集器(Garbage collector for user space wakeup sources (PM_WAKELOCKS_GC))。垃圾收集是一種內存管理方式。

  注意: 在需要更多內存的系統中,通常最好在大多數情況下儘可能啓用垃圾收集。不然內存會消耗得更快且雜亂。

  下一個電源選項關於IO設備(Run-time PM core functionality (PM_RUNTIME))。這個選項允許IO硬件在運行時進入低功耗狀態。硬件必須支持這個纔行,不是所有硬件都支持。

  與其他許多內核組件一樣,如果啓用了(Power Management Debug Support),電源管理代碼同樣有調試支持。我禁用了這個選項。

  注意: 注意這些我引用/顯示的配置工具上的選項或問題不再顯示選項代碼(括號間所有的大寫字母)。這是因爲我沒有使用基於ncurses的配置工具(make menuconfig)而是使用默認工具去得到選項、設置和問題。記住,"make config"缺乏保存當前進度的能力。

  在這之後,配置工具會啓用"ACPI (Advanced Configuration and Power Interface) Support"。最好允許這個電源管理規範。通常配置工具會啓用這個特性。

  爲了允許向後兼容,啓用"Deprecated /proc/acpi files"。新的實現使用更新的在/sys下的實現。我禁用了這個選項。一個相似的問題詢問關於"Deprecated power /proc/acpi directories"。通常上,如果你禁用了這些文件,你不再需要這些文件夾,所以我禁用了他們。一些舊的程序可能會使用這些文件和文件夾。如果你在給舊的的Linux系統上編譯一個新的內核,最好啓用這個選項。

  下面,我們有另外一個文件接口可以啓用或者禁用(EC read/write access through)。這會在/sys/kernek/debug/ec下創建一個嵌入式控制器接口。嵌入式控制器通常在筆記本中讀取傳感器,內核代碼通過系統的BIOS表提供的ACPI代碼訪問嵌入式控制器。

  這裏有另外一個可以啓用或者禁用的向後兼容特性 (Deprecated /proc/acpi/event support)。acpi守護進程可能會讀取/proc/api/event來管理ACPI生成的驅動。不同於這個接口,守護進程使用netlink事件或者輸入層來得到送給用戶空間的事件,acpi守護進程管理ACPI事件。

  下一個選項允許開發者啓用一個特性,它會通知內核現在使用的是交流電源(AC Adapter)還是電池。下一個選項從/proc/acpi/battery/ (Battery)中提供電池信息。

  爲了內核在電源/睡眠按鈕按下或者蓋子合上時不同表現,啓用這個“按鈕”選項(Button)。這些事件在/proc/acpi/event/中控制。比如這樣的行爲,如果在用戶賬戶的電源選項啓用了掛起,當筆記本電腦的蓋子關閉後系統將會掛起。

  下一個ACPI擴展是針對顯卡的(Video)。

  ACPI風扇控制可以被啓用/禁用(Fan)。最好啓用ACPI風扇管理,這有助於節能。

  我們正在進一步配置內核中,但在接下來的文章中還有更多要做。

  歡迎進入Linux內核系列文章的下一篇!本篇我們繼續配置文件系統。

  首先,我們啓用"General filesystem local caching manager",它允許內核存儲文件系統緩存。這可以增加在存儲空間開銷上的性能。

  爲了調試目的,緩存系統可以通過統計信息監控(Gather statistical information on local caching)。通常上,這個特性應該只在你計劃調試的時候啓用。

  

  下面的特性很像上面的,但是這個特性存儲延遲信息(Gather latency information on local caching)。再說一次,這是個調試特性。

  "Debug FS-Cache"提供了很多其他的緩存系統的調試功能。

  下面的緩存調試工具會保存文件系統緩存對象的全局列表(任何進程可以訪問這個列表)(Maintain global object list for debugging purposes)。

  爲了增強網絡文件系統的速度,啓用接下來的驅動(Filesystem caching on files)。這個特性允許整個本地文件系統被用於遠程文件系統和存儲單元的緩存。Linux內核會管理這個分區。

  有兩種不同的用於調試的驅動可用於本地緩存系統和遠程文件系統,它們是(Debug CacheFiles)和(Gather latency information on CacheFiles)。

  大多數通常的光盤文件系統是ISO 9660標準的ISO-9660,故名(ISO 9660 CDROM file system support)。這個驅動用於讀/寫主流的光盤。

  當讀取光盤中的長Unicode文件名或者這類文件時,需要這個驅動(Microsoft Joliet CDROM extensions)。這是ISO-9660文件系統的擴展。

  "Transparent decompression extension"允許數據以壓縮形式寫入並以透明方式解壓讀出。這允許光盤上存放更多的數據。

  "UDF file system support"允許內核讀/寫UDF文件系統的可重寫光盤。UDF被設計用來管理增量寫入。UDF允許光盤思想閃存盤那樣使用。系統可以比常規ISO-9660文件系統寫入的光盤更快地寫入以及更新。然而,這並不比使用閃存快。

  如你所知,Windows是一個很流行的系統。有很多存儲器使用FAT文件系統。萬幸的是,Linux支持這樣的文件系統。這會明顯地增加內核的大小,但是既然FAT文件系統是如此的通用,那麼這點開銷也是值得的。

  爲了支持FAT文件系統,啓用這個驅動(VFAT (Windows-95) fs support)。在寫本篇的時候。驅動還不支持FAT64(通常成爲exFAT)。

  

  代碼頁的大小可以在這裏設置(Default codepage for FAT)。

  在此之後,可以設置FAT文件系統的默認字符集(Default iocharset for FAT)。

  NTFS文件系統在這個驅動提供支持(Default iocharset for FAT)。驅動提供了只讀特性。爲了寫入NTFS,啓用這個驅動(NTFS write support)。

  Linux內核提供了NTFS文件系統的調試工具(NTFS debugging support)。

  要在root根目錄下有個proc目錄,必須啓用這個特性(/proc file system support)。一些其他相似的驅動依賴於這個,包括(/proc/kcore support)、(/proc/vmcore support)和 (Sysctl support (/proc/sys))。proc系統("process"的縮寫)使用的proc文件系統有時稱作procfds。這個文件系統在硬件的內存中,並在啓用時創建。因此,當你在瀏覽proc中的文件時,用戶彷彿像在其他存儲單元上那樣瀏覽內存。proc扮演一個用戶空間和內核空間之間接口的角色。proc是在內核空間。

  "Enable /proc page monitoring"提供了一些文件監視進程的內存利用。

  "sysfs file system support"創建/sys文件加。sys文件系統在內存中並提供了內核對象的接口。

  tmp目錄被許多應用需要,包括Linux自己,因此強烈建議啓用這個驅動(Tmpfs virtual memory file system support (former shm fs))。tmp文件系統可能存儲在硬盤或者內存中,並只被用於存儲臨時文件。

  Tmpfs POSIX Access Control Lists"驅動tmpfs虛擬文件系統額外的文件權限特性。

  "Tmpfs extended attributes"提供了通常的tmpfs更多的屬性。

  "HugeTLB file system support"驅動提供了基於ramfs的hugetlbfs文件系統。這個虛擬文件系統包含了HugeTLB頁。

  configfs文件系統是一個以文件系統形式存在的內核對象管理器(Userspace-driven configuration filesystem)。強烈建議啓用這個驅動。ConfigFS很像sysfs。然而,ConfigFS被用於創建和刪除內核對象,而sysfs被用於瀏覽和修改內核對象。

  下面,我們可以回到"真正"的文件系統了。那就是用戶用來存放他們個人文件的文件系統。下面,內核能夠讀取ADFS文件系統(ADFS file system support)。

  AFDFS文件系統寫入被一個獨立且不穩定的驅動提供 (ADFS write support (DANGEROUS))。ADFS代表Advanced Disc Filing System(高級光盤歸檔系統)。

  Linux同樣支持Amiga快速文件系統(Amiga FFS file system support)。

  "eCrypt filesystem layer support"提供了POSIX兼容的加密文件系統層。這個eCrypt可以 用於任何文件系統無論駐留的文件系統分區表是什麼。

  eCrypt層可以有一個設備文件如果啓用了這個驅動(Enable notifications for userspace key wrap/unwrap)。設備路徑是/dev/ecryptfs。

  Linux同樣支持HFS和HFS+(Apple Macintosh file system support)和(Apple Extended HFS file system support)。與

  BeFS可以在Linux上作爲只讀文件系統使用(BeOS file system (BeFS) support (read only))。通常上,編寫讀取特性比編寫寫入能力簡單。

  特殊的BeFS調試特性(Debug BeFS)。

  EFS是另外一個Linux只讀不寫的文件系統。 (EFS file system support (read only)).

  一些閃存可能使用JFFS2文件系統(Journalling Flash File System v2 (JFFS2) support)。下面,可以設置調試層 (JFFS2 debugging verbosity)。

  爲了在NAND和NOR閃存上使用JFFS2,需要這個驅動(JFFS2 write-buffering support)。

  下面的驅動提供了更好的錯誤保護(Verify JFFS2 write-buffer reads)。

  啓用"JFFS2 summary support"可以更快掛載JFFS文件系統。這個驅動存儲文件系統的信息。

  像其他的文件系統的擴展/額外屬性驅動一樣,JFFS2也有這種驅動(JFFS2 XATTR support)。

  JFFS2文件系統支持不同的透明壓縮系統。這允許JFFS2系統上的文件更小,並且在讀取時不需要用戶任何特殊的操作。 (Advanced compression options for JFFS2)、 (JFFS2 ZLIB compression support)、(JFFS2 LZO compression support)、(JFFS2 RTIME compression support) 和 (JFFS2 RUBIN compression support)。默認的壓縮格式定義在下面的選項中(JFFS2 default compression mode)。

  JFFS2的繼任者也被Linux內核支持(UBIFS file system support)。無排序塊圖像文件系統(Unsorted Block Image File System (UBIFS)) 同樣與LogFS競爭。

  Linux內核同樣支持LogFS(LogFS file system)。

  基於ROM的嵌入式系統需要CramFS的支持(Compressed ROM file system support (cramfs))。

  此外,嵌入式系統可以使用SquashFS,這是一種只讀壓縮文件系統(SquashFS 4.0 - Squashed file system support)。Linux內核也支持SquashFS的擴展屬性(Squashfs XATTR support)。

  SquashFS支持三種不同的壓縮格式 (Include support for ZLIB compressed file systems)、(Include support for LZO compressed file systems) 和 (Include support for XZ compressed file systems)。SquashFS的塊大小可以設置爲4KB (Use 4K device block size?)。同樣,可以設置緩存大小(Additional option for memory-constrained systems)。

  Linux內核支持 FreeVxFS (FreeVxFS file system support (VERITAS VxFS(TM) compatible))、 Minix (Minix file system support)、 MPEG filesystem (SonicBlue Optimized MPEG File System support)、 HPFS (OS/2 HPFS file system support)、 QNX4 (QNX4 file system support (read only))、 QNX6 (QNX6 file system support (read only)) 和 ROM 文件系統 (ROM file system support)。

  "RomFS backing stores (Block device-backed ROM file system support)"提供了ROMfs不同額外的屬性和能力的列表。

  "Persistent store support"驅動提供對pstore文件系統的支持,這允許訪問平臺級的持久性存儲。

  pstore文件系統可以存儲內核日誌/消息(Log kernel console messages)。

  當內核崩潰時(相當於Windows中的藍屏死機),"Log panic/oops to a RAM buffer"會在RAM中存儲日誌。

  下面一個驅動提供對Xenix、 Coherent、Version 7 和 System V 文件系統的支持(System V/Xenix/V7/Coherent file system support)。

  Linux內核同樣支持UFS(UFS file system support (read only))、 (UFS file system write support (DANGEROUS)) 和 (UFS debugging)。

  內核也支持exofs(exofs: OSD based file system support)。

  flash友好型文件系統(Flash-Friendly FileSystem)是一種對於閃存設備的特殊文件系統(F2FS filesystem support (EXPERIMENTAL))、 (F2FS Status Information )、 (F2FS extended attributes) 和 (F2FS Access Control Lists).

  下篇文章我們將配置網絡文件系統。謝謝!

  歡迎來到下一篇關於內核配置文章!還有大量的選項需要配置。這篇文章將主要討論PCI和ACPI。

  

  這裏我們可以啓用由ACPI控制的擴展塢和可移動驅動器槽的支持(Dock)。記住,ACPI(Advanced Configuration and Power Management Interface)是一個電源管理系統。擴展塢是一種其他的設備通過額外的接口插入的設備。擴展塢可以容納許多不同的端口和連接器。一個ACPI控制的擴展塢是指其電源管理是通過ACPI進行的。驅動器槽是一套可以增加硬盤的設備,這也可以由ACPI管理。

  下面,我們允許ACPI用來管理空閒的CPU(Processor)。這會讓處理器在空閒時進入ACPI C2或者C3狀態。這可以節省電源並降低CPU芯片的溫度。處理器只在100%沒有佔用時才進入空閒狀態。沒有程序必須請求一個特定時間的CPU資源。

  CPU電源有四個狀態 - C0、C1、C2和C3。C0是操作激活狀態。C1(Halt)是一個不執行指令激活狀態,但是可以立刻執行指令。C2(Stop-Clock)是一種斷電狀態。C3(Sleep)是一種比C2更徹底的斷電狀態。在C3狀態中,現在緩存不再被同步或者管理,直到CPU離開這個狀態。第五個狀態稱作C1E(Enhanced Halt State),他擁有低功耗。

  如果啓用了IPMI驅動,那麼ACPI可以訪問BMC控制器(IPMI)。基板管理控制器(BMC)是一種管理軟件和硬件間連接的微控制器。智能平臺管理接口(IPMI)是一種框架,通過直接的硬件層面而不是登錄shell或者操作系統層面來管理計算機。

  ACPI v4.0進程聚合器允許內核應用一個CPU配置到所有系統中的處理器中(Processor Aggregator)。截止到ACPI v4.0,只有idle狀態可以用這個方式配置。

  接下來,可以啓用ACPI熱區(Thermal Zone)。多數硬件支持這個特性。這允許風扇的電源由ACPI管理。

  如果啓用這個選項,自定義DSDT可以鏈接到內核。在這個設置中,開發者必須在文件中包含完整的路徑名。系統差異表(DSDT)是一個包含了系統支持的電源事件信息的文件。它不需要輸入路徑名,這些表存在於固件中。內核會幫你處理這些。這個主要的目的是用於如果開發者需要使用不同於設備內置的表時用到。

  任意ACPI表都可以通過initrd來覆蓋(ACPI tables override via initrd)。ACPI表是指示如何控制並與硬件交互的基礎規則和指令。

  像內核的其他部分一樣,ACPI系統也可以生成調試信息(Debug Statements)。像其他調試特性一樣,你或許希望禁用它並省下50KB。

  啓用下面的特性會爲系統檢測到的每個PCI插槽(PCI slot detection driver)創建文件(/sys/bus/pci/slots/)。一個PCI插槽是在PCI主板上的一個端口,它允許用戶接上其他的PC設備。PCI是主板的一種類型。PCI是指組件互相通信的方式。有些應用程序可能需要這些文件。

  電源管理定時器是另外一種電源管理系統(Power Management Timer Support)。這是許多系統追蹤時間的方式。這個只需要很少的能源。處理器的空閒、電壓/頻率調節和節流都不會影響這個定時器。大量的系統需要使用這個特性。

  下面,可以啓用ACPI模塊和容器設備驅動(Container and Module Devices)。這會啓用處理器、內存和節點的熱插拔支持。它需要NUMA系統。

  下面的驅動提供對ACPI內存的熱插拔支持(Memory Hotplug)。有些設備甚至啓用這個驅動也不支持熱插拔。如果驅動以模塊形式加入,那麼模塊將會被acpi_memhotplug調用。

  注意:對於內核某個特定的功能,硬件、BIOS和固件在必須支持時會有問題。有些系統的BIOS是不控制硬件的。這種類型的BIOS通常不會限制特性。如果內核確實有一個特定的功能,硬件必須有能力完成這樣的任務。

  智能電源管理驅動提供訪問電池的狀態和信息(Smart Battery System)。

  下面,我們有一個"Hardware Error Device"驅動。設備通過SCI報告硬件錯誤。通常上,大多數的錯誤會是已糾正的錯誤。

  下面的是ACPI調試特性(Allow ACPI methods to be inserted/replaced at run time)。這允許ACPI AML方式不通過重啓系統管理。 AML代表的是ACPI機器語言(ACPI Machine Language)。AML代碼可以通過請求重啓來改變和測試。

  APEI是ACPI的錯誤接口(ACPI Platform Error Interface (APEI))。APEI從芯片給操作系統報告錯誤。這個錯誤接口同樣提供錯誤注射的能力。

  當"SFI (Simple Firmware Interface) Support" 啓用後,硬件固件可以發送消息給操作系統。固件與操作系統間的通信通過內存中的靜態表。SFI-only的計算機的內核工作需要這個特性。

  想要改變處理器的時鐘速度和運行時,就啓用這個特性(CPU Frequency scaling)。CPU頻率調整意味着改變處理器的時鐘速度。這個驅動可以用於降低時鐘頻率以節能。

  下面是另外一個電源管理子系統(CPU idle PM support)。當處理器不在活躍狀態時,它最好處在有效的空閒方式來減少電源消耗和減少CPU損耗。減少電源消耗同樣可以降低內部元件的發熱。

  Linux內核提供了很多CPU空閒驅動。在多處理器系統上,一些用戶可能有一個理由在每個CPU上使用不同的驅動(Support multiple cpuidle drivers)。啓用這個驅動可以允許用戶給每個處理器設置不同的驅動。

  對於Intel處理器,內核有一個特別爲管理這類CPU芯片空閒的驅動(Cpuidle Driver for Intel Processors)。

  當內存芯片空閒時,這些同樣可以處於低功耗狀態(Intel chipset idle memory power saving driver)。這個驅動是特別支持IO AT的Intel設備的。

  不同的計算機使用不同類型的主板(PCI support)。其中一種類型是PCI。這個驅動允許內核運行在PCI主板上。

  下面,我們可以啓用/禁用 "Support mmconfig PCI config space access"。

  接下來,我們有一個選擇啓用/禁用主橋窗口驅動(Support mmconfig PCI config space access)。警告:這個驅動還沒有完成(至少在3.9.4中是這樣)。

  像上面提到的主板,還有另一種類型的主板。寫一個選項是提供"PCI Express (PCIe) support"的驅動。PCIe是一種改進並且更快速的PCI。

  在這之後,下面的驅動應該被啓用以支持PCIe主板上的熱插拔(PCI Express Hotplug driver)。

  接着,我們可以啓用/禁用PCIe主板報錯(Root Port Advanced Error Reporting)。這就是PCIe AER驅動。

  下一個特性允許用戶使用PCIe EREC(PCI Express ECRC settings control)覆蓋BIOS和固件設置。下一個選項,這是對PCIe的錯誤注射(PCIe AER error injector support)。

  下面的設置提供了操作系統控制PCI的活躍狀態和時鐘電源管理(PCI Express ASPM control)。通常上,固件會控制ASPM,但是這個特性允許操作系統採取控制。

  如前面一樣,像內核的許多組件一樣,這裏提供了ASPM的調試支持(Debug PCI Express ASPM)。

  下面,在這個菜單選擇"Default ASPM policy"。

  在這選項之後,下一個是關於允許設備驅動啓消息信號中斷(Message Signaled Interrupts (MSI))。通常上最好允許設備給CPU發送中斷。

  爲了在系統日誌中加入大量的調試信息,啓用"PCI Debugging"。

  下一個選項允許PCI核心檢測是否有必要啓用PCI資源重分配(Enable PCI resource re-allocation detection)。

  當在Linux上託管一個虛擬操作系統時,它有時可以用於爲虛擬系統保留PCI設備(PCI Stub driver)。在系統虛擬化下,一個操作系統可能在另一個系統的內部或者並行。有時它們會競爭資源。可以爲客戶機保留設備可以減小競爭和增加性能。

  下面的驅動允許超傳輸設備(hypertransport devices)使用中斷(Interrupts on hypertransport devices)。HyperTransport是一種系統/協議總線用於處理器之間的高速通信。

  下一個驅動用於PCI虛擬化,它允許虛擬設備間共享它們的物理資源(PCI IOV support)。

  PCI頁面請求接口(PRI)使在IOMMU(輸入/輸出內存管理單元)之後的PCI設備能夠從頁錯誤中恢復(PCI PRI support)。頁錯誤不是一種錯誤;它指的是軟件嘗試訪問不在物理內存上的數據的事件。

  再次說明,你會在之後的文章中看到更多的需要配置Linux內核特性。

  來享受這個Linux內核系列的下一篇文章。我們將繼續配置PCI特性,接着是計算機中最重要的特性-網絡。

  進程地址空間標識符(Process Address Space Identifiers (PASIDs))允許PCI設備同時訪問多個IO地址空間(PCI PASID support)。這個特性需要一個支持PASIDs支持的IOMMU。

  下面我們可以啓用/禁用"PCI IO-APIC hotplug support"。APIC代表高級可編程中斷控制器(Advanced Programmable Interrupt Controllers)。可編程中斷控制器(PIC)收集所有來自不同源發給一個或者多個CPU流水線的中斷。高級PIC與PIC一樣,但是它們有更多的特性像高級中斷管理和更多的優先級模型。熱插拔是一種在系統在運行時加入一件設備的能力並且不需要重啓。這個驅動是爲了PCI主板能擁有處理輸入/輸出APIC熱插拔的能力。

  在這之後,下面的問題詢問的是啓用"ISA-style DMA support"。在前文中提到過,DMA是直接內存訪問,它是一種設備無需藉助CPU直接訪問內存的能力。ISA代表的是工業標準架構(Industry Standard Architecture),它是一種像PCI的總線標準。這個特性允許在ISA主板上支持DMA。

  現在,我們可以移步到"PC Card (PCMCIA/CardBus) support"。PCMCIA代表的是個人計算機存儲卡國際協會(Personal Computer Memory Card International Association)。PC卡、PCMCIA卡和Cardbus卡都是卡片形狀的筆記本外設。

  下一個PCMCIA選項處理"16-bit PCMCIA support"。一些舊的計算機使用16位PCMCIA卡。

  爲了從用戶空間加載卡式信息結構(Card Information Structure (CIS))以使PCMCIA卡正常工作,這個特性應該啓用(Load CIS updates from userspace)。

  CardBus是16位PCMCIA的更新32位版本。這個驅動提供對這類設備的支持(32-bit CardBus support)。爲了使用32位PC卡,需要一個兼容Cardbus的主機橋。

  下面的驅動提供對上面提到的CardBus橋支持(CardBus yenta-compatible bridge support)。這是PCMCIA卡插入的硬件端口。

  下面三個選項"Special initialization for O2Micro bridges"、"Special initialization for Ricoh bridges"和"Special initialization for TI and EnE bridges"。它們都是不同類型卡橋。

  接下來,提供了"Auto-tune EnE bridges for CB cards"的驅動。

  "Special initialization for Toshiba ToPIC bridges"可以在下一個選項中啓用/關閉。

  下一個提供的設備驅動是"Cirrus PD6729 compatible bridge support"。這在一些老的筆記本上需要。

  下一個PCMCIA橋驅動是Itel的"i82092 compatible bridge support"。這也在一些老的筆記本上出現。這是另外一種橋驅動。

  在這之後,以下的選項詢問關於是否啓用"Support for PCI Hotplug"。

  下一步,ACPI PCI熱插拔可以啓用(ACPI PCI Hotplug driver)。這個驅動允許擁有ACPI的PCI設備熱插拔(這個特性之前已經討論過)。

  對於IBM系統,爲了ACPI熱插拔下一個驅動應該啓用(ACPI PCI Hotplug driver IBM extensions)。這就像上面的特性但特定與IBM設備。

  對於帶有支持CompactPCI熱插拔支持的CompactPCI卡的系統,啓用"CompactPCI Hotplug driver"。

  下面,我們有一個選項對於另一種CompactPCI系統卡(Ziatech ZT5550 CompactPCI Hotplug)。

  使用#ENUM熱插拔信號通過標準IO口作爲系統註冊位的CompactPCI卡需要這個驅動(Generic port I/O CompactPCI Hotplug)。

  使用SHPC PCI熱插拔控制器的主板需要下一個驅動(SHPC PCI Hotplug driver)。SHPC代表的是標準熱插拔控制器(Standard Hot-Plug Controller)。這對於PCI主板是一個通用熱插拔系統。

  RapidIO互聯設備也需要一個特殊的驅動(RapidIO support)。RapidIO芯片和主板快於PCI和PCIe。

  "IDT Tsi721 PCI Express SRIO Controller"是一個特殊類型的RapidIO控制器。

  下一個選項允許開發者輸入在主機完成枚舉前系統發現節點應該等待多久時間(以秒計)。這通常選擇默認值

  下一個特性會允許RapidIO系統接受除了維護信號外其他流量(Enable RapidIO Input/Output Ports)。

  爲了使用DMA引擎框架從RIO設備上發送或接收RapidIO數據,啓用這個驅動(DMA Engine support for RapidIO)。RIO設備是可重配的輸入/輸出設備。RapidIO使用NREAD和NWRITE請求來在本地和遠程內存間傳輸數據,因此驅動需要允許RapidIO使用DMA訪問RIO設備。DMA控制器需要在內存中完成這個特性。

  如果允許,RapidIO可以提供調試信息(RapidIO subsystem debug messages)。如前面所說,調試特性可以禁用,除非你或者其他人使用的內核需要調試特性。

  下一個驅動提供"IDT Tsi57x SRIO switches support"。這是一組串口RapidIO開關,下面的四個選項是對於不同串口RapisIO開關驅動-"IDT CPS-xx SRIO switches support"、"Tsi568 SRIO switch support"、"IDT CPS Gen.2 SRIO switch support"和"Tsi500 Parallel RapidIO switch support"。

  管理這些驅動後,我們可以繼續其他的內核選項。下一個選項提供對ELF的支持(Kernel support for ELF binaries)。可執行與可鏈接格式(Executable and Linkable Format (ELF))支持是一種可執行文件規範。強烈建議啓動這個。

  爲了執行那些需要解釋器的腳本和二進制文件,這個特性必須啓用(Kernel support for MISC binaries)。這些可執行文件的類型通常稱爲包裝器驅動的二進制格式。例如包括Python2/3、 .NET、Java、DOS執行程序等等。

  當這個選項啓用時(Enable core dump support),內核可以生成崩潰文件。這是一個調試特性。除非這個內核是用來調試(無論內核本身還是軟件),不然這個並不必要。

  64位處理器可以執行32位程序如果啓用了"IA32 Emulation"。最好啓用這個特性除非開發者確定內核永遠不會運行32位代碼。

  老式的a.out二進制文件也被支持(IA32 a.out support)。就像它稱呼的那樣,"彙編輸出"(Assembler Output),這是一種已編譯代碼的文件格式。

  下一個設置允許32位處理器訪問完整的64位寄存器文件和寬數據路徑(x32 ABI for 64-bit mode)。然而,仍舊使用32位指針。這些32位進程將比同樣的爲64位編譯的進程使用內存更少,因爲他們使用32位指針

  下面,我們將講網絡支持。

  我們第一個網絡設定是啓用一般的網絡(Networking Support)。很少有開發者會禁用這個特性。如果他們這麼做了,內核會變得又小又快,但是它將無法使用Wifi、藍牙、以太網或者任何由網絡設備或協議處理的連接。一些在獨立系統上程序也需要這個特性,即使硬件上不存在網絡設備。舉例來說,X11依賴於網絡特性。如果你能提供一個替代方案在屏幕上顯示圖形,你才能在內核中禁用網絡特性。

  "Packet socket"允許在沒有中介物的情況下,進程與網絡設備間進行通信。這個增強了性能。

  ss工具需要啓用這個特性用來數據包監控(Packet: sockets monitoring interface)。包監控意味着監視相關本地設備的網絡流量。

  "Unix domain sockets" (Unix域套接字)是用來建立和訪問網絡連接。X窗口系統需要這個特性;這是一個極好的例子來說明爲什麼即使系統中不會使用網絡但是仍然在內核中啓用網絡特性。Unix域套接字是運行在同一臺機器上的進程間的網絡協議。

  上面的Unix套接字可以被ss工具監控,但是下面一個特性必須先啓用(UNIX: socket monitoring interface)。

  轉換(Transformation (XFRM))用戶配置接口被許多Linux原生工具用到,所以這個特性強烈建議啓用(Transformation user configuration)。這個會啓用Ipsec-Internet Protocol SECurity(互聯網協議安全)。Ipsec控制着驗證並且/或者加密IP數據包。

  下一個特性允許開發者給予網絡數據包第二個政策(稱作sub-policy)(Transformation sub policy support)。

  IPsec安全聯合定位器可以當這個特性啓用時(Transformation migrate database)動態更新。使用移動IPv6的設備需要這個特性。當計算機與路由器或者任何形式的網絡設備設置了一個網絡連接,安全協議會確保兩者不會意外地連接到網絡上的其他設備上。IP數據包被設定發送到一個特定的設備上。然而,移動設備會使用不同的網絡,比如說提供了4G信號,也需要能夠使用相同的連接到新的網絡點上。即使可能是相同的4G供應商,不同的設備會提供一個4G連接到它的物理位置。當設備處在新的區域時,它仍會使用相同的IP地址。

  下一個特性是顯示在包處理中的傳輸錯誤統計(Transformation statistics)。這對開發者有用。如果不需要,可以禁用掉它。

  "PF_KEY sockets"與KAME套接字兼容且它在使用從KAME移植來的IPsec工具時有用。KAME是IPv4 IPsec、IPv6 IPsec和IPv6的免費協議棧。

  這是另外一個需要的移動IPv6特性,它增加了到PF_KEYv2套接字的PF_KEY MIGRATE消息(PF_KEY MIGRATE)。

  下面的是最重要的並且是在網絡中最著名的需要啓用的特性-"TCP/IP networking"。大多數網絡(包括因特網)依賴於這個協議。甚至X窗口系統也使用TCP/IP。這個特性甚至允許用戶ping它們自己(命令:ping 127.0.0.1)。要使用因特網或者X11,這個必須啓用。

  爲了尋找網絡中數個計算機,"IP: multicasting"必須啓用。多播是一種給多臺計算機但不是全部計算機發送消息的能力。廣播會給網絡中的所有計算機發送信號。

  如果這是一個路由器Linux系統的內核,那就啓用這個選項(IP: advanced router)。

  如果下面的特性啓用了,那麼IP地址會在啓動時自動配置(IP: kernel level autoconfiguration)。當用戶希望不用配置就能連接到一個網絡時是很有用的。

  啓用了DHCP協議支持,那麼Linux系統可以通過網絡像NFS掛載它的根文件系統並且使用DHCP發現IP地址(IP: DHCP support)。這允許Linux系統通過網絡擁有它的遠程根文件系統而不必用戶在每次系統啓動時手動管理進程。

  下面的選項和上面的類似除了使用的是BOOTP而不是DHCP(IP: BOOTP support。BOOTP是自舉協議;這個協議使用UDP而不是TCP並且只能使用IPv4網絡

  RARP是一個被BOOTP和DHCP替代了的舊協議,但是它仍可以加到內核中(IP: RARP support)。

  網絡協議可以在另一個概念中使用,稱作"隧道"。這個特性可以用在Linux內核中(IP: tunneling)。安全shell協議(The secure shell protocol (SSH))就是隧道協議的一個例子。SSH需要這個特性。

  下面的驅動可以多路複用通用路由封裝包(GRE (Generic Routing Encapsulation))(IP: GRE demultiplexer)。多路複用是一個使單個信號進入不同部分的過程(這不會複製消息,只是分解它)。GRE是一種隧道協議。

  下面的特性允許GRE通道在IP連接中形成(IP: GRE tunnels over IP)。這允許GRE隧道在IP網絡中形成。

  當啓用這個特性(IP: broadcast GRE over IP),廣播可以通過IP使用GRE。

  在Linux系統的路由器內,爲了讓IP包發往多個地址,需要啓用這個(IP: multicast routing)。

  在本篇中,我們將繼續配置網絡特性。記住,網絡是計算機最重要的特性,這篇文章和這之後的網絡相關文章都要重點了解。

  在我們開啓這系列之前,我先要澄清一些事情。配置進程不會編輯你當前系統的內核。這個進程配置的是你編譯(或者交叉編譯)新內核前的源代碼。一旦我完成了配置過程,那麼我會討論讀者建議的話題。同樣,作爲提醒,每個段落中在引號或者括號中的第一句或者第二句(很少)的文本是配置工具中設置的名字。

  首先,我們可以啓用兩個不同的稀疏型獨立協議組播路由協議("IP: PIM-SM version 1 support" 和 "IP: PIM-SM version 2 support"),組播有點像廣播,但是廣播會給所有計算機發送信號而組播只會給選定的組或者計算機發送信號。所有PIM協議都是工作在IP的組播路由協議。

  注意:當計算機與另外一臺計算機或者服務器通信時,這叫做單播 - 只是以防你們想知道。

  下一個要配置的網絡特性是"ARP daemon support"。這讓內核有一張IP地址表以及它們相應的在內部緩存中的硬件地址。ARP代表的是地址解析協議(Address-Resolution-Protocol)。

  爲了額外的安全,"TCP syncookie support"應該要啓用。這保護計算機免於受到SYN洪水攻擊。黑客或者惡意軟件可能會發送SYN信息給一臺服務器來消耗它的資源,以便讓真實的訪客無法使用服務器提供的服務。SYN消息會打開一個計算機和服務器之間的連接。Syncookie會阻斷不正當的SYN消息。那麼,真實的用戶可以仍舊訪問訪問網站,而黑客則沒辦法浪費你的帶寬。服務器應該啓用這個特性。

  下面的特性是用於 "Virtual (secure) IP: tunneling"。隧道是一個網絡協議到另外一個網絡協議的封裝。當在使用虛擬私人網絡(VPN)時需要使用安全隧道。

  接下來,啓用"AH transformation"增加對IPSec驗證頭的支持。這是一種管理數據驗證的安全措施。

  在這之後,啓用"ESP transformation"增加對IPSec封裝安全協議的支持。這是加密與可選擇的數據驗證的安全措施。

  如果啓用了這個特性(IP: IPComp transformation),Linux內核會支持IP負載壓縮協議。這是一種無損壓縮系統。無損指的是數據仍會保持完整,在解壓縮後,數據在壓縮前後沒有變化。壓縮在加密前先執行。由於更少的數據傳輸,所以這個壓縮協議可以加速網絡。

  下面三個設置用於處理不同的IPsec特性("IP: IPsec transport mode"、"IP: IPsec tunnel mode"和"IP: IPsec BEET mode")。IPSec代表的是因特網安全協議(Internet Protocol SECurity).兩臺計算機之間並且/或者服務器間的傳輸模式是默認的IPSec模式。傳輸模式使用AH或者ESP頭並且只加密IP頭。在隧道模式下,IP頭和負載會被加密。隧道模式通常用於連接網關到服務器/服務器或者服務器到服務器。BEET模式(Bound End-to-End Tunnel)不會在IP地址改變時重連。BEET模式下的連接會仍然存在。BEET模式比其他幾種模式使用更少的字節。

  下面,內核可以支持收到大量IPv4/TCP包時減輕棧負擔(Large Receive Offload (ipv4/tcp))。網卡(NIC)處理TCP/IP棧。這個特性在內核中增加了處理大型棧的代碼。

  INET套接字可以啓用(INET: socket monitoring interface)。INET套接字用於因特網。這個特性(當啓用時)會監視來自或者發往因特網的連接與流量。

  這裏有另外一個套接字監視接口(UDP: socket monitoring interface)。這個用於用戶數據報協議(User Datagram Protocol (UDP))。再說一下,這個特性監視UDP的套接字。

  以下的設定會啓用不同的TCP擁塞控制(TCP: advanced congestion control)。如果網絡變得太忙或者帶寬已滿,那麼許多計算機必須等待一些帶寬或者它們的數據流會變慢。如果流量被合理管理,這回有助於網絡性能提升。

  TCP連接可以被MD5保護(TCP: MD5 Signature Option support)。這用於保護核心路由器之間的邊界網關協議(Border Gateway Protocol (BGP))連接。核心路由器是網絡中主要的路由器;這些路由器有時指的是因特網/網絡的骨幹。BGP是一種路由決策協議。

  下一個設定允許你啓用/禁用"The IPv6 protocol"。當你啓用它,IPv4仍舊可以很好地工作。

  下面的特性是一個特殊的隱私特性(IPv6: Privacy Extensions (RFC 3041) support)。這使得系統在網絡接口中生成並使用不同的隨即地址。

  注意:計算機中沒有數據是真正隨機的。計算機中隨機數和隨機字串通常稱爲僞隨機。

  在多路由的網絡中,這個特性允許系統能夠更有效地計算出該使用哪一個(IPv6: Router Preference (RFC 4191))。

  在這之後,一個用於處理路由信息的實驗性特性可以啓用/禁用(IPv6: Route Information (RFC 4191))。記住,在編譯一個穩定內核時,除非你確實需要這個問題中特性,纔去安裝實驗性的功能。

  有時,當系統自動配置它的IPv6地址時,它可能會得到一個網絡中已被使用的IPv6地址。這是一個允許重複地址檢測(Duplicate Address Detection (DAD)的實驗性特性(IPv6: Enable RFC 4429 Optimistic DAD)。

  IPv6可以有不同的IPsecc特性支持("IPv6: AH transformation" 和 "IPv6: ESP transformation")。

  IPv6同樣可以使用先前討論過的IP負載壓縮協議(IP Payload Compression Protocol)(IPv6: IPComp transformation)。

  這裏甚至有IPv6移動支持(IPv6: Mobility)。這允許使用IPv6的移動設備在保留同樣地址的情況下使用其他的網絡。

  再說一次,這裏同樣有一些針對IPv6的IPsec特性("IPv6: IPsec transport mode"、"IPv6: IPsec tunnel mode"、"IPv6: IPsec BEET mode")。

  當啓用此項後,IPv6可以支持MIPv6路由優化(IPv6: MIPv6 route optimization mode)。這樣就可以確保最短和最佳網絡路徑了。如果消息在更少的路由和網絡設備間發送,那麼下載和上傳速度就可以更快。

  如果一個管理員需要連接到兩個IPv6網絡,但是隻能通過IPv4來連接,這時內核使這個變得可能(IPv6: IPv6-in-IPv4 tunnel (SIT driver)。這通過隧道使IPv6報文穿越IPv4網絡。

  這個隧道特性是用於IPv6-in-IPv6 和 IPv4 tunneled in IPv6 (IPv6: IP-in-IPv6 tunnel (RFC2473))

  另外一個隧道特性是(IPv6: GRE tunnel)。他只允許GRE隧道。(GRE:通用路由封裝(Generic Routing Encapsulation))

  允許支持多重路由表(IPv6: Multiple Routing Tables)。路由表是一張網絡位置列表和數據要去目的地的路徑。

  允許根據源地址或前綴進行路由如果啓用了(IPv6: source address based routing)。

  "IPv6 Multicast routing"(IPv6組播路由)仍然是實驗性質。IPv4和IPv6處理組播的方式不同。

  典型的組播路由根據目標地址和源地址來處理組播包(IPv6: multicast policy routing)。啓用這個選項會將接口和包的標記(mark)包含到決策中。

  下面可以啓用IPv6的PIM-SMv2 組播路由協議(IPv6: PIM-SM version 2 support)。這與先前提到的IPv4 PIM相同。因爲IPv4和IPv6不同,所以PIM可以被v4/v6同時/分別激活

  網絡包標籤協議(Network packet labeling protocols)(就像CIPSO和RIPSO)可以啓用(NetLabel subsystem support)。這些標籤包含了安全信息和權限。

  網絡包可以通過啓用安全標記(Security Marking)變得更安全。

  這個網絡特性增加了一些開銷(Time-stamping in PHY devices)。物理層(PHY)設備可以給網絡包打上時間戳。PHY代表的是"PHYsical layer"。這些設備管理收到和發送的消息。

  可以啓用netfilter(Network packet filtering framework)。Netfilters過濾並修改過往的網絡包。包過濾器是一種防火牆。如果包滿足了一定的條件,包不會被允許通過。

  數據報擁塞控制協議(Datagram Congestion Control Protocol)可以啓用(The DCCP Protocol)。DCCP允許雙向單播連接。DCCP有助於流媒體、網絡電話和在線遊戲。

  下一步,流控制傳輸協議(Stream Control Transmission Protocol)可以啓用(The SCTP Protocol)。SCTP工作在IP頂層並且是一個穩定可靠的協議。

  下面的協議是可靠數據報套接字(Reliable Datagram Sockets)協議(The RDS Protocol)。

  RDS可以使用Infiniband和iWARP作爲一種支持RDMA的傳輸方式(RDS over Infiniband and iWARP),Infiniband和iWARP都是協議。RDMA代表的是遠程直接內存訪問(remote direct memory access)。RDMA用於一臺遠程計算機訪問另一臺計算機的內存而無需本機計算機操作系統的輔助。這就像直接內存訪問(DMA),但是這裏遠程代替了本地計算機。

  RDS同樣可以使用TCP傳輸(RDS over TCP)

  接下來,"RDS debugging messages"應該禁用。

  下面的網絡協議用於集羣(The TIPC Protocol)。集羣就是一組計算機作爲一臺計算機。它們需要有一個方式去通信,所以他們使用透明內部進程間通信協議(Transparent Inter Process Communication (TIPC))。

  這個高速協議使用固定大小的數據包(Asynchronous Transfer Mode (ATM))。

  使用ATM的IP可以與連接到一個ATM網絡的IP的系統通信(Classical IP over ATM)。

  下一個特性禁用"ICMP host unreachable"(ICMP主機不可達)錯誤信息(Do NOT send ICMP if no neighbor)。這防止了由於重新校驗而移除ATMARP表被移除的問題。ATMARP表管理地址解析。ICMP代表的是因特網控制消息協議(Internet Control Message Protocol)並被常用於通過網絡發送錯誤消息。

  LAN仿真(LANE)仿真了ATM網絡上的LAN服務(LAN Emulation (LANE) support)。一臺LANE計算機可以作爲橋接Ethernet和ELAN的代理。

  "Multi-Protocol Over ATM (MPOA) support"允許ATM設備通過子網邊界發送連接。

  在這個特性下,至少在kernel看來ATM PVCs的行爲就像Ethernet(RFC1483/2684 Bridged protocols)。PVC代表的是永久虛電路(permanent virtual circuit)。虛擬連接是一種基於包的連接,它伴隨着主/原始協議使用其他更高層的協議。

  "Layer Two Tunneling Protocol (L2TP)"(二層隧道協議)是隧道對應用透明。虛擬私有網絡(Virtual Private Networks (VPNs))使用L2TP

  要想使用基於Linux的以太網橋,啓用這個橋特性(802.1d Ethernet Bridging)。在網絡中,一個橋同時連接兩個或者更多的連接。以太網橋是使用以太網端口的硬件橋。

  "IGMP/MLD snooping"(IGMP/MLD 探聽)是一種以太網橋能夠基於IGMP/MLD負載選擇性地轉發組播信號的能力。禁用這個特性能夠明顯減少內核的大小。IGMP代表的是因特網組管理協議(Internet Group Management Protocol),這是一種被用於設置組播組的協議。MLD代表多播監聽發現(Multicast Listener Discovery)。

  下一個過濾特性允許以太網橋選擇性地管理在每個數據包中的基於VLAN的信息的流量。 ?用這個特性可以減小內核的大小。

  通過啓用這個特性(802.1Q VLAN Support),VLAN接口可以在以太網上創建。下面"GVRP (GARP VLAN Registration Protocol)"支持GVPR協議被用於在網絡設備上註冊某些vlan。

  在這之後,"MVRP (Multiple VLAN Registration Protocol) support"(多重VLAN註冊協議)可以啓用。MVRP是GVRP更新的替代品。

  "DECnet Support"是一種Digital公司發明的網絡協議。這是一中既安全又穩定的協議。

  "DECnet router support"允許用戶製作基於Linux的支持DRCnet的路由。

  注意:Linux可以用於服務器、工作站、路由器、集羣、防火牆並支持其他許多用途。

  下面的特性用於支持邏輯鏈路層2(Logical Link Layer type 2)(ANSI/IEEE 802.2 LLC type 2 Support)。這層允許在同一個網絡設備上使用多個協議。強烈建議在網絡很重要的環境中啓用這個特性。最好所有內核都支持這個特性。

  在下一篇文章中,我們將討論更多的關於可以配置的網絡設定。

  Novell的網絡協議IPX通常用於Windows系統和NetWare服務器(The IPX protocol)。IPX代表網間分組交換(Internetwork Packet Exchange)。這是一個網絡層協議通常與傳輸層的SPX協議同時使用。

  爲了使NetWare服務器在服務的網絡中有相同的IPX地址,啓用下一個特性(IPX: Full internal IPX network)。不然,每個網絡都會看到服務器一個不同的IPX地址。

  注意:IPX協議使用IPX尋址,而不是IP尋址。IP地址不是計算機網絡中唯一的網絡地址。

  對於在Apple網絡中的Linux系統,需要啓用Appletalk(Appletalk protocol support)。蘋果計算機和蘋果打印機通常使用Appletalk在網絡間通信。Appletalk不需要一臺中心路由器/服務器並且網絡系統是即插即用的。

  在Appletalk網絡中Linux系統需要使用IP需要"Appletalk interfaces support"(AppleTalk接口支持)。

  下一個特性允許用戶在Appletalk中使用IP隧道(Appletalk-IP driver support)。

  接下來,這個特性允許IP包被封裝成Apppletalk幀(IP to Appletalk-IP Encapsulation support)。在網絡中,幀是一種標記包的開始和結束的特殊序列位。這個特性會將IP包放在Appletalk包內部。

  這個特性允許爲先前的特性解包(Appletalk-IP to IP Decapsulation support)。解包器會將IP包從Appletalk包中拿出。

  這是另外一個協議層稱爲"X.25" (CCITT X.25 Packet Layer)。這個協議層通常用於非常大的網絡,就像國家公網。許多銀行使用這個在他們的擴展網絡系統裏。X25(拼成"X25"或"X.25")網絡擁有將進入數據包打包的包分組交換機。X25正在被更簡單的IP協議代替。X25是一個不如TCP/IP有效率的舊協議,但是一些公司發現它在大型、複雜的網絡中很有用。

  LAPB是用於X.25的數據鏈路層(LAPB Data Link Driver)。如果上面的啓用了,那麼這也應該同時啓用。LAPB代表的是"Link Access Procedure Balanced"(鏈路訪問過程平衡)。LAPB同樣也用於以太網和X.21網卡中(這裏沒有打錯)。X.21是用於物理層(硬件),X.25用於網絡層。LPAB會檢查錯誤並確保包被放回正確的序列中。

  Nokia調制解調器使用的電話網絡協議通常稱作"PhoNet"(Phonet protocols family)。Linux計算機遠程控制Nokia電話機需要這個特性。

  下一個網絡通常是用於不同自動設備間的小型無線連接(IEEE Std 802.15.4 Low-Rate Wireless Personal Area Networks support)。802.15.4是一種需要很少電量的簡單低數據率協議。這個無線協議最大可擴展到10米。這在通過無線網絡連接機器人傳感器時是很有用的。任何不該有線纜的機械可能都會從這個代替了繩子的本地無線網絡中獲益。

  如果啓用了上面的特性,那麼最好明智地啓用這個IPv6 壓縮特性(6lowpan support over IEEE 802.15.4)。

  支持物理層 IEEE 802.15.4協議的SoftMac設備可以啓用這個特性(Generic IEEE 802.15.4 Soft Networking Stack (mac802154))。

  當有許多包需要傳輸時,內核必須決定先發送哪一個(它們不能一次全部發送),所以這個特性幫助內核區分包的優先級(QoS and/or fair queuing)。如果不啓用這個,那麼內核會使用"first come, first serve approach"("誰先到,誰先服務")。這可能意味着緊急的網絡消息需要等待才能輪到它們傳輸。

  在有數據中心服務器的網絡中,這個特性強烈建議啓用(Data Center Bridging support)。這個特性增強了以太網對數據中心網絡的連接。

  DNS查詢可以在下一個選項中啓用(DNS Resolver support)。大多數存儲DNS緩存的系統允許計算機無需DNS服務器的輔助下執行DNS查詢。

  接下來是另一個用於多跳專用網狀網絡(B.A.T.M.A.N. Advanced Meshing Protocol)。"B.A.T.M.A.N."代表"better approach to mobile ad-hoc networking"(更好接入移動專用網絡)。這個工作與有線和無線網絡。專用網絡沒有中心像路由器這類中心設置。每臺網絡上的設備就像個一臺路由器。網狀網絡是一個簡單的概念。每個節點必須路由發送給它的數據。在這個網狀網絡中,每臺計算機連接到全部或幾乎全部其他網絡設備。當這樣的網絡畫在紙上成爲一張地圖時,這個網絡看上去就像一張網。

  當許多網狀節點連接到相同的LAN和網時,一些網絡信號可能會迴環(Bridge Loop Avoidance)(避免橋迴環)。這個特性可以避免此類的迴環。這些迴環可能永遠不會結束或者降低性能。避免這樣的迴環被稱爲"Bridge Loop Avoidance (BLA)"。

  分佈式ARP表(Distributed ARP Tables (DAT))被用於增強ARP在稀疏無線網狀網絡的可靠性(Distributed ARP Table)。

  BATMAN協議有些開發者需要用到的調式特性(B.A.T.M.A.N. Debugging)。對於任何調試特性,通常最好禁用它來節省空間以及得到一個更好優化後的內核。

  虛擬化環境可以從"Open vSwitch"中得益。這是一個多層以太網交換機。Open vSwitch支持大量的協議。

  虛擬機、hypervisor、主機之間的網絡連接需要"virtual socket protocol"。這個類似於TCP/IP.這些套接字就像其他網絡套接字,但是它們針對虛擬機。這允許客戶機系統擁有一個與主機的網絡連接。

  這是一個可以管理網絡優先級的cgroup子系統(Network priority cgroup)。這允許控制組(cgroup)根據發送應用設置網絡流量優先級。

  BPF過濾器由解釋器處理,但是內核可以執行原生BPF過濾通過這個(enable BPF Just In Time compiler)。BPF代表的是"Berkeley Packet Filter"(伯克利報過濾器)。這允許計算機系統支持原生鏈路層包。

  下面,我們有兩個網絡測試工具。第一個是"Packet Generator"(包生成器),這用於測試網絡時注射數據包(製造空包)。第二個,允許設置一個警報系統,當數據包丟失時警告用戶/系統(Network packet drop alerting service)。

  Linux內核可以用於無線電系統或者遠程控制它們。"Amateur Radio AX.25 Level 2 protocol"用於計算機通過無線電通信。這個無線電協議可以在其他許多的協議中支持TCP/IP。

  爲了放置在AX.25網絡中衝突,啓用DAMA(AX.25 DAMA Slave support)。至今爲止,Linux還不能作爲DAMA的服務器,但是可以作爲DAMA的客戶端。DAMA代表"Demand Assigned Multiple Access"(按需分配多址訪問)。DAMA分配網絡流量到特定的信道中去。

  NET/ROM是AX.25的路由層。(Amateur Radio NET/ROM protocol)。

  NET/ROM的一個替代是"Packet Layer Protocol (PLP)"(包層協議),它可以運行在AX.25的頂端(Amateur Radio X.25 PLP (Rose))。

  控制器局域網絡(Controller Area Network (CAN))總線需要這個驅動(CAN bus subsystem support)。CAN總線是一種用於不同目的的串行協議。

  使用這個特性(Raw CAN Protocol (raw access with CAN-ID filtering)),CAN總線可以通過BSD套接字API訪問

  內核中有用於CAN協議的廣播管理(Broadcast Manager CAN Protocol (with content filtering))。這個管理提供了很多控制,包括內容過濾。

  爲了讓Linux盒子成爲一個CAN路由器和/或者網關,需要這個特性(CAN Gateway/Router (with netlink configuration))。

  注意:網關是兩個或者更多網絡的接口設備,它提供不同的協議。一個簡單的定義可以是"網關是一個協議轉換器。"

  注意:路由器轉發網絡流量和連接使用相同協議網絡。

  如果啓用了(一些選項),Linux內核可以支持很多CAN設備(主要是控制器)和接口。所有的CAN驅動都是對於這些設備的不同品牌和型號。在配置工具中,它們有以下這些標題。


Virtual Local CAN Interface (vcan) 
Serial / USB serial CAN Adaptors (slcan) 
Platform CAN drivers with Netlink support 
Enable LED triggers for Netlink based drivers 
Microchip MCP251x SPI CAN controllers 
Janz VMOD-ICAN3 Intelligent CAN controller 
Intel EG20T PCH CAN controller 
Philips/NXP SJA1000 devices 
Bosch CCAN/DCAN devices 
Bosch CC770 and Intel AN82527 devices 
CAN USB interfaces 
Softing Gmbh CAN generic support 
Softing Gmbh CAN pcmcia cards

  像Linux中的其他許多特性,CAN設備同樣可以啓用調試能力(CAN devices debugging messages)。再說一次,記住你內核的目的,你需要調試還是需要性能?

  Linux內核同樣支持紅外線信號協議IrDA (infrared) subsystem support)。IrDa代表的是 "Infrared Data Associations"(紅外數據協會);這是紅外信號的標準。

  許多人如今想要藍牙特性(Bluetooth subsystem support)。

  RxRPC會話套接字可以啓用(RxRPC session sockets)。這些套接字使用RxRPC協議運載網絡連接。RxRPC運行於UDP的頂部。

  如果啓用的話,Linux內核可以支持"RxRPC dynamic debugging"(RxRPC 動態調試)。

  RxRPC擁有kerberos 4和AFS kaserver安全特性可以啓用(RxRPC Kerberos security)。Kerberos是一種每個網絡設備在傳輸任何數據前都被需要證明彼此的身份的驗證協議。

  對於電腦的無線網絡設備像Wifi,配置工具需要啓用無線局域網(802.11)設備(cfg80211 - wireless configuration API)。cfg80211代表"Configuration 802.11"(配置 802.11)。802.11是一種無線規範。

  "nl80211 testmode command"是用於校準並且/或驗證的實用工具,它無線設備芯片上執行這些任務。

  下一個設置允許用戶"enable developer warnings"(啓用開發者警告)對於cfg80211設備。

  下面,"cfg80211 regulatory debugging"(cfg80211調控調試)可以啓用。

  下面的設定是"cfg80211 certification onus"(cfg80211證書義務)。

  應該爲cfg80211兼容設備啓用省電特性(enable powersave by default)。

  cfg80211支持debugfs入口(cfg80211 DebugFS entries)。

  無線設備有它們遵守的調整規則;這些被存儲在數據庫中(use statically compiled regulatory rules database)(使用靜態編譯的調整規則數據庫)

  一些使用基於cfg80211的驅動擴展可能需要使用一個老的用戶空間。這個特性允許這個行爲(cfg80211 wireless extensions compatibility)(cfg80211 無線擴展兼容)。

  lib80211可以提供調試特性(lib80211 debugging messages)。

  獨立於硬件的IEEE 802.11標準可以啓用(Generic IEEE 802.11 Networking Stack (mac80211))。mac80211是一種用於編寫softMAC無線設備驅動的框架。SoftMac允許很好地控制和配置設備。

  下一個特性允許mac80211使用PID控制器管理TX(發送)速率(PID controller based rate control algorithm)(PID控制器基於速率控制算法)。TX單位是BFS(Bits per minute)(位/秒)。特別地,這個特性是用於控制數據流速率的算法。

  另外一個相同特性的算法叫做"Minstrel"。這是一個比TX速 管理算法更精確和有效的算法。

  Minstrel同樣支持802.11n(Minstrel 802.11n support)。

  由於有兩種TX速率控制算法,但只能使用一種。所喲必須設備一個默認的(Default rate control algorithm (Minstrel))。通常地,最好選擇Minstrel作爲默認。

  802.11s網狀網絡草案可以在內核中啓用(Enable mac80211 mesh networking (pre-802.11s) support)。802.11s草案是網狀網絡的無線標準。

  對於支持這個特性的設備,對於不同包流量時間的LED除法器特性可以啓用(Enable LED triggers)。在我的以太網設備商上,當端口是活躍時LED燈會點亮。這些驅動可以是這些LED在包流量時間下工作。

  mac80211同樣支持debugfs特性(Export mac80211 internals in DebugFS)。

  這是一個獨立於典型日誌系統收集mac80211調試信息的特性(Trace all mac80211 debug messages)。

  這是另外一組mac80211調試特性,但是這些使用的是典型日誌系統(Select mac80211 debugging features --->)。在這個菜單,選擇你需要的調試特性。

  在下一篇文章中,我們還有更多的需要配置。

  

  使用WiMAX協議的無線寬頻設備可以啓用這個(WiMAX Wireless Broadband support)。這個類型的無線連接通常需由服務供應商提供的連接服務才能工作(這與3G/4G的概念相同)。WiMAX代表"Worldwide Interoperability for Microwave Access"(微波存取全球互通)。WiMAX的目的是代替DSL。寬頻指的是寬的帶寬和大量信號的傳輸。

  射頻開關被用於許多Wifi和藍牙卡中(RF switch subsystem support)。"RF"代表"Radio Frequency"。RF開關路由高頻信號。

  RF開關輸入支持同樣也在內核中支持(RF switch input support)。

  內核可以控制並請求無線傳輸(Generic rfkill regulator driver)。啓用這個生成一個設備文件(/dev/rfkill)。這個設備文件作爲無線設備的接口。

  Linux內核支持9P2000協議(Plan 9 Resource Sharing Support (9P2000))。這個網絡協議有時稱作Styx。Plan 9的窗口系統(Rio)的Styx和Linux的X11都使用Unix網絡套接字。Linux系統可能使用Styx在Styx網絡中。Plan 9和Linux可以在一個網絡中使用Styx

  "9P Virtio Transport"(9P 虛擬io傳輸)系統提供了在虛擬系統上客戶機和主機分區間的傳輸。

  內核同樣支持RDMA傳輸(9P RDMA Transport (Experimental))。RDMA代表的是"Remote Direct Memory Access"(遠程內存直接訪問)。這個Plan9上訪問遠程計算機內存的協議。

  9P系統與其他內核組件一樣有調試特性(Debug information)。

  "CAIF support"支持同樣可以在內核中啓用。CAIF代表" Communication CPU to Application CPU Interface"(通信CPU到應用CPU接口)。這是一個使用數據包的多路複用(MUX)協議並被用於ST-Ericsson(意法愛立信)調制解調器中。ST-Ericsson是開發這個協議的公司(是的,MeeGo和Android是Linux系統,並且我正在討論Google的Andorid)。MUX協議就是多路複用(multiplexing)協議。多路複用在前面的文章中已經提到過。

  下面,cephlib可以加入內核,它可以用於rados塊設備(rbd)h和Ceph文件系統(Ceph核心庫)(譯註:Ceph是一種分佈式文件系統)。cephlib是是Ceph的完整核心庫。Ceph是存儲平臺。CephFs(Ceph文件系統)是運行在另外一個文件系統的頂部。通常,CephFs運行在EXT2、ZFS、XFS或者BTRFS上面。Rados設備是使用CephFs的塊存儲單元。

  ceph的調試特性會損害內核性能,所以只在需要的時候啓用(Include file:line in ceph debug output)。 當啓用這個選項(Use in-kernel support for DNS lookup),CONFIGDNSRESOLVER設施會執行DNS查詢。

  近場通信(Near Field Communication (NFC))設備在Linux內核中也被支持(NFC subsystem support)。

  如果上面的特性被啓用,那麼NFC控制器接口(NFC Controller Interface (NCI))也應該啓用(NCI protocol support)。這允許主機和NFC控制器相互通信。

  NFC要處理HCI幀需要啓用下面一個特性(NFC HCI implementation)。

  一些HCI驅動需要一個SHDLC鏈路層(SHDLC link layer)(SHDLC link layer for HCI based NFC drivers)。SHDLC是檢測完整性和管理HCI幀順序的協議。

  如果NFC特性啓用了,那麼通常也啓用"NFC LLCP support"(就像上面那樣)。

  接下來有一些爲特別的NFC設備的驅動。第一個是"NXP PN533 USB driver"。

  下一個NFC驅動支持TI的BT/FM/GPS/NFC設備(Texas Instruments NFC WiLink driver)。

  下面的是"NXP PN544 NFC driver"。

  對於Inside Secure(譯註:法國一家非接觸半導體芯片廠商)生產的microread NFC芯片驅動同樣在內核中支持(Inside Secure microread NFC driver)。

  現在,我們將繼續配置與網絡無關的驅動。首先我們可以選擇uevent幫助程序的路徑(path to uevent helper)。如今許多計算機不在需要這個特性因爲一個uevent幫助程序會在每次執行時fork一個進程處理。這回很快地消耗資源。

  在啓動時,內核會創建一個tmpfs/ramfs 文件系統(Maintain a devtmpfs filesystem to mount at /dev)。這個提供了完整的/dev目錄系統。在這兩個文件系統中(tmpfs和ramfs),ramfs兩者中最簡單。"tmpfs"代表"temporary filesystem"(臨時文件系統),而"ramfs"代表"ram filesystem"(內存文件系統)。

  下一個設置是devtmpfs文件系統的代碼,它同樣掛載在/dev下(Automount devtmpfs at /dev, after the kernel mounted the rootfs)。

  下面的特性允許模塊加載到用戶空間(Userspace firmware loading support)。

  爲了"Include in-kernel firmware blobs in kernel binary"(譯註:將固件編譯進內核)(這會增加專有固件到內核中),就啓用這個特性。

  一些二進制專有驅動需要在啓動時使用。這個特性允許這類軟件這麼做(External firmware blobs to build into the kernel binary)。一些計算機有些引導設備需要只包含專有二進制文件的特殊固件。這個特性不啓用,系統將無法引導。

  啓用"Fallback user-helper invocation for firmware loading",允許user-helper(用戶助手) (udev)作爲內核加載固件驅動失敗的後備手段加載固件。udev可以加載駐留在非標準路徑的固件。

  管理驅動的不跟內核如果被允許就可以生成調試信息(Driver Core verbose debug messages)。

  下一步,如果啓用這個特性(Managed device resources verbose debug messages),devres.log文件就可以使用。這是一個用於設備資源的調試系統。

  下面一個特性會通過netlink套接字生成一條用戶空間和內核空間的連接(Connector - unified userspace <-> kernelspace linker)。這個套接字使用netlink協議。這是另外一個Linux系統即使在沒有物理網絡情況下仍需要網絡特性的例子。

  用戶空間可以通過套接字得到進城時間的通知(Report process events to userspace)。一些報告事件包含了ID改變、fork、和退出狀態。一些先前啓用的內核特性可能需要這個。最好按配置工具建議的那樣設置。

  使用固態硬盤的系統需要MTD的支持(Memory Technology Device (MTD) support)。MTD設備是固態存儲設備。典型的存儲設備與固態硬盤(SSD)不同。用於磁盤單元的標準常規不適用於SSD(讀、寫、擦除)。

  大多數會桌面電腦帶有並口(一個有25個洞的連接器),所以他們需要這個特性(Parallel port support)。並口在其他許多鮮爲人知的應用中通常用於打印機和ZIP驅動器。並口有25針。

  對IBM兼容計算機啓用這個特性(PC-style hardware)。它們是不同類型的計算機。除了IBM計算機(通常運行Windows),還有蘋果計算機。Linxu可以運行在幾乎所有類型的計算機上。

  Linux同樣支持Multi-IO PCI卡(Multi-IO cards (parallel and serial))。Multi-IO PCI卡同時擁有並口和串口。串口每次發送或接收1位數據。

  下一個特性允許內核"Use FIFO/DMA if available"。這用於特定的並口卡來加速打印。FIFO代表"First In, First Out"(先入先出)。DMA是先前提過的直接內存訪問(Direct Memory Access)。

  下面一個特性用於探測Super-IO卡(SuperIO chipset support)。這些探針會發信中斷號、DMA通道和其他類型設備的地址/數量。Super-IO是一種集成IO控制器類型。

  PCMCIA的並口支持可以啓用(Support for PCMCIA management for PC-style ports)。

  注意:對於許多特性來說,你最好按照配置工具的建議除非你有特別的理由不這麼做。通常地,如果你是交叉編譯或者編譯一個通用內核,那麼你應該熟悉你想要支持的並做出相應的選擇。

  在AX88796網絡控制器的並口需要這個支持(AX88796 Parallel Port)。

  "IEEE 1284 transfer modes"在並口上支持增強型並口(Enhanced Parallel Port (EPP))和增強功能口(Enhanced Capability Port (ECP))並支持打印機狀態回讀。狀態回讀是檢索打印機的狀態。

  即插即用("Plug and Play support" (PnP))應該啓用。這允許用戶在系統開機狀態下插入設備並能馬上使用它們。沒有這個特性,用戶不能使用USB設備、打印機或者其他沒有執行特殊任務的設備。系統會自動管理復位(譯註:原文是 "The system will manage the rest automatically")。

  下面,用戶可以啓用塊設備(Block devices)。這是一個應該啓用的特性,因爲塊設備很常見。

  軟驅也是可以啓用的塊設備(Normal floppy disk support)。

  連接到並口的IDE設備也同樣支持(Parallel port IDE device support)。一些外部CD-ROM設備也能通過並口連接。

  外部IDE存儲設備單元同樣可以連接到並口(Parallel port IDE disks)。

  連接到並口的ATA包接口(ATA Packet Interface (ATAPI)) CD-ROM需要這個驅動(Parallel port ATAPI CD-ROMs)。ATAPI是用於並行ATA(PATA)設備的ATA協議擴展。

  還有一個ATAPI磁盤設備可以插到並口中(Parallel port ATAPI disks)。這個驅動會除了支持CD-ROM外還支持其他類型的磁盤。

  內核同樣支持通過並口連接ATAPI磁帶設備(Parallel port ATAPI tapes)。

  還有許多其他的ATAPI設備可以連接到並口中。結果就是,一個通用驅動被用於管理前面提到過的驅動不支持的設備(Parallel port generic ATAPI devices)。

  連接到並口上的IDE設備需要一個特殊的協議用於通信。有很多這樣的協議,其中一個是"ATEN EH-100 protocol"。

  一個可選的用於並行IDE設備的協議是"MicroSolutions backpack (Series 5) protocol"。

  這裏仍有另外一個並口IDE設備協議(DataStor Commuter protocol)和另一個(DataStor EP-2000 protocol)還有(FIT TD-2000 protocol)。

  再提一次,這裏有另外一個協議,但是這個強烈建議用在更新的插在並口上的CD-ROM和PD/CD設備(FIT TD-3000 protocol)。

  下面的協議主要用於SyQuest、Avatar、Imation和HP生產的並口設備(Shuttle EPAT/EPEZ protocol)。

  Imation SuperDisks需要Shuttle EP1284芯片的支持(Support c7/c8 chips)。

  一些其他的並行IDE協議可以啓用,包括:


Shuttle EPIA protocol 
Freecom IQ ASIC-2 protocol - (用於Maxell Superdisks) 
FreeCom power protocol 
KingByte KBIC-951A/971A protocols 
KT PHd protocol - (用於2.5英寸外置並口硬盤) 
OnSpec 90c20 protocol 
OnSpec 90c26 protocol

  注意:這些協議以及支持的插入並口的設備意味着這些都類似於熱插拔設備,就像USB設備插入USB端口一樣。USB和火線人仍舊是使用最流行的端口,因爲它們的大小和速度。一個並口設備單元大於USB閃存因爲並口大於USB端口。

  下一步,我們有一個對於Micron PCIe的SSD驅動(Block Device Driver for Micron PCIe SSDs)。

  你可能已經猜到了- 下面的文章會討論更多的配置.

  

  準備好配置更多的驅動了麼?還有很多要做。

  Linux支持兩種不同的康柏智能陣列控制器:(Compaq SMART2 support)和(Compaq Smart Array 5xxx support)。陣列控制器是將物理存儲單元表現爲邏輯單元的設備。這些控制可能同樣實現了基於硬件的RAID。硬件和軟件RIAD的不同是簡單的。Linux管理並見到軟件RIAD。Linux將硬件RAID視爲另外的存儲單元。這意味着Linux沒有意識到設備就是RAID驅動器。硬件(陣列控制器)獨立於內核管理着RAID系統。這對於系統的性能更好因爲內核不必配置或者管理RAID。注意,不同的陣列控制器有不同的RAID能力。

  上面提到的陣列控制器可以通過這個驅動訪問SCSI磁帶(SCSI tape drive support for Smart Array 5xxx)。SCSI磁帶是使用SCSI協議的磁帶機。

  PCI RAID控制器Mylex DAC960、AcceleRAID和eXtremeRAID在這個驅動中支持(Mylex DAC960/DAC1100 PCI RAID Controller support)。PCI RAID控制器是一個連接到PCI卡的陣列控制器。RAID控制器是擁有RAID功能的陣列控制器。

  帶電源備份的MM5415內存芯片在這個驅動中支持(Micro Memory MM5415 Battery Backed RAM support)。帶後備電源內存芯片允許數據在切斷電源後繼續保存在內存設備中。這有助於保護數據。不然,當電源斷開後,當前的計算機會話就會丟失。

  當啓用這個特性後,可以將典型的文件(比如ISO文件)作爲一個塊設備並掛載它Loopback device support)。這對於從鏡像文件中檢索文件而不必把文件燒錄到光盤或者解壓出來。想像一下你從因特網上得到了一份包含了很多文件的ISO文件。如果你只需要包中的一個文件並且用戶不希望燒寫ISO到光盤上或者不想知道如何打開一個ISO文件。用戶可以用掛載ISO來替代。

  Linux內核在初始化階段會創建一些迴路設備,所以一些迴環設備已經準備好並創建了(Number of loop devices to pre-create at init time)。當一個文件(像ISO)或者虛擬設備(就像虛擬磁盤驅動器[vhd])被作爲迴環設備掛載時會節約一些時間。這個設定允許開發者選擇內核可以預 創建多少迴環設備。

  當"Cryptoloop Support"啓用後就可以CryptoAPI創建密碼。這個用於硬件驅動器加密。然而,並不是所有的文件系統都支持。

  下面用戶可以啓用"DRBD Distributed Replicated Block Device support"(譯註:Linux上的分佈存儲系統)。這個就像網絡RAID1。這些設備擁有設備文件/dev/drbdx。這些設備通常被用於集羣,這裏集羣中的每臺計算機都有一個從主單元鏡像過來的存儲單元。這意味着每臺計算機的硬盤是位於組中心計算機硬盤的鏡像拷貝。集羣是一組計算機扮演着一臺大型強力單元的角色。然而,每個集羣都有一臺控制計算機稱爲主節點。餘下的計算機是從節點。

  DRBD支持用於測試IO錯誤處理的故障注射(DRBD fault injection)。記住,故障注射就是使設備/軟件認爲發生了一個錯誤,因此開發者可以測試硬件/軟件如何處理錯誤

  如果內核要成爲網絡塊設備的客戶端,那麼啓用這個特性(Network block device support)。第一個設備文件是/dev/nd0。網絡塊設備是通過網絡訪問的遠程存儲單元。

  直接連接SSD到PCI或者PCIe需要這個驅動(NVM Express block device)。

  用這個特性允許將單獨的SCSI OSD(object-based storage,基於對象的存儲)對象作爲塊設備(OSD object-as-blkdev support)。

  下一個驅動是"Promise SATA SX8 support"。這個驅動用於Promise公司(Promise Technology Inc.)生產的SATA控制器。

  Linux允許將一部分內存作爲塊設備(RAM block device support)。這通常見與完全運行於內存上的Linux的live發行版。Linux的live發行版會卸載光盤並接着加載到內存中,所以在嘗試一個新的操作系統或者修復另一個系統時不會傷害到已安裝的系統。

  下一個選項允許用戶輸入"Default number of RAM disks"(默認RAM磁盤數量)。

  "Default RAM disk size"(默認RAM磁盤大小)可以以KB設置大小。

  內核可以支持在內存設備的XIP文件系統作爲塊設備(Support XIP filesystems on RAM block device)。這個特性會增大內核的大小。 XIP (eXecute In Place)文件系統是一個允許可執行文件在相同的文件系統上存儲數據而不必像其他應用一樣利用內存。在一個駐留在內存上的live版linux系統上運行可執行文件時需要這個文件系統。

  下面,內核可以支持"Packet writing on CD/DVD media"。(CD/DVD刻錄機支持.)

  內核開發者可以設置最大活躍併發包數量(Free buffers for data gathering)。大的數字會以內存的消耗爲代價加速寫入性能。一個包會消耗大約64KB。

  Linux內核可以使用可擦寫光盤作爲緩存空間(Enable write caching)。這個特性仍然是試驗性質。

  下面的特性允許通過以太網線纜使用ATA規範(ATA over Ethernet support)。

  下面的驅動允許虛擬塊設備創建爲virtio(Virtio block driver)。virtio是IO虛擬化平臺。

  一些非常老的硬盤還要一個特殊的驅動(Very old hard disk (MFM/RLL/IDE) driver)。

  這裏有一個驅動用於先前提到的Rados設備(Rados block device (RBD))。

  下面是一個特殊的設備驅動(IBM FlashSystem 70/80 PCIe SSD Device Driver)。

  現在,我們可以進入雜項設備。第一個設定是啓用/禁用電位器(Analog Devices Digital Potentiometers )。

  如果電位器在I2C總線上,那麼就啓用這個(support I2C bus connection)。

  如果電位器是連接到SPI總線,那麼需要這個驅動(support SPI bus connection)。

  注意:Linux內核支持很多傳感器因爲Linux內核經常用於天氣設備和機器人。

  這個驅動用於IBM RSA(Condor)服務處理器(Device driver for IBM RSA service processor)。

  內核同樣支持PCI Sensable PHANToM設備驅動(Sensable PHANToM (PCI))。

  這個驅動指引不同來自並行追蹤接口(Parallel Trace Interface (PTI))的追蹤數據發往Intel Penwell PTI口 (Parallel Trace Interface for MIPI P1149.7 cJTAG standard)。這個被指領的數據用於調試目的。

  一些帶有IOC4芯片的SGI IO控制器需要這個驅動(SGI IOC4 Base IO support)。SGI IO是由SCI管理的輸入/輸出設備。IOC4芯片控制着許多由這些設備執行的任務。這是一個基礎驅動。其他對這些設備的驅動依賴於這個驅動。

  這裏有很少的TI閃存媒體適配器驅動在Linux內核中,(TI Flash Media interface support) 和(TI Flash Media PCI74xx/PCI76xx host adapter support)。

  這個驅動("Integrated Circuits ICS932S401")用於ICS932S401時鐘控制芯片。

  Atmel同步串行通信外設(Synchronized Serial Communication peripheral (SSC))有一個驅動在內核中(Device driver for Atmel SSC peripheral)。這個設備提供點對點的設備間的串行連接。

  "Enclosure Services"特性支持硬盤托架。

  這是對於CS5535/CS5536芯片的定時器驅動(CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT) support)。

  這個驅動讓應用可以與HP工業標準服務器中的iLO管理處理器通信(Channel interface driver for the HP iLO processor)。"iLO"代表的是"Integrity Integrated Lights-Out".iLO允許遠程服務器管理。

  Linux內核支持ALS APDS9802光敏傳感器(Medfield Avago APDS9802 ALS Sensor module)。一些其他支持的傳感器包括:


Intersil ISL29003 ambient light sensor 
Intersil ISL29020 ambient light sensor 
Taos TSL2550 ambient light sensor 
ROHM BH1780GLI ambient light sensor 
BH1770GLC / SFH7770 combined ALS - Proximity sensor 
APDS990X combined als and proximity sensors

  注意:如果內核是爲廣泛的計算機編譯的話,大多數驅動應該以模塊形式加入。

  Linux甚至可以使用"Honeywell HMC6352 compass"(一種電子羅盤)。

  內核同樣支持"Dallas DS1682 Total Elapsed Time Recorder with Alarm"。(一種運行時間記錄儀)

  16位的數模轉換器通過這個驅動支持(Texas Instruments DAC7512)。

  "VMware Balloon Driver"將客戶機操作系統不需要的物理內存頁交給需要那些需要的。

  這裏有兩個不同的壓力傳感器(BMP085 digital pressure sensor on I2C) 和 (BMP085 digital pressure sensor on SPI)。

  Intel輸入/輸出集線器(Intel Input/Output Hub (IOH))同樣在內核中支持(Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB)。具體地說,這個是Intel Topcliff芯片組的PCH PHUB(Platform Controller Hub Packet Hub)

  "FSA9480 USB Switch"是檢測設備何時插入的檢測器。

  下一個選項允許比特流配置(Lattice ECP3 FPGA bitstream configuration via SPI)。

  Silicon微控制器使用Silicon實驗室C2端口,這需要一個特殊的驅動(Silicon Labs C2 port support)。

  再說一次,繼續留意下一篇文章因爲我們還有更多的要做。

  

  歡迎來享受Linux內核配置系列下一部分。如你所猜到的那樣,內核支持大量不同的硬件、協議和特性。

  下一組我們要討論的特性是"EEPROM support"。電可擦除可編程只讀存儲器(Electrically Erasable Programmable Read-Only Memory)是一種掉電或者意外關閉後不會擦除內容的存儲器。

  內核支持在I2C卡上的EEPROM芯片包括FRAMs、ROMs和SRAMs (I2C EEPROMs / RAMs / ROMs 來自多數供貨商)。FRAM(同樣也稱作FeRAM是一種使用鐵電原理而不是電介質存儲數據的隨機訪問存儲芯片)。ROM芯片是隻讀(Read Only Memory)芯片。SRAM是靜態而不是動態存儲器就像DRAM。DRAN必須被刷新以保留數據而SRAM不需要刷新。然而,兩者都會在電源關閉或者丟失時失去數據。

  內核支持SPI總線的EEPROM(SPI EEPROMs from most vendors)。串行外設接口總線(Serial Peripheral Interface Bus (SPI))是一個缺乏錯誤檢測的全雙工總線系統。

  老式的I2C EEPROM芯片需要一個除了上面I2C驅動之外的驅動(Old I2C EEPROM reader)。I2C總線用於嵌入式系統和電話,由於它用的是低速總線協議。

  這個特性用來防止Maxim的可編程EEPROM變成只讀模式(Maxim MAX6874/5 power supply supervisor)。特別地,這驅動提供對這個芯片的更好的電源管理。

  這裏還有一個驅動"EEPROM 93CX6 support","Microwire EEPROM 93XX46 support"和"ENE CB710/720 Flash memory card reader support"。

  和其他內核特性一樣,這裏有一個對於EEPROM的調試特性(Enable driver debugging)。再說一次,爲了更好的性能,禁用調試特性。

  下面,我們有一個TI特性(Shared transport core driver)。這個驅動提供對於BT/FM和GPS芯片的傳輸協議。

  下面的驅動支持I2C LIS3LV02Dx加速度計(STMicroeletronics LIS3LV02Dx three-axis digital accelerometer (I2C))。設備提供的數據存儲在/sys/devices/platform/lis3lv02d。

  下一步, Linux提供了下載固件到Altera的FPGA的模塊(Altera FPGA firmware download module)。FPGA就是現場可編輯邏輯門陣列(field-programmable gate array)。它們是可編程集成電路。

  Intel Management Engine Interface提供Intel芯片的安全和其他服務。

  "ME Enabled Intel Chipsets"可以支持MEI。MEI是"Management Engine Interface"(管理引擎接口)。這個驅動支持有MEI服務的芯片組。

  "VMware VMCI Driver"是一種用於客戶機和宿主機中繼通信的高速虛擬設備。VMCI代表的是"Virtual Machine Communication Interface"(虛擬機通信接口)。

  下面, "ATA/ATAPI/MFM/RLL support"可以啓用/禁用。MFM (Modified Frequency Modulation)是一種特殊的編碼軟驅位的方法。然而,這並不工作在所有的軟驅上。MFM使用RLL(Run-Length Limited)編碼制式。RLL通過有帶寬限制的系統通信轉換數據。ATAPI是先前提過的"ATA Packet Interface",同時ATA也在討論接口標準的時候討論過。

  現在我們將討論SCSI支持。小型計算機接口(Small Computer System Interface (SCSI))是另外一種SATA的接口標準。USB和火線設備使用SCSI協議。

  第一個SCSI設定關於"RAID Transport Class"。這允許RAID使用SCSI標準。

  爲了使用SCSI目標,啓用這個特性(SCSI target support)。

  如果系統會運行舊的Linux應用,系統可能需要"legacy /proc/scsi/ support"。這會在/proc/scsi創建SCSI文件。

  爲了支持SCSI磁盤,啓用下一個特性(SCSI disk support)。這是一個通用驅動。

  爲了支持SCSI磁帶,啓用這個特性(SCSI tape support)。這是一個通用驅動。SCSI磁帶驅動器在像磁帶的磁性條上記錄數據。

  OnStream SCSI磁帶需要這個驅動而不是前面提到SCSI通用驅動SCSI OnStream SC-x0 tape support)。

  "對於SCSI CDROM support",一些CD-ROM使用SCSI協議。

  下面, 用戶可以啓用"Enable vendor-specific extensions (for SCSI CDROM)"。

  這是一個對於大量不同SCSI設備的通用驅動(SCSI generic support)。這主要用於SCSI掃描儀和其他不被上面提到的SCSI驅動支持的設備或者那些之後會討論的設備。

  一些SCSI點唱機需要這個SCSI驅動(SCSI media changer support)。

  Linux內核提供"SCSI Enclosure Support"。SCSI附件是一種管理電源和製冷SCSI設備同時提供不關於數據的服務的設備。

  Linux內核應該設置爲每個SCSI設備搜索全部的邏輯單元號(Logical Unit Numbers (LUN))(Probe all LUNs on each SCSI device)。LUN是SCSI地址。

  這有額外的對於SCSI的錯誤報告(Verbose SCSI error reporting (kernel size +=12K))。這會明顯地增加內核的大小。

  這裏還有一個SCSI日誌系統(SCSI logging facility)。

  爲了增強你的系統,啓用這個特性會允許SCSI在系統啓動時就被探測到而不是先啓用再探測(Asynchronous SCSI scanning)。大多數系統可以一次執行這兩個任務,因此爲什麼允許這項? 對於那些連接了很多SCSI設備的硬件,這個會明顯加快啓動速度。

  下面,"Parallel SCSI (SPI) Transport Attributes"(傳統的並行SCSI)允許每個SCSI設備發送傳輸信息給sysfs。一些系統需要這個特性。

  下面的特性和上面提到的一樣,但是發送光纖通道設備的傳輸信息(FiberChannel Transport Attributes)(光纖通道接口)。光線通道設備使用SCSI。

  下面用戶可以啓用/禁用"SCSI target support for FiberChannel Transport Attributes"(爲光纖通道添加"target"模式驅動)。

  iSCSI設備和SAS設備的傳輸數據可以導出到sysfs(iSCSI Transport Attributes)和SAS Transport Attributes)。SAS代表的的是"Serial Attached SCSI"(串行鏈接SCSI)。

  下面,ATA支持被加入libsas(ATA support for libsas (requires libata))。注意配置工具提示需要libata。爲了滿足這個需求,啓用ATA支持。更多情況下,配置工具已經或者將會會你這麼做,但是請無論再檢查一下。libsas和libata是相應的支持SAS和ATA的庫。

  下面的特性允許SAS接口接收SMP幀(Support for SMP interpretation for SAS hosts)。這加入了一個SMP解釋器到libsas中。然而,這不會增加內核的尺寸。SMP幀允許所有在多CPU系統上的處理器訪問SAS設備。

  SRP可以發送傳輸的數據給sysfs(SRP Transport Attributes)。SRP代表SCSI RDMA協議(SCSI RDMA Protocol)。RDMA代表遠程直接內存訪問(Remote Direct Memory Access)。這意味着SRP是一個用來訪問連接到另外一臺計算機的SCSI設備的數據的協議。

  下一步,用戶可以啓用"SCSI target support for SRP Transport"。

  可以啓用底層SCSI驅動(SCSI low-level drivers)。這提供了很多基礎驅動。

  在這之後,用戶可以啓用/禁用"PCMCIA SCSI adapter support"。這個適配器允許SCSI設備連接到PC卡上。

  這裏有一些驅動用於特殊的適配器- (Future Domain PCMCIA support)、(Qlogic PCMCIA support) 、(Symbios 53c500 PCMCIA support)。

  多路徑安裝的設備需要這個特性(SCSI Device Handlers)。這用在每個節點都需要一個到SCSI存儲單元的直接路徑的集羣中。

  下一步,"OSD-Initiator library"(OSD啓動庫)可以啓用。這是一個提供了補丁、OSD協議、和針對SCSI設備的T10協議的SCSI驅動。 OSD代表的是基於對象的存儲設備(Object-based Storage Device);下一段會討論得更多。

  這個特性生成一個SCSI上層用於測試和管理/dev/osdx設備(OSD Upper Level driver)。exofs使用這個驅動用於掛載基於OSD的文件系統。OSD設備不像其他存儲單元一樣使用塊的存儲設備。相反地,OSD設備存儲數據在稱之爲對象的容器裏。exofs曾經稱作OSDFS。

  如果啓用了它,OSD特性提供了調試工具(Compile All OSD modules with lots of DEBUG prints)。

  如今,我們可以討論串行ATA和並行ATA特性和驅動了。首先啓用/禁用用於調試的第一個特性(Verbose ATA error reporting)。

  下一步,用戶應該對於ATA設備啓用高級配置及電源接口特性(ATA ACPI Support)。這允許內核在SATA設備上更有效地管理電源使用。

  內核包含了對於"SATA Zero Power Optical Disc Drive (ZPODD) support"的驅動。這會在不使用時關閉SATA光盤驅動器(SATA optical disc drives (ODD))。這節約了能源以及減少損耗。

  貼士:即使你在編譯一個高性能的內核,嘗試啓用所有的電源管理特性。則減少了電源消耗、操作開銷、熱量產生(熱量會降低性能),以及老化。

  SATA端口複用器需要這個驅動(SATA Port Multiplier support)。端口複用器是一個擁有許多端口但是自己僅需插入一個端口的設備。舉例來說,如果一個硬件有一個SATA口,但是還需要更多的口,在這個口上插入端口複用器。現在設備可以有許多SATA口了。

  下一個驅動用於AHCI SATA(AHCI SATA support)。高級主機控制器接口(Advanced Host Controller Interface (AHCI))是一種SATA總線適配器的操作標準。

  對於要在Soc硬件上支持AHCI SATA設備,必須啓用這個驅動(Platform AHCI SATA support)。Soc代表片上系統(System-on-a-Chip)。

  下面是一些特殊設備的驅動


Initio 162x SATA support 
ACard AHCI variant (ATP 8620) 
Silicon Image 3124/3132 SATA support

  再說一次,等着下一篇精彩的文章。

  

  你好!這是Linux內核系列的下一篇,我們仍將配置ATA設備並將進入邏輯卷/存儲。

  "ATA SFF support (for legacy IDE and PATA)"應該啓用,因爲這擴展了ATA的能力。

  爲了支持Pacific Digital的ADMA控制器,應該啓用"Pacific Digital ADMA support"。

  "Pacific Digital Serial ATA QStor support"(串口ATA支持)在下一個驅動中支持

  Promise的SATA SX4設備在內核中支持(Promise SATA SX4 support (Experimental))。

  可以BMDMA的SFF ATA控制器需要這個驅動(ATA BMDMA support)。BMDMA代表總線主控直接內存訪問(BMDMA stands for Bus-Master Direct Memory Access)。

  下面,這個驅動對不同的SATA和PATA控制器提供支持Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support)。

  這裏有其他的特定設備驅動(Calxeda Highbank SATA support)、(Marvell SATA support)、(NVIDIA SATA support)、(Promise SATA TX2/TX4 support)、(Silicon Image SATA support)還有(SiS 964/965/966/180 SATA support)、(ServerWorks Frodo / Apple K2 SATA support)、(ULi Electronics SATA support)、(VIA SATA support)。。。由於有很多SATA/PATA控制器設計不同,一個通用驅動無法使用在這些設備上。

  接下來,這個驅動支持PC卡上的ATA設備除非有特定設備管理硬件的驅動(PCMCIA PATA support)。

  在這之後,有一個通用PATA驅動用於管理其他不被先前驅動支持的PATA設備 (Generic platform device PATA support)。

  PATA設備的電源消耗由這個ACPI驅動管理(ACPI firmware driver for PATA)。強烈建議對系統上所有的硬件啓用ACPI。雖然這會增加內核的大小,但是ACPI會增強性能。

  "Generic ATA support"(通用ATA支持)由這個驅動提供。

  古老的ISA、VLB和PCI總線PATA設備可以通過這個驅動支持(Legacy ISA PATA support (Experimental))。這個古老支持使用新的ATA層。

  這組特性包含了許多對於RAID和LVM能力,可見下面的特性選項(Multiple devices driver support (RAID and LVM))。

  有趣的事實:內核是由C和彙編寫成的。

  這個驅動允許RAID和LVM組合在一起。這用於使幾個LVM卷使用RAID。分區被組合成邏輯塊設備,然後形成RAID設備。

  許多用戶會希望RAID可以在啓動時偵測到(Autodetect RAID arrays during kernel boot)。如果你沒有RAID,那麼不要啓用這個特性。不然,啓動處理會比原先希望的慢上幾秒。

  注意:當配置Linux內核時,最好按照"use it or lose it"(非用即失)的原則。那就是,如果你不用它,那就禁用這個特性。

  硬盤分區可以通過這個驅動加在一起(Linear (append) mode)。

  下面的驅動加入RAID-0支持帶邏輯塊設備中(RAID-0 (striping) mode)。接着還有 (RAID-1 (mirroring) mode)、(RAID-10 (mirrored striping) mode)和(RAID-4/RAID-5/RAID-6 mode)。

  MD框架需要多路徑支持(Multipath I/O support)。MD框架就是多設備(Multi Device)框架,它將多臺設備作爲一個單元管理。舉例來說,將許多存儲單元的分區組合起來可以使多個設備就像一個那樣。多路徑支持是用於使用處理虛擬的有多個地址的"單個設備"。因爲單存儲單元物理上有多件物理設備,所以它有多個硬件地址。

  使用這個調試驅動,可以測試更大的多磁盤存儲單元的bug(Faulty test module for MD)。

  "Device mapper support"是一個用來映射邏輯扇區的卷管理器。LVM使用扇區映射。

  如果啓用的話,設備映射器可以有調試特性(Device mapper debugging support)。

  如果需要,邏輯設備可以設置加密數據(Crypt target support)。這個特性允許用戶將來加密那些存儲設備。

  只有啓用了這個特性,才能使用邏輯存儲單元的快照功能(Snapshot target)。

  "Thin provisioning"(自動精簡配置)允許邏輯卷設置成比組成邏輯卷的物理設備擁有更大的存儲容量(Thin provisioning target)。這個特性同樣爲這類設備提供了快照功能。這額外的虛擬數據空間無法馬上使用。這個特性的意義是允許用戶在將來增加物理存儲單元並且節約了配置邏輯塊設備的時間。

  用這個可以調試"Thin provisioning" (Keep stack trace of thin provisioning block lock holders)。

  塊設備性能的提升可以通過移動更多的常用數據到更快的存儲單元中(Cache target (EXPERIMENTAL))。

  卷管理器可以製成鏡像邏輯卷(Mirror target)。

  設備映射器(Device-mapper (dm))單元支持映射RAID1、RAID10、 RAID4、RAID5和RAID6(RAID 1/4/5/6/10 target)。

  設備映射器(device-mapper)日誌可以鏡像到用戶空間(Mirror userspace logging)。

  "Zero target"是一個忽視寫入並返回讀取爲零的設備。

  接下來,卷管理器應該對硬件有多路徑支持(Multipath target)。

  這個驅動會發現最有效的到存儲設備的路徑來讀取和寫入(I/O Path Selector based on the number of in-flight I/Os)。

  下面的一個驅動和以上相同,但是會尋找最快路徑(I/O Path Selector based on the service time)。

  如果一個邏輯捲上的物理存儲單元正忙,如果可能的話,這個特性會允許讀取/寫入到另一個物理捲上。

  udev可以生成設備管理器操作事件DM uevents)。udev是/dev的設備管理器。

  爲了測試軟件/硬件對偶爾失敗的輸入/輸出任務的邏輯設備如何反映,啓用這個調試特性(Flakey target)。

  邏輯卷可以創建爲一個用於驗證另一個邏輯分區數據的只讀存儲單元(Verity target support)。

  注意:如果你喜歡我的文章,並且如果你有的賬號,請在我的文章上點擊"Like"。同樣,再次分享這篇文章在Google、Twitter和/或者Facebook上。

  ConfigFS和TCM存儲引擎可以通過這個設置啓用(Generic Target Core Mod (TCM) and ConfigFS Infrastructure)。ConfigFS是一個基於內存的文件系統。

  有趣的事實:Linux內核沒有"main()"函數。在程序中,main()被依賴於kernel的libc調用。內核沒有main()函數是因爲libc將無法啓動內核。如果內核的確有main()函數,那麼我們就有一個"雞或者蛋"的問題-誰先來?另外,內核的入口點用匯編寫成,這並不使用main()函數。

  下面,"TCM/IBLOCK Subsystem Plugin for Linux/BLOCK"可以禁用或者啓用。

  接着"TCM/FILEIO Subsystem Plugin for Linux/VFS"可以啓用/禁用。

  再次,還有兩個TCM特性 - (TCM/pSCSI Subsystem Plugin for Linux/SCSI) 和 (TCM Virtual SAS target and Linux/SCSI LDD fabric loopback module)

  對於ConfigFS的" iSCSI Target Mode Stack"在這個驅動中支持( iSCSI Target Mode Stack)。

  下一步,可以啓用/禁用"FireWire SBP-2 fabric module"。這允許一臺計算機作爲一個硬盤連接到另一臺計算機上。

  在這之後,我們可以配置"Fusion Message Passing Technology (MPT) device support"。

  在那個標題下的第一個選項是一個用於並口適配器的SCSI支持的驅動(Fusion MPT ScsiHost drivers for SPI)。

  SCSI同樣也可以支持光纖通道主機適配器(Fusion MPT ScsiHost drivers for FC)和/或SAS適配器(Fusion MPT ScsiHost drivers for SAS)。

  下一步,用戶可以設置"Maximum number of scatter gather entries"。一個低的數值可以減少每個控制器實例的內存消耗。

  下一個驅動提供了ioctl系統調用來管理MPT適配器(Fusion MPT misc device (ioctl) driver)。

  光纖通道端口可以用這個驅動支持IP LAN的流量(Fusion MPT LAN driver)。

  我可以讀到你們的想法-你們會想到對於這個還有另外一篇文章。是的,你們想對了。請繼續關注這個系列的下一篇文章。

  如果你喜歡這個系列,請在和/或者Google+上發表評論告訴我你有多喜歡這個系列,並且告訴我你想在今後的文章中希望看到的方面。或者給我發郵件)。謝謝!

  想要更多地瞭解作者,請檢查下面的簽名欄中的鏈接(譯註:原文所在論壇有)

  如果你已經完整地閱讀了這篇文章,那麼你應該已經看到單詞"Facebook"三次了。如果沒有,你沒有閱讀全部文章。

  單詞"Facebook"在這段中,上一段,和一個註解中。我打賭你閱讀了上面的段落而沒有通讀文章來試圖尋找第三個單詞實例。

  

  歡迎進入Linux內核系列文章的下一篇!我們正在接近配置過程的終點。在這篇文章中,我們將會討論固件驅動和文件系統驅動。

  這個分類中的第一個驅動是尋找啓動盤(BIOS Enhanced Disk Drive calls determine boot disk)。有時,Linux不會知道哪個盤是啓動盤。這個驅動允許內核詢問BIOS。Linux接着在sysfs上存儲信息。Linux需要知道這些來設置bootloader。

  即使BIOS EDD服務被編譯進了內核,這個選項可以設置這些服務不激活(Sets default behavior for EDD detection to off )。EDD代表的是"Enhanced Disk Drive"(增強磁盤驅動器)。

  當使用kexec加載不同的內核時,性能可以通過固件提供的內存映射提升(Add firmware-provided memory map to sysfs)。

  "Dell Systems Management Base Driver"通過sysfs接口提供了Linux內核對於Dell硬件的更好的控制。

  啓用這個驅動可以通過/sys/class/dmi/id/訪問硬件的信息(Export DMI identification via sysfs to userspace)。DMI代表的是Desktop Management Interface(桌面管理接口)。DMI管理硬件的組件和訪問硬件的數據。BIOS中數據的接口和硬件由SMBIOS(System Management BIOS)規範調節。

  從DMI得到的原始數據表可以通過這個驅動訪問(DMI table support in sysfs)。

  爲了從iSCSI驅動器中啓動,啓用這個驅動(DMI table support in sysfs)。

  最後的驅動是一組"Google Firmware Drivers"。這些驅動用於Google特定的硬件。除非你爲Google工作並且需要在硬件上使用Linux或者你在爲一臺從Google偷來的電腦編譯內核,否則不要啓用它。

  下面,我們可以配置內核的文件系統支持。

  "Second extended fs support"驅動用於EXT2文件系統。

  

  "Ext2 extended attributes"提供了原生文件系統不支持的額外的元數據的使用。

  "Ext2 POSIX Access Control Lists"增加了額外的非原生的權限模型。

  "Ext2 Security Labels"增強了由SELinux提供的安全性。

  啓用"Ext2 execute in place support"允許可執行文件在當前的位置執行而不必在頁緩存中執行。

  這個驅動提供EXT3文件系統(Ext3 journaling file system support)。

  "Default to 'data=ordered' in ext3"驅動設置數據的排序模式爲"Ordered"。這種處理方式爲日誌和寫入工作。數據排序在這篇文章中解釋 -

  "Ext3 extended attributes"提供了原生文件系統不支持的額外的元數據使用。再說一次,接下來的EXT3的驅動/特性與EXT2相同 - "Ext3 POSIX Access Control Lists" 和 "Ext3 Security Labels"。同樣,對接下來的EXT4也是相同的 - "Ext4 POSIX Access Control Lists"、"Ext4 Security Labels" 和 "EXT4 debugging support"。

  EXT3和EXT4支持日誌塊設備調試(JBD debugging support),(JBD2 debugging support)。

  下面的驅動提供Reiser文件系統支持(Reiserfs support)。

  Reiser文件系統也有調試(Enable reiserfs debug mode)。

  內核可以存儲ReiserFS統計在/proc/fs/reiserfs (Stats in /proc/fs/reiserfs)。

  下面的Reiser驅動/特性與EXT2/3/4相同 - ReiserFS extended attributes", "ReiserFS POSIX Access Control Lists" 和 "ReiserFS Security Labels".

  Linux內核同樣支持JFS,同時也包含了不同的特性 "JFS filesystem support"、 "JFS POSIX Access Control Lists"、"JFS Security Labels"、"JFS debugging" 和 "JFS statistics".

  再說一次,XFS可以通過啓用這些驅動/特性支持 - "XFS filesystem support"、"XFS Quota support"、"XFS POSIX ACL support"、"XFS Realtime subvolume support" 和 "XFS Debugging support"。

  "Global FileSystem 2"可以被內核支持(GFS2 file system support)。這個文件系統用於在集羣中共享存儲。

  "GFS2 DLM locking"驅動提供了GFS2的分佈式鎖管理(DLM)

  "Oracle Cluster FileSystem 2"被內核支持(OCFS2 file system support)。這個文件系統用於在集羣中共享存儲。

  "O2CB Kernelspace Clustering"提供了OCFS2文件系統的不同服務。

  "OCFS2 Userspace Clustering"允許集羣棧在用戶空間執行。

  "OCFS2 statistics"驅動允許用戶得到關於文件系統的統計信息。

  像大多樹Linux內核一樣,OCFS2提供日誌(OCFS2 logging support)。這可能被用來監視錯誤或者調試目的。

  "OCFS2 expensive checks"驅動以性能爲代價提供了存儲一致性檢測。一些Linux用戶建議只有在調試目的在才啓用它。

  Linux內核同樣包含了新的B樹文件系統;這個驅動提供了磁盤格式化程序(Btrfs filesystem Unstable disk format)。BTRFS仍在開發中並被計劃某天變的比EXT4更流行。

  "Btrfs POSIX Access Control Lists"提供了額外的原生BTRFS沒有提供的權限模型。

  下面,是一個BTRFS檢測工具(Btrfs with integrity check tool compiled in (DANGEROUS))。由於BTRFS是一個最新在開發中的文件系統,大多數相關軟件還並不穩定。

  Linux系統也支持NIL-FileSystem(NILFS2 file system support)。547/。

  爲了支持一些文件系統使用到的flock()系統調用,啓用這個驅動(Enable POSIX file locking API)。禁用這個去的那個會減少11KB的內核大小。這個驅動提供了文件鎖定。文件鎖定是一個允許進程在某刻讀取文件的過程。這通常用於網絡文件系統,就像NFS。

  "Dnotify support"驅動是一個古老的文件系統通知系統,它提醒文件系統上的事件的用戶空間。它和它的繼承者被用於監控應用的文件系統。某個應用告訴守護進程需要監視哪些事件。不然,每個用戶空間應用需要它們自己完成這個任務。

  記住,Dnotify是一個古老的系統,那麼什麼是新的通知系統?它就是由這個驅動提供的Inotify (Inotify support for userspace)。

  一個可選的通知系統是fanotify (Filesystem wide access notification)。Fanotify與Inotify一樣,但是fanotify比Inotify傳遞更多的信息到用戶空間中。

  用這個驅動Fanotify可以檢測權限(fanotify permissions checking)。

  對於用戶想要劃分存儲空間的系統需要 "Quota support"。

  接下來的驅動允許通過netlink報告磁盤配額警告和信息(Report quota messages through netlink interface)。netlink是一個用於與內核通信的用戶空間的套接字接口。

  配額信息同樣可以發送到控制檯(Print quota warnings to console (OBSOLETE))。

  這個驅動允許配額系統執行額外的完整性檢查(Additional quota sanity checks)。在計算機技術中,完整性檢查是檢測由於不良編程導致的錯誤。文件和輸出都被檢查來確保數據正確而不是以奇怪的方式構造。

  一些舊的系統使用老的配額系統但希望在升級新內核時保留舊的配額系統。可以通過啓用這個來容易解決(Old quota format support)。許多讀者可能想要知道爲什麼一些人想要保留舊的配額系統而不是更新新的。好的,想想一下你是一家很大公司的IT部門的經理,公司有許多服務器運行着非常重要的任務。當你可以繼續使用現在工作的很好的系統,你想要創建並配置一個新的(也可能很大)的文件系統麼? 通常上,對於計算機,堅持下面的原則 - 如果它沒有壞或者不會導致安全問題,不要去修復它。

  用這個驅動,新的配額系統支持32位UID和GID(Quota format vfsv0 and vfsv1 support)。

  爲了自動掛載遠程存儲單元,啓用這個驅動(Kernel automounter version 4 support)。

  這個驅動支持FUSE文件系統(FUSE (Filesystem in Userspace) support)。用戶空間文件系統(FUSE)支持任何用戶創建他們自己的文件系統並在用戶空間內使用。

  一個特殊的FUSE擴展可以用於在用戶空間使用字符設備Character device in Userspace support)。

  下一篇文章中,我們會繼續討論緩存,光盤文件系統,Linux上的FAT32和其他有趣的文件系統話題。謝謝!

  

  你好! 準備好讀另一篇很酷的Linux內核文章了麼?

  接下來,在這個任務中,我們可以啓用/禁用"Fusion MPT logging facility"。MPT代表"Message Passing Technology"(消息傳遞技術)。Fusion驅動是由LSI Logic公司開發。MPT一種進程間使用的特定消息策略。這個技術是同步的意味着進程將會等待所需的消息。

  在這之後,如果計算機處理擁有火線端口就應該啓用"FireWire driver stack"。如果沒有,那麼就沒有必要去啓動一個不會使用到的火線驅動。火線很像USB。不過在協議、速度、物理形狀和端口布局上不同。通常上,蘋果設備使用火線和USB。一些PC有火線端口,但是不像USB口那樣普及。

  一些火線控制器使用OHCI-1394規範(OHCI-1394 controllers)。如果是這樣,啓用這個驅動。

  爲了使用火線存儲設備,啓用下一個驅動(Storage devices (SBP-2 protocol))。這個驅動提供了火線存儲單元與火線總線通信的協議(the card with the attached FireWire ports)。一些火線掃描儀同樣需要這個驅動。

  IPv4可以用在火線端口(IP networking over 1394)。IEEE 1394或者簡單的"1394"就是火線。使用IPv4在火線多播有侷限。

  "Nosy"是"FireWire PCILynx"卡上的流量監控(Nosy - a FireWire traffic sniffer for PCILynx cards)。

  下一步,可以支持I2O設備(I2O device support)。"Intelligent Input/Output (I2O)"(智能輸入/輸出)總線使用硬件和操作系統層的驅動。硬件驅動(hardware drivers (HDM))並不特定與任何操作系統而OS驅動(OS drivers (OSM))必須在目標操作系統上使用。OSM可以與任何HDM通信。I2O卡/總線有一個IOP- 輸入/輸出處理器(Input/Output Processor)。由於主CPU處理更少的數據,所以加速了系統。

  只在缺乏SUN I2O控制器的系統上啓用"Enable LCT notification"。I2C SUN固件不支持LCT通知。 如果目標是RAID,Adaptec I2O控制器需要下一個驅動(Enable Adaptec extensions)。

  64位的直接內存訪問可以在Adaptec I2O控制器上啓用(Enable 64-bit DMA)。

  如果允許,可以配置I2O設備(I2O Configuration support)。這個特性主要用在RAID設定中。

  可以爲I2O啓用支持老的輸入/輸出控制(Enable ioctls (OBSOLETE))。

  可以啓用I2O總線適配器的OSM軟件(I2O Bus Adapter OSM)。這組OSM被用來尋找新的在其他適配器末端的I2O設備。

  下面,可以啓用I2O塊設備上的OSM(I2O Block OSM)。I2O硬件上的RAID控制器需要這個OSM。

  下面的OSM用於I2O控制器上的SCSI或者光纖通道設備。

  如果啓用了(I2O /proc support),可以通過/proc讀取I2O設備的信息。

  在啓用/禁用了I2O特性,我們可以繼續其他的內核特性。下面,我們看到"Macintosh device drivers"。這隻對蘋果設備有用。PC的Linux內核不應該有任何這些驅動啓用。然而,正如許多說法都有例外一樣。一些PC用戶可能會使用蘋果鼠標、鍵盤和/或者一些其他的蘋果設備。再說一次,最好徹底地理解需求和正在開發的內核。

  下一步,我們有一個用於網絡的驅動(Network device support)。X11和其他的Linux軟件不依賴於這個驅動,所以如果內核不會連接到另一臺計算機、因特網、內聯網或者網絡,那麼這個特性可以安全地禁用。

  下面的驅動就像上面,但是特定於核心驅動(Network core driver support)。

  這個驅動支持Etherchannel(Bonding driver support)。"bonding"是兩條或者更多的以太網通道的融合。這也成爲中繼。

  使用這個驅動(Dummy net driver support),可以在Linux中設置一個虛擬網絡。虛擬網絡(dummy network)就像網絡中的/dev/null。任何發送給虛擬網絡的數據都會永久消失,因爲它會發往/dev/null。IP地址沒有設置。用戶可以定義他們的網絡相當於/dev/null。

  下一步,可以支持和EQL(EQL (serial line load balancing) support)。這允許兩臺計算機使用SLIP或者PPP協議在兩條串行連接上通信。

  光纖通道是一種用於連接存儲設備到計算機的快速串行協議(Fibre Channel driver support)。

  TMII收發器需要這個驅動(Generic Media Independent Interface device support)。MII是一種用於最高速度爲100Mbit/s以太網的接口。以太網線纜用於連接到PHYceiver,這是一種以太網收發器。

  爲了通過虛擬接口組織許多以太網設備,需要"Ethernet team driver support"。

  "MAC-VLAN support"允許用戶在特定的MAC地址和某個接口上映射數據包。

  TAP字符設備可以由MAC-VLAN接口生成(MAC-VLAN based tap driver)。TAP設備從內核中獲取數據包,這樣它們就可以被送往其他地方。

  下一個特性允許虛擬vxvlan接口在3層網絡上創建2層網絡(Virtual eXtensible Local Area Network (VXLAN))。這通常用於隧道虛擬網絡。

  內核發送給網絡的消息可任意通過這個特性記錄下來(Network console logging support)。除非記錄網絡信息對你很重要時才啓用它。禁用這個特性會增強性能。

  這個特性允許不同參數被改變(Dynamic reconfiguration of logging targets)。這些參數包括端口號、MAC地址、IP地址和其他一些設定。

  如果用戶空間程序希望使用TAP設備,那麼啓用這個特性可以允許這樣的活動(Universal TUN/TAP device driver support)。

  這個驅動用於本地以太網隧道(Virtual ethernet pair device)。

  "Virtio network driver"用於QEMU、Xen、KVM和其他虛擬機。

  下一步,可以啓用"ARCnet support"。ARCnet是一種類似令牌環本地局域網絡(Local-Area-Network (LAN)協議。ARCnet代表"Attached Resource Computer Network"(附加資源計算器網絡)。

  現在,我們進入到"ATM drivers"。ATM代表"Asynchronous Transfer Mode"(異步傳輸模式)。ATM用於電信。

  Marevell以太網交換機芯片需要這個驅動(Marvell 88E6060 ethernet switch chip support)。同樣,這類交換機的芯片同樣需要依賴模型(Marvell 88E6085/6095/6095F/6131 ethernet switch chip support)和(Marvell 88E6123/6161/6165 ethernet switch chip support)。

  現在,我們可以學習關於"Ethernet driver support"。

  首先我們可以啓用/禁用"3Com devices"。接下來允許內核開發者選擇支持哪些3Com設備。

  下一組選項是對於不同的"Adaptec devices"和接下來的"Alteon devices"。

  這些只是特定設備/供應商驅動。通常地,這些驅動被作爲模塊加入。

  在設置了這兩組選項後,接下來還有"AMD devices"和"Atheros devices"。

  注意:請記住內核會運行在哪類硬件上。對於大量不同的設備,或許最好把它們作爲模塊加入

  這裏有不同特定供貨商的設備驅動-"Cadence devices"、"Broadcom devices"、"Brocade devices"、"Chelsio devices"、"Cisco devices"、"Digital Equipment devices"。一些其他的特定設備/供應商驅動遵循它們。

  接下來的驅動並不是特定設備/供應商的 "SLIP (serial line) support"。這個驅動支持SLIP和CSLIP。SLIP(Serial Line Internet Protocol)是一種用於調制解調器和串口的因特網驅動。PPP現在用來代替SLIP。CSLIP是壓縮的SLIP。

  下面,"CSLIP compressed headers"可以啓用用來壓縮TCP/IP頭。CSLIP快於SLIP,但是想要啓用CSLIP,傳輸和接收的計算機都必須理解CSLIP。

  當在惡劣的模擬線路上使用SLIP時,最好啓用"Keepalive and linefill",這會幫助保持連接。

  對於質量差的網絡或者7bit網絡中運行IP而言,最好啓用"Six bit SLIP encapsulation"。

  現在我們可以進入流行的USB系統,但是這些是用於網絡的USB驅動。

  第一個啓用/禁用的USB網絡設備是"USB CATC NetMate-based Ethernet device support"。這是用於10Mbps的USB以太網EL1210A芯片設備。USB設備將會扮演和成爲一個以太網設備即使硬件是USB。

  接下來,除了設備是KLSI KL5KUSB101B芯片組(USB KLSI KL5USB101-based ethernet device support),其他與上面的驅動一樣。

  Pegasus USB是USB轉以太網的適配器/轉換器(USB Pegasus/Pegasus-II based ethernet device support)。

  接下來是另外一個USB轉以太網驅動(USB RTL8150 based ethernet device support)。

  下一篇文章中,我們將繼續配置USB網絡系統。

  

  你好!在這篇Linux系列文章中,我們將繼續配置USB網絡驅動。接着我們將進入輸入設備。

  首先,我們可以啓用/禁用"Multi-purpose USB Networking Framework",這允許連接筆記本到桌面系統上。

  下面,可以啓用/禁用ASIX USB-to-Ethernet適配器驅動(ASIX AX88xxx Based USB 2.0 Ethernet Adapters)。

  那麼,還有一個ASIX適配器驅動(ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet)。

  注意:通常地,最好將適配器驅動作爲模塊加入。

  通信設備類規範(Communication Device Class specification)在這個驅動中提供(CDC Ethernet support (smart devices such as cable modems))。這個規範用於USB調制解調器。Linux系統可以將USB網絡接口識別爲以太網網絡接口並且指定爲"ethX",這裏的"X"是以太設備編號。

  下面是一個與上面類似的規範(CDC EEM support)。CDC EEM代表的是"Communication Device Class Ethernet Emulation Model"(通信設備類以太網仿真模型)。

  CDC網絡控制模型(NCM)同樣有一個驅動提供了規範(CDC NCM support)。

  這個驅動提供了"CDC MBIM (Mobile Broadband Interface Model)"規範同樣也在Linux內核中(CDC MBIM support)。

  下面,有一些供貨商/設備特定驅動用於不同的USB網絡設備和芯片組。

  在這之後,有一個用於USB網絡設備的通用驅動,它不需要任何特殊的驅動(Simple USB Network Links (CDC Ethernet subset))。

  再說一次,還有更多的驅動用於供貨商特定設備。

  有趣的事實:Linux被用於製作James Cameron的電影"泰坦尼克"的特效。

  "CDC Phonet support"是用於使用Phonet的Nokia USB調制解調器。(譯註:Phonet是Nokia開發的面向數據包的通信協議,僅用於Nokia maemo/meego產品)

  現在,我們可以進入使用802.11規範的無線局域網驅動了。

  主要地,這裏有一個供貨商/設備特定驅動列表。

  "SoftLED Support"控制着關於Wifi卡/設備的LED燈。

  一些芯片組支持的SDIO在這個驅動中(Atheros ath6kl SDIO support)。SDIO是用於無線SD卡的SD(Secure Digital)規範的擴展。SDIO代表的是"Secure Digital Input/Output"

  內核開發者可能注意到一些無線設備可以支持QoS。QoS代表"Quality of Service"(服務質量)。這個特性給予網絡傳輸優先級。假設需要通過網絡傳輸兩組數據。只有一個可以先發送。QoS會先發送最重要的數據。

  有趣的事實:技術上來說,Linux並不是一個操作系統。Linux是一種內核而GNU/Linux纔是操作系統。

  WAN卡需要"Generic HDLC layer"。HDLC代表"High-Level Data Link Control"(高級數據鏈路控制)。這是一個數據鏈路層協議。

  原生HDLC可以通過"Raw HDLC support"驅動啓用。

  "Raw HDLC Ethernet device support"驅動允許HDLC層模擬以太網。

  cHDLC驅動提供了一個HDLC的擴展,同樣也稱作Cisco HDLC(Cisco HDLC support)。

  Linux內核同樣也提供了一個HDLC的"Frame Relay support"(幀中繼)驅動。幀中繼是2層協議。

  HDLC同樣支持PPP(Synchronous Point-to-Point Protocol (PPP) support)和X.25(X.25 protocol support)。

  接下來,這個驅動提供了DLCI下的幀中繼(Frame Relay DLCI support)。

  "LAPB over Ethernet driver"創建一個允許用戶在以太網上使用LAPB的點到點連接到另一臺計算機的設備文件。這個設備文件對於第一個此類設備通常是/dev/lapb0。

  用這個驅動,X.25幀可以通過電話線發送(X.25 async driver)。特別地,這個驅動允許X.25使用異步串行。

  對於ISA SBNI12-xx有一種特殊的驅動(Granch SBNI12 Leased Line adapter support)。這種卡對於租用線路的調制解調器是一種便宜的替代。

  下一個驅動允許使用並行連接攜帶已安排的流量(Multiple line feature support)。這允許Linux系統更加有效地在SBNI12適配器上管理並行連接。一些Linux用戶聲稱這個驅動雙倍加速了他們的速度。然而,這個我沒有親身測試瞭解。

  接下來,可以配置"IEEE 802.15.4 drivers"。這個是對於慢速WAN設備。這是一個控制媒體和無線網絡物理層的標準。這個規範在不同的大洲使用不同的頻率。不如,在歐洲,這類無線設備會使用868.0-868.6MHz的頻率。

  這個目錄中的第一個設定是fake LR-WPAN驅動(Fake LR-WPAN driver with several interconnected devices)。LR-WPAN代表"Low-Rate Wireless Personal Area Network"(低速無線個人網絡)。

  有趣的事實:目前內核中只有大約2%的代碼是由Linus Torvalds寫的。

  VMware使用vmxnet3虛擬以太網需要這個驅動(VMware VMXNET3 ethernet driver)。當在爲大量用戶編譯內核時,最好將這個啓用爲一個模塊,因爲一些人可能並不希望在VMware上使用以太網。

  Hyper-V虛擬網絡需要這個驅動(Microsoft Hyper-V virtual network driver)。你可能想知道這個是否與微軟的Hyper-V相同?是的,Linux支持Hyper-V。

  數字電話服務ISDN由這個驅動提供(ISDN support)。ISDN代表"Integrated Services Digital Network"(綜合業務數字網)。在法國,ISDN被稱爲RNIS,代表" Réseau numérique à intégration de services"。有一臺ISDN適配器,計算機可以開始並接收語音呼叫。這允許計算機用來做因待機或者其他一些電話服務設備。ISDN同樣也可以攜帶視頻信息。

  現在,我們可以進入輸入設備了(Input device support)。這些是給計算機信息的設備。鼠標和鍵盤是最常被使用和了解的輸入設備。掃描儀是另外一種輸入設備的例子。

  首先是一個支持不同觸覺反饋設備的驅動(Support for memoryless force-feedback devices)。比如,許多遊戲控制器的震動就是一種觸覺反饋。

  一些輸入設備會檢測硬件的狀態(Polled input device skeleton)。這類行爲需要這個驅動。

  使用稀疏鍵盤映射的輸入設備需要這個驅動(Sparse keymap support library)。鍵盤映射是鍵盤的佈局信息。

  下面,是另外一種鍵盤映射(Matrix keymap support library)。

  注意:當爲廣泛的用戶組編譯內核時,包含大多數或者全部輸入設備作爲模塊,因爲通常不知道用戶可能插到計算機上的設備類型。

  有趣的事實:Vanilla內核就是Linux自己的原始內核,是未改變的狀態。

  "Mouse interface"對於鼠標創建了兩個不同的設備文件。這兩個設備文件是/dev/input/mouseX 和 /dev/input/mice。

  下一個驅動創建了一個psaux設備文件並且它是/dev/input/mice的別名 (Provide legacy /dev/psaux device)。psaux設備文件是/dev/psaux。

  如果系統有一塊數位板,那麼需要設置水平分辨率(Horizontal screen resolution)和垂直分辨率(Vertical screen resolution)。數位板是一種支持允許用戶繪畫的觸控筆的觸摸屏。另外的觸摸屏無法支持如此複雜的輸入。

  下一個驅動支持操縱桿和遊戲手柄(Joystick interface)。這個驅動會創建/dev/input/jsX文件。

  "Event interface"驅動允許輸入設備通過dev/input/eventX訪問。

  "Event debugging"驅動會輸出所有的輸入事件到系統日誌中。除了要調試系統否則不要以任何理由啓用它。顯然地,這麼做爲了性能原因,但是我這麼建議禁用的主要原因是安全目的。所有的按鍵都會被明文記錄下來包括密碼。

  下面,列出了不同的鍵盤(Keyboards)配置驅動,接下來是鼠標(Mice)驅動和操縱桿和遊戲手柄(joystick/gamepad)驅動。

  在這之後,列出了不同特定的平板硬件/供貨商的不同驅動(Tablets)。在這之後是觸摸屏的驅動列表。

  最後一組輸入設備驅動是對於特定硬件和供貨商的雜項驅動列表(Miscellaneous devices)。

  這個系列的下一篇文章會討論輸入端口。不要忘記閱讀這個系列的其他文章和這個網站。謝謝!


 輸入/輸出端口:

  

  歡迎來到下一篇Linux內核文章。在本篇裏,我們將討論輸入/輸出端口。

  首先,PS/2鼠標和AT鍵盤需要"i8042 PC Keyboard controller"驅動。在USB之前,鼠標和鍵盤使用圓形端口的PS/2端口。AT鍵盤是一種84鍵使用AT端口的IBM鍵盤。AT端口有5針而PS/2口有六針。

  使用COM口(有時也稱RS232串口)的輸入設備需要這個驅動(Serial port line discipline)。COM是一種串口,意味着每次傳輸一位。

  TravelMate筆記本需要這個特殊的驅動來使用連接到QuickPort的鼠標(ct82c710 Aux port controller)。

  對於PS/2 mice、AT keyboards 和 XT keyboards的並口適配器使用這個驅動(Parallel port keyboard adapter)。

  "PS/2 driver library"用於PS/2鼠標和AT鍵盤。

  可以啓用"Raw access to serio ports"來允許設備文件作爲字符文件來使用。

  下面,下面有一個用於"Altera UP PS/2 controller"的驅動。

  PS/2複用同樣需要一個驅動(TQC PS/2 multiplexer)。

  ARC FPGA平臺對於PS/2控制器需要特殊的驅動(ARC PS/2 support)。

  注意:我想要說清楚這篇文章中討論的PS/2控制器並不是Sony的PlayStation上的遊戲控制器。這篇文章討論的是6針鼠標/鍵盤端口。控制器是一種有PS/2端口的卡。

  "Gameport support"提供對15針gameport的支持。gameport是一種曾經被很多遊戲設備使用直到USB端口的發明的15鍼口。

  下一個驅動是在ISA或者PnP總線卡上的gameport驅動(Classic ISA and PnP gameport support)。ISA代表"Industry Standard Architecture"(工業標準架構)並且它是一種在PCI之前的並行總線標準。PnP代表"Plug-and-Play"(即插即用)並且他是一種在ISA之前的通用標準。

  "PDPI Lightning 4 gamecard support"提供了一個有gameport的遊戲卡的專有驅動。

  SoundBlaster Audigy卡是一種專有gameport卡(SB Live and Audigy gameport support)。

  ForteMedia FM801 PCI音頻控制器在卡上有一個音頻控制器(ForteMedia FM801 gameport support)。這個驅動只支持gameport。

  下一步,我們可以進入"Character devices"。字符設備以字符傳輸數據。

  首先,可以啓用/禁用TTY(Enable TTY)。移除TTY會節約很多空間,但是許多終端和這類設備需要TTY。除非你知道你在做什麼,否則不要禁用TTY。

  致我的粉絲:如果你知道一個禁用TTY的理由,你能在下面發表你的答案並與我們共享麼?謝謝!

  下一步,可以啓用/禁用"Virtual terminals"(虛擬終端)。再說一次,這個可以節約很多空間,但是虛擬終端很重要。

  下一個驅動支持字體映射和Unicode轉換(Enable character translations in console)。這用於轉換ASCII到Unicode。

  虛擬終端可以用這個驅動作爲系統控制檯(Support for console on virtual terminal)。系統控制檯管理着登陸和內核信息/警告。

  虛擬終端必須通過控制檯驅動與物理終端交互(Support for binding and unbinding console drivers)。在虛擬終端可用之前,控制檯驅動必須被加載。當虛擬終端關閉後,控制檯終端必須被卸載。

  下一個驅動提供了對Unix98 PTY驅動的支持(Unix98 PTY support)。這是Unix98僞終端。

  有趣的事實:Linux內核允許某個文件系統一次在很多地方被多次掛載。

  接下來,可以支持"Support multiple instances of devpts"(譯註:允許多個"devpts"文件系統實例)。devpts文件系統用於僞終端的slave。

  過時的PTY同樣可以啓用(Legacy (BSD) PTY support)。

  可以設置最大數量的使用中的過時PTS(Maximum number of legacy PTY in use)。

  下面的驅動可以用於提供對其他驅動不支持的串口的支持 (Non-standard serial port support)。

  下面有一些用於特定板和卡的驅動。

  這個驅動支持GSM MUX協議(GSM多路複用)(GSM MUX line discipline support (EXPERIMENTAL))。

  下一個驅動啓用kmem設備文件(/dev/kmem virtual device support)。kmem通常用於內核調試。kmem可以用於讀取某些內核變量和狀態。

  Stallion卡上面有許多串口Stallion multiport serial support)。這個驅動特別支持這塊卡。

  下面,我們可以進入到串行設備驅動了。如前所述,串行設備每次傳輸一位。

  第一個驅動用於標準串口支持(8250/16550 and compatible serial support)。

  在這個驅動下,即插即用(Plug-and-Play)同樣存在於串口中(8250/16550 PNP device support)。

  下面的驅動允許串口用於連接一個終端後作爲控制檯(Console on 8250/16550 and compatible serial port)。

  一些UART控制器支持直接內存訪問(DMA support for 16550 compatible UART controllers)。UART代表的是"Universal Asynchronous Receiver/Transmitter"(通用異步收發)。UART控制器轉換串行到並行,反之亦然。

  下一步,這個驅動提供了標準PCI串行設備支持(8250/16550 PCI device support)。

  16位PCMCIA串行設備由這個驅動支持(8250/16550 PCMCIA device support)。記住,PCMCIA是一種通常使用於筆記本的PC卡。

  可以設置最大數量支持的串口(Maximum number of 8250/16550 serial ports),接着是在啓動中註冊的最大數量(Number of 8250/16550 serial ports to register at runtime)。

  爲了擴展像HUB6的串行能力,啓用這個驅動(Extended 8250/16550 serial driver options)。

  一個特殊驅動用於支持多於4種的過時串口(Support more than 4 legacy serial ports)。

  當啓用這個驅動後,可以共享串口中斷(Support for sharing serial interrupts)。

  使用這個驅動可以自動檢測串口中斷請求(Autodetect IRQ on standard ports)。

  RSA串口同樣也在Linux內核中支持(Support RSA serial ports)。RSA代表的是"Remote Supervisor Adapter"(遠程管理適配器)。RSA是一種IBM特定的硬件。

  下面,有不同的供應商/設備特定驅動。

  下面有一個使用printk輸出用戶信息的TTY驅動(TTY driver to output user messages via printk)。printk(print kernel)是一種通常打印啓動信息的特殊軟件。任何由printk顯示的字符串通常在/var/log/messages文件裏。shell命令"dmesg"顯示所有被printk使用的字符串。

  下面,我們可以啓用/禁用並口打印機的支持(Parallel printer support)。

  接下來的驅動允許打印機作爲一個控制檯(Parallel printer support)。這意味着內核消息會被逐字地由打印機打印。通常地在這個系列中使用"print"(打印)這個單詞時,意味這將輸出信息到屏幕上。而這次,字面上的意思是將數據輸出在紙上。

  以下的驅動使設備文件在/dev/parport/中(Support for user-space parallel port device drivers)。這使得一些進程可以訪問。

  再說一次,Linux內核有許多特性和驅動,所以我們還會在下一篇文章中繼續討論更多的驅動。謝謝!

  致粉絲:我們正在接近配置過程的終點。我有一張你們很多人想知道的內核話題列表。這些話題包含了安裝內核、管理模塊、加入第三方驅動、還有許多其他有趣的建議和要求。

  

  你好!這篇文章會覆蓋不同的驅動。

  首先"virtio console"是一種用於hypervisors的虛擬控制檯驅動。

  "IPMI top-level message handler"是用於IPMI系統的消息管理器。IPMI代表的是"Intelligent Platform Management Interface"(智能平臺管理系統)。IPMI是一種不需要shell通過網絡管理系統的接口。

  "/dev/nvram support"允許系統讀取和寫入實時時鐘的內存。通常上,這個特性用於在掉電時保存數據。

  下面一個驅動支持Siemens R3964包驅動(Siemens R3964 line discipline)。這個是設備對設備協議

  現在,我們可以進入PCMCIA字符設備驅動。然而,大多數這裏的驅動是供貨商/設備特定的。

  原始塊設備驅動允許塊設備綁定到設備文件上/dev/raw/rawN(RAW driver (/dev/raw/rawN))。這麼做的好處是高效的零拷貝。然而,大多數軟件更偏好通過/dev/sd** 或者 /dev/hd**訪問存儲設備。

  下面,可以設置支持的原始設備的最大數量。

  下面的驅動可以生成設備文件/dev/hpet (HPET - High Precision Event Timer)。

  注意:你們中很多人可能會想知道爲什麼要啓用這些設備文件問題。好的,這些設備文件充當了一個軟件和硬件之間的接口。

  通過這個驅動可以映射HPET驅動(Allow mmap of HPET)。映射是一個生成設備和文件在內存中的地址列表。文件接着可以通過內存地址更快地找到並且接着指揮硬盤從地址中得到數據。

  "Hangcheck timer"用於檢測系統是否被鎖定。這個定時器監視着鎖定進程。當一個進程被凍結了,定時器就開啓。當定時器停止後,如果進程還沒有重啓或者關閉,那麼定時器會強迫進程關閉。

  引用Linus Torvalds的話:可移植性是對於那些無法寫新程序的人而言的。

  使用Trusted Computing Group(可信賴計算組)規範的TPM安全芯片會需要這個驅動(TPM Hardware Support)。

  現在,我們可以進入I2C設備。I2C代表的是"Inter-Integrated Circuit"(內部集成電路)並經常被成爲"eye two see"。然而,一些人會說"eye squared see"。I2C是一種串行總線標準。

  一些舊的軟件將I2C適配器作爲類設備,但是如今的軟件不會這麼做(Enable compatibility bits for old user-space)。所以,這個驅動會提供對舊軟件的向後支持。

  接下來,可以生成I2C設備文件(I2C device interface)。

  I2C可以通過這個驅動提供複用支持(I2C bus multiplexing support)。

  I2C可以通過這個驅動支持GPIO控制的複用(GPIO-based I2C multiplexer)。

  對於開發者用這個驅動可以在I2C和SMBus上執行不同的測試(I2C/SMBus Test Stub)。

  I2C系統啓用這個特性可以生成調試信息(I2C Core debugging messages)。

  下一個驅動生成額外的I2C調試信息(I2C Algorithm debugging messages)。

  引用Linus Torvalds的話:Linux中沒有原始設備的原因似乎我個人任何原始設備是一個愚蠢的注意。

  下面的驅動會使I2C驅動生成調試信息(I2C Bus debugging messages)。

  接下來,我們有串行外設接口(Serial Peripheral Interface)支持(SPI support)。SPi是一種用於SPI總線的同步串行協議。

  在這之後,有一個驅動用於高速同步串行接口(High speed synchronous Serial Interface support)支持(HSI support)。HSI是一種同步串行協議。

  PPS同樣在Linux內核中支持(PPS support)。

  "IP-over-InfiniBand"驅動支持IP包通過InfiniBand(譯註:一種無限帶寬技術)傳輸。

  在這之後,有一個調試驅動用於IP-over-InfiniBand(IP-over-InfiniBand debugging)。

  SCSI的RDMA協議同樣可以通過InfiniBand傳輸(InfiniBand SCSI RDMA Protocol)。

  這裏同樣有一種通過InfiniBand傳輸iSCSI協議的擴展(iSCSI Extensions for RDMA (iSER))。

  有時候,錯誤發生在了整個系統必須知道的核心繫統中(EDAC (Error Detection And Correction) reporting)。這個驅動發送核心給系統。通常地,這類底層錯誤由處理器中報告並接着由這個驅動讓其他系統進程知道或者處理錯誤。

  這個驅動提供了在老版本中的sysfs中使用的過時EDAC的支持(EDAC legacy sysfs)。

  EDAC可以用來設置發送調試信息給Linux的日誌系統(Debugging)。

  引用Linus Torvalds的話:沒有人可以第一次創造如此好的代碼,除了我。

  "Machine Check Exceptions"(機器檢測異常)(MCEs)通過這個驅動被轉化成可讀的信息(Decode MCEs in human-readable form (only on AMD for now))。MCEs是由CPU檢測到的硬件錯誤。MCEs通常觸發內核錯誤。

  將MCE解碼成可讀的形式的過程可以被注射用於測試錯誤處理(Simple MCE injection interface over /sysfs)。

  下一個驅動允許錯誤在內存中被檢測到並糾正(Main Memory EDAC (Error Detection And Correction) reporting)。

  下面,還有很多用於特定設備組的檢測和糾正錯誤的驅動。

  引用Linus Torvalds的話:理論和實踐有時會衝突。那這個發生時,理論輸了。每次都是。

  現在我們可以進入實時時鐘("Real Time Clock")。這通常縮寫爲"RTC"。RTC一直跟隨着時間。

  

  下面的設定允許用戶在Linux系統中使用RTC時間作爲"掛鐘"時間(Set system time from RTC on startup and resume)。這個掛鐘是我們在桌面上或者通過"date"命令看到的時間。

  另外,掛鐘可以通過NTP服務器得到時間並與RTC同步(Set the RTC time based on NTP synchronization)。

  一些系統有幾個RTC,所以用戶必須設置哪一個是默認 (RTC used to set the system time)。最好設置第一個(/dev/rtc0)爲主時鐘。

  可以設置RTC系統的調試特性(RTC debug support)。

  RTC可以使用不同的接口給予操作系統當前時間。使用sysfs會需要這個驅動(/sys/class/rtc/rtcN (sysfs)),而似乎用proc需要這個驅動 (/proc/driver/rtc (procfs for rtcN))。特殊的RTC字符設備可以生成並使用 (/dev/rtcN (character devices))。shell命令"hwclock"使用/dev/rtc,所以RTC字符設備。

  下一個驅動允許在/dev接口上模擬RTC中斷(RTC UIE emulation on dev interface)。這個驅動讀取時鐘時間並允許新的時間從/dev中檢索。

  RTC系統可以通過測試驅動測試(Test driver/device)。

  下面,我們會討論直接內存訪問系統。DMA是硬件獨立於處理器的內存訪問過程。DMA增加的系統性能因爲處理器將做得更少如果硬件自身做了更多的任務。不然,硬件會等待處理器完成任務。

  這是調試DMA系統的調試引擎(DMA Engine debugging)。

  接下來,有許多的供貨商/設備特定驅動用於DMA支持。

  一些DMA通過這個驅動支持大端讀取和寫入(Use big endian I/O register access)。

  大端指的是二進制碼的排列。英語國家的數字系統將數字的最大端放在左邊。比如,數字17,最左的數字是放置十位的地方大於個位。在大端中,每字節最大的放在左邊。字節有8位。比如:10110100。每一處都有相應的值128、64、32、16、8、4、2、1。所以提到的爲被轉換成十進制180。

  DMA系統可以使用網絡減小CPU使用(Network: TCP receive copy offload)。

  "DMA Test Client"用於測試DMA系統。

  下一篇文章中,我們會討論顯示/視頻驅動。謝謝!

  參考:Linus Torvalds的引用來自於:

  

  你好!準備好閱讀下一篇文章了麼?在本篇中,我們將會討論輔助顯示。輔助顯示是一些小的LCD屏幕;大多數小於或等於128x64。接着,我們會討論用戶空間IO驅動,一些虛擬驅動,Hyper-V,開發中驅動,IOMMU,和其他一些內核特性。

  第一個配置輔助顯示的驅動是"KS0108 LCD Controller"。KS0108 LCD Controller是由三星製造的圖形控制器。

  下面可以設置LCD並口地址(Parallel port where the LCD is connected)。第一個並口地址是0x378,下一個是0x278,第三個是0x3BC。這些不是地址唯一的選擇。大多數人不需要改變這個。shell命令"cat /proc/ioports"會列出可用的並口和地址。

  內核可以設置KS0108 LCD 控制器的寫入延時到並口(Delay between each control writing (microseconds))。默認的值大部分是正確的,因此一般不需要更改。

  "CFAG12864B LCD"屏幕是一塊128x64,雙色LCD屏幕。這塊屏幕依賴於KS0108 LCD控制器。

  可以改變這些LCD屏幕的刷新率(Refresh rate (hertz))。通常上,更高的刷新率會導致更多的CPU活動。這意味着一個緩慢的系統需要一個更低的刷新率。

  設置完輔助顯示後,接着設置"Userspace I/O drivers"。用戶空間系統允許用戶的應用和進程訪問內核中斷和內存地址。啓用了它,一些驅動可以放在用戶空間。

  "generic Hilscher CIF Card driver"用於Profibus卡和Hilscher CIF卡。

  "Userspace I/O platform driver"在用戶空間創建通用驅動系統。

  下一個驅動和上面的相同,但是增加IRQ處理(Userspace I/O platform driver with generic IRQ handling)。

  下面的驅動又像前面的一個,但是增加了動態內存支持(Userspace platform driver with generic irq and dynamic memory)。

  下面,是一些供應商/設備特性的驅動。

  接着是一些通用PCI/PCIe卡驅動(Generic driver for PCI 2.3 and PCI Express cards)。

  下面的驅動用於"VFIO support for PCI devices"。VFIO代表Virtual Function Input/Output(虛擬功能輸入/輸出)。VFIO允許設備直接以安全方式訪問用戶空間。

  "VFIO PCI support for VGA devices"允許VGA通過VFIO被PCI支持。

  接下來是virtio驅動。virtio是一個IO虛擬化平臺。這個虛擬軟件用於操作系統虛擬化。這在Linux系統上的虛擬機上運行一個操作系統時需要。

  我們第一個可以配置的virtio驅動是"PCI driver for virtio devices"。這允許虛擬訪問PCI

  "Virtio balloon driver"允許虛擬系統的內存根據需要擴展或減少。通常上,沒有人希望在需要內存的時候,虛擬系統保留它可能不會使用的內存。

  下面的驅動允許內存映射到virtio設備(Platform bus driver for memory mapped virtio devices)。

  如果Linux內核需要運行在微軟的Hyper-V系統上,那麼啓用這個驅動(Microsoft Hyper-V client drivers)。這允許Linux能夠成爲Hyper的訪客/客戶端系統。

  

  下面,我們會配置處於開發階段的驅動。這些驅動正在開發當中,可能會變化很快,或者還沒到Linux內核的質量標準。這個分類中的驅動只有Android驅動(在內核3.9.4中)。是的,Andorid使用Linux內核,這使得Andorid變成了一個Linux系統。然而,這仍然有爭議。如果內核是用於Android,那麼最好啓用所有的驅動。

  "Android Binder IPC Driver"提供了對於Binder的支持,它允許Andorid系統進程間相互通信。

  下面可以啓用ashmen驅動(Enable the Anonymous Shared Memory Subsystem)。Ashmem代表"Anonymous SHared MEMory"(虛擬內存共享)或者"Android SHared MEMory"(Andorid共享內存)。

  "Android log driver"提供了完整的Andorid日誌系統。

  "Timed output class driver" 和 "Android timed gpio driver"允許Andorid系統操作GIP引腳並在超時後取消操作。

  "Android Low Memory Killer"會在需要更多內存關閉進程。這個特性會殺死不再使用或活躍的任務。

  "Android alarm driver"使內核在設定的間隔後喚醒。

  在配置完開發階段的驅動後,下面的驅動用於X86平臺。這些驅動是 X86 (32-bit)的供應商/設備特定硬件。

  下一個驅動是"Mailbox Hardware Support"。這個框架控制郵箱隊列和硬件郵箱系統的中斷信號。

  "IOMMU Hardware Support"鏈接內存到能夠使用DMA的設備上。IOMMU增強了DMA。IOMMU映射地址並阻止故障設備訪問內存。IOMMU同樣允許硬件訪問比沒有IOMMU更多內存。

  "AMD IOMMU support"提供了對AMD設備更好的IOMMU支持。

  對於AMD IOMMU支持存在調試特性(Export AMD IOMMU statistics to debugfs)。

  存在一個對於AMD硬件的更新版本的IOMMU驅動(AMD IOMMU Version 2 driver)。

  Linux內核同樣支持對Intel設備的IOMMU驅動支持(Support for Intel IOMMU using DMA Remapping Devices)。

  一些設備可能會接受不同的電壓和時鐘頻率。這個驅動允許操作系統控制設備的電壓輸出和時鐘頻率(Generic Dynamic Voltage and Frequency Scaling (DVFS) support)。啓用了這個驅動,可以啓用下面的那些對於電源/性能管理特性。

  "Simple Ondemand"就像上面的,但是隻會基於設備活動改變時鐘頻率。通常上,更多的活動意味着設備需要更快的時鐘速率來使用更多的資源需求。

  "Performance"允許系統設置最高支持的時鐘速度以滿足最好的性能。這會增加電源消耗。

  "Powersave"會設置時鐘頻率到最低以節約電源。

  "Userspace"允許用戶空間設置時鐘頻率。

  "External Connector Class (extcon) support"使得用戶空間可以監視外部連接器如USB和AC口。這允許應用瞭解是否插入了線纜。用戶幾乎都希望啓用這個。如果任何人由於某個合理的理由禁用了它,請告訴我們爲什麼這麼做。

  "GPIO extcon support"驅動就像上面的驅動,但是它只對於GPIO管腳。

  接下來是不同的供貨商/設備特定的內存控制器(Memory Controller drivers)。內存芯片控制器可能是獨立的設備或者內置在內存芯片上。這些控制器管理這輸入和輸出的數據流。

  "Industrial I/O support"驅動提供了標準的傳感器接口而不管總線的類型(像PCIe、spi、GPIO等等)。IIO是"Industrial I/O support"(工業IO)的通用縮寫。

  Linux內核提供了大量不同的加速器、放大器模數轉換器、慣性測量單元、光敏傳感器、磁場傳感器和其他許多傳感器和轉換器的支持。

  "Intel Non-Transparent Bridge support"驅動支持連接到系統的PCIe硬件橋。所有到映射內存的寫入會鏡像到兩個系統中。

  "VME bridge support"和上面的相同除了橋使用的是VME,這是一個不同的總線標準。

  "Pulse-Width Modulation (PWM) Support"通過調節從這些設備收到的平均功率調節背光燈和風扇速度。

  "IndustryPack bus support"提供了對IndustryPack總線標準的支持。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章