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”或者其他圖形菜單之一。如下圖所示。
? ? ? ? ? ??
"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)(是否自動添加版本信息到版本號后):如果本地有一個Git版本庫,git的修訂號會被添加到版本號后面。沒有使用git,則不選中該項。不然git修訂號將會追加到版本號中。
? ? ? ? ?Kernel compression mode (Gzip) ?--->?使用哪一種格式壓縮內核:開發人員可以從五個選項中選擇一個。
- Gzip (KERNEL_GZIP)?
- Bzip2 (KERNEL_BZIP2)?
- LZMA (KERNEL_LZMA)?
- XZ (KERNEL_XZ)?
- LZO (KERNEL_LZO)
Gzip是默認值。每種壓縮格式和其他壓縮格式相比都有更高或者更低的壓縮比,更好的壓縮比意味著更小的體積,但是與低壓縮比文件相比,它解壓時需要更多的時間。
“((none))Default hostname”(默認主機名):這里可以配置主機名。通常地,開發者這行留空(我這里留空),以便以后Linux用戶可以自己設置他們的主機名。
"System V IPC"(內核是否支持IPC):進程間通信使進程間可以通信和同步。最好啟用IPC不然許多程序將無法工作。
? ? ?“POSIX Message Queues”(是否使用POSIX消息隊列):這個問題只會在IPC啟用后看見。POSIX消息隊列是一種給每條消息一個優先級的消息隊列(一種進程間通信形式)。
“open by fhandle syscalls”(是否使用文件句柄系統調用來打開文件):當有需要進行文件系統操作的時候,程序是否允許使用文件句柄而不是文件名進行。
“Auditing support”(是否支持審計):審計支持會記錄所有文件的訪問和修改,如果選中,才會彈出下一條“Make audit loginuid immutable ”。
? ? ? “Make audit loginuid immutable ”(是否要審計進程身份ID不可變):進程是否可以改變它們的loginuid(LOGIN User ID),如果啟用,用戶空間的進程將無法改變他們的loginuid。為了更好的性能,我們這里禁用這個特性。(譯注:對于使用systemd這樣的系統,其是通過中央進程來重啟登錄服務的,設置為“y”可以避免一些安全問題;而使用較舊的SysVinit和Upstart的系統,其需要管理員手工重啟登錄服務,應該設置為“N”)
注意:當通過"make menuconfig"配置時,無論用戶按任何鍵都無法改變選項。開發者不需要去改變這些選項,因為之前的選擇決定了另外一個問題的選擇。
"IRQ subsystem--->"配置內核IRQ子系統:中斷請求(IRQ)是硬件發給處理器的一個信號,它暫時停止一個正在運行的程序并允許一個特殊的程序占用CPU運行。
IRQ subsystem目錄中的第一個問題屬于內核特性,"Expose hardware/virtual IRQ mapping via debugfs "(通過debugfs來顯示硬件/虛擬的IRQ映射):使用虛擬的調試文件系統來映射硬件及Linux上對應的IRQ中斷號。這個用作調試目的,大多數用戶不需要用到,所以我選擇了"no"。
"Timers subsystem --->"(計時器子系統):
? ? ? ? ? ?“[ ] Old Idle dynticks config:舊的入口,此選項被用來保持與舊版本的兼容,未來會被刪除。
? ? ? ? ? "[ ] High Resolution Timer Support"(高精度定時器):并不是所有的硬件支持這個,通常地說,如果硬件很慢或很舊,那么選擇"no",否則像我一樣選擇"yes"。如果你的硬件不能勝任這個選項,那么開啟這個選項僅僅是給內核增加體積。高精度定時器(hrtimer)是從2.6.16開始被引入內核,采用紅黑樹算法(傳統timer使用時間輪算法),在硬中斷中執行中斷服務例程,它可以為我們提供納秒級的定時精度,以滿足對精確時間有迫切需求的應用程序或內核驅動,例如多媒體應用,音頻設備的驅動程序等等
"CPU/Task time and stats accounting --->"(CPU/任務用時與狀態統計):這個是關于進程的追蹤。第一個問題看上去像這樣:
? ? ? ? ? ?"Cputime accounting ( ) --->"CPU時間統計方式,總共有三種選擇:
注意:CPU滴答是抽象測量CPU時間的方式。每個處理器、操作系統和安裝的系統都不同,比如說,一個更強大的處理器會比老的處理器擁有更多的CPU滴答。如果你安裝了一個Linux系統,然后接著在同一塊磁盤上重新安裝了它,你可能會得到一個更快或更慢的CPU滴答時間(至少一些計算機技術書上這么說)。通常來講,一個更快的時鐘速度意味著更多的CPU滴答。
"BSD Process Accounting"(BSD進程記賬):這個內核特性會記錄每個進程不同的關閉信息。為了得到一個更小和更快的內核,選擇"no".
"Export task/process statistics through netlink (通過netlink導出任務/進程統計數據) ":?使內核可以通過網絡套接字導出進程統計。網絡套接字是內核和用戶空間進程間IPC通信的一種形式。如果啟用本項,才會彈出下兩項:
Enable per-task delay accounting (TASK_DELAY_ACCT) (啟用針對每個任務的延遲統計)?
Enable extended accounting over taskstats (TASK_XACCT) (啟用taskstats的擴展統計)?
? ? ? ? ? TASK_DELAY_ACCT監視進程并注意資源訪問的延遲。比如,TASK_DELAY_ACCT可以看到X進程正在為了CPU時間而等待,如果TASK_DELAY_ACCT觀察到進程已經等待了太長時間,這個進程接著就會被給予一些CPU時間。TASK_XACCT會收集額外的統計數據,為了更小的內核負載我會禁用這個。
"RCU Subsyctem --->"顯示RCU子系統:讀取-復制-更新子系統是一種低負載的同步機制,它允許程序查看到正在被修改/更新的文件。配置工具已經回答了第一個問題。
RCU Implementation (RCU 實現方式)
"Kernel . config support":允許.config文件(即編譯LINUX時的配置文件)保存在內核當中。開發人員可以選擇保存由這個配置工具生成的設置到一個文件中。這個文件可以放在內核中,也可在一個模塊中,或者完全不保存。這個文件可以被想要編譯一個完全跟某人相同內核的開發者使用。這個文件還可以幫助開發人員使用一個更新的編譯器重新編譯一個內核。舉例來說,開發人員配置并編譯了一個內核,然而編譯器有一些bug,但開發人員仍然需要一個使用這些設置的內核。而值得慶幸的是,開發人員可以升級他們的編譯器,并使用設置文件來節省他們重新配置內核的時間。開發人員也可以在另一臺計算機上保存源代碼和配置文件并編譯內核。至于另一個目的,開發人員可以加載該文件,并根據需要調整設置。
? ? ? ? "[ * ] Enable access to .config through /proc/config.gz "(啟用通過/proc/config.gz來訪.config)。
"(14) Kernel log buffer size (16 => 64KB, 17 => 128KB) "(內核日志緩沖區大小):小的緩沖區意味著它無法像更大的緩沖區那樣保持日志更長的時間。這個選擇取決于開發者想要日志保持的時間。
"Namespaces support? --->"? 命名空間支持:允許服務器為不同的用戶信息提供不 同的用戶名空間服務?
?? ?[*]?? UTS namespace? 通用終端系統的命名空間。它允許容器,比如Vservers利用UTS命名空間來為不同的服務器提供不同的UTS。如果不清楚,選N。?
?? ?[*]?? IPC namespace? ?IPC命名空間,不確定可以不選?
?? ?[*]?? User namespace ? User命名空間,不確定可以不選?
?? ?[*]?? PID Namespaces? ?PID命名空間,不確定可以不選?
?? ?[*]?? Network namespace? ?
? ? ? ? "Automatic process group scheduling":? ?自動進程組調度
? ? ? ? "[ ] enable deprecated sysfs features to support old userspace tools "
? ? ? ? "Kernel->user space relay support (formerly relayfs) ":在某些文件系統上( 比如debugfs ) 提供從內核空間向用戶空間傳遞大量數據的接口,我目前沒有此類應用場景?
? ? ? ?"[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support":用于在真正內核裝載前,做一些操作(俗稱兩階段啟動),比如加載module ,mount 一些非root 分區,提供災難恢復shell 環境等。
? ?接下來,關于初始虛擬磁盤(Linux的內核映像文件)所支持的壓縮格式。你可以啟用所有支持的壓縮格式。
- ? ? Support initial ramdisks compressed using gzip ?
- ? ? Support initial ramdisks compressed using bzip2?
- ? ? Support initial ramdisks compressed using LZMA
- ? ? Support initial ramdisks compressed using XZ?
- ? ? Support initial ramdisks compressed using LZO?
? ? ? ? "Optimize for size "(優化大小):設置了內核的編譯內核編譯選項。開發者可以讓編譯器在編譯時優化代碼。
"Configure standard kernel features (expert users)--->?"(配置標準內核特性(專家級用戶)):配置更多的內核特性。
? ? ? ? ? ? ? Enable 16-bit UID system calls (UID16)): 啟用過時的16位UID系統調用封裝器,,系統調用就會使用16位UID。
? ? ? "sysctl syscall"(Sysctl syscall support )支持。這使/proc/sys成為二進制路徑的接口。
? ? ? "Load all symbols for debugging/ksymoops "(載入所以的調試符號)
? ? ? ? ? ? ?"Include all symbols in kallsyms "(包括所有的kallsyms符號)。這些都是啟用調試標志。
? ? ? ( (Enable support for printk)啟用printk支持,這會輸出內核消息到內核日志中。這在內核出錯時是很重要的。編譯一個"啞巴"內核并不是一個好主意。然而,如果我們啟用了這個支持,就會被一些開發者看到這些出錯,要么就不要啟用。
? ? ? ?(BUG() support)bug支持: 除非有必要,否則可以禁用。禁用這項將會不支持WARN信息和BUG信息。這會減小內核的體積。
? ? ? (Enable ELF core dumps ):內核是否可以生成內核轉儲文件。這會使內核變大4KB。所以選擇了"no"。
注意:內核轉儲文件(內存或者系統的轉儲)是程序崩潰前已記錄的狀態。內核轉儲是用來調試問題的。這個轉儲文件的格式是ELF(Executable and Linkable Format )。 ? ? ? ?
? ? ? ?(Enable full-sized data structures for core)(啟用完全大小的內核數據結構):雖然會增加內核的大小,但性能也隨之增加。所以選擇"yes"。
? ? ? ?(Enable futex support ):為了使內核可以運行基于glibc的程序,必須啟用FUTEX。這個特性啟用了快速用戶空間互斥鎖(Fast Userspace muTEXes)。
? ? ? ?注意:glibc(GNU C Library)是由GNU實現的標準C庫。
? ? ? ?注意:FUTEX (fast userspace mutex)是用來防止兩個線程訪問同一個不能被多個線程使用的共享資源。
? ? ? ? (Enable eventpoll support ):使能epoll系統調用。epoll是一種I/O事件通知系統。
? ? ? ? (Enable signalfd() system call) :使能signalfd系統調用,可收到來自文件描述符的信號。
? ? ? ? (Enable timerfd() system call ):它允許程序使用定時器事件獲取文件描述符。
? ? ? ?(Enable eventfd() system call ):使能eventfd系統調用。它默認啟用訪問共享內存文件系統(Use full shmem filesystem (SHMEM)。共享內存文件系統是一種虛擬內存文件系統。
? ? ? ? "Enable AIO support (AIO)":使能線程化程序使用的POSIX異步I/O。
? ? ? ? 注意:異步I/O用來處理輸入/輸出,它允許線程在傳輸完成前就完成處理。
“Embedded system ”:如果你正在給一個嵌入式系統配置一個內核,那么可以選擇"yes"。
? ? ? ?注意:嵌入式系統是運行在一個更大的電子系統的實時計算機。
(Kernel performance events and counters ))(內核性能事件和計數器):配置內核性能事件和計時器。配置工具沒有給開發者選擇,直接啟用了事件和計數器。這是一個重要特性。
(Enable VM event counters for /proc/vmstat )(VM事件計數器):如果啟用,那么事件計數就會顯示在/proc/vmstat。如果禁用就不會顯示,/proc/vmstat只會顯示內存頁計數。
(Disable heap randomization )禁用隨機heap:(heap堆是一個應用層的概念,即堆對CPU是不可見的,它的實現方式有多種,可以由OS實現,也可以由運行庫實現,如果你愿意,也可以在一個棧中來實現一個堆) 。然而我們不應該去啟用它,因為任何基于libc5的軟件都無法工作在這個系統上!只有我們有特別的理由這么做或者如果你不會使用基于libc5的軟件時才去啟用它。
"Choose SLAB allocator"SLAB分配器: SLAB分配器是一個沒有碎片且有效率地將內核對象放置在內存中的內存管理系統。
1. SLAB (SLAB)
2. SLUB (Unqueued Allocator) (SLUB)
3. SLOB (Simple Allocator) (SLOB)
(Profiling support ):支持擴展性能。
? ? ? ?"GCOV-based kernel profiling --->"
? ? ? ?(Enable gcov-based kernel profiling )基于gcov的內核分析。這可以被禁用。
"[*] Enable loadable module support ?--->"為了允許內核加載模塊,需要啟用可加載模塊支持。
? ? ? ? (Forced module loading )(允許強制加載模塊?):內核一般只能加載有版本號的模塊。如果想允許內核加載沒有版本? ? 號的模塊,就啟用這個特性。除非你有特定的需求需要這個特性,否則不要啟用。
? ? ? ? (Module unloading)允許卸載已經加載的模塊:如果啟用,Linux內核也能卸載模塊。如果內核判斷你要卸載的模塊不應? 該被卸載,那么用戶則無法卸載模塊。
? ? ? ? ? ? ? ?(Forced module unloading )允許強制卸載正在使用中的模塊(比較危險):這個選項允許你強行卸除模塊,即使內核認為? 這不安全。內核將會立即移除模塊,而不管是否有人在使用它(用 rmmod -f 命令)。這主要是針對開發者和沖動的用? 戶提供的功能。如果不清楚,選N。?
? ? ? ?(Module versioning support )允許使用其他內核版本的模塊:使用不是為你的內核開發的、或者并不適用你的版本號的? ? 模塊,可以啟用。最好不要混用不同版本號的模塊,所以我禁用了這個特性。
? ? ? ?(Source checksum for all modules ):為所有的模塊校驗源碼,如果你不是自己編寫內核模塊就不需要它。這個功能是? ? 為了防止你在編譯模塊時不小心更改了內核模塊的源代碼但忘記更改版本號而造成版本沖突。如果不清楚,選N。。
? ? ? ?(Module signature verification (MODULE_SIG)):模塊簽名驗證,并不必要,選中則內核在加載模塊前會檢查并驗證簽? 名。
(Enable the block layer):塊設備支持,禁用這個將會使塊設備無法使用并且無法啟用某些文件系統。
? ?? ?(Block layer SG support v4):僅在使用大于2TB的塊設備時需要
? ? ? ? ? ? ?(Block layer SG support v4 helper lib ):通用scsi塊設備第4版支持?。
? ?? (Block layer data integrity support ):對塊設備的數據完整性支持。這個特性允許擁有更好的數據完整性來提供設備數據保護特性。許多設備不支持這個特性。
? ?? (Block layer bio throttling support ):可用于限制設備的IO速度,如果啟用那就可以限制設備的IO速率。
? ? ?(Advanced partition selection ):支持外部分區,如果你想要在linux上使用一個在其他的介質上運行著操作系統的硬盤時,選擇Y,如果你不確定時可以選N?。
? ? ? ? ? ? ?IO Schedulers:IO調度器I/O是輸入輸出帶寬控制,主要針對硬盤,是核心的必須的東西。這里提供了三個IO調度器:?
Deadline I/O scheduler:輪詢的調度器,簡潔小巧,提供了最小的讀取延遲和尚佳的吞吐量,特別適合于讀取較多的環境(比如數據庫)Deadline I/O調度器簡單而又緊密,在性能上和搶先式調度器不相上下,在一些數據調入時工作得更好。至于在單進程I/O磁盤調度上,它的工作方式幾乎和搶先式調度器相同,因此也是一個好的選擇。??
?? ?CFQ I/O scheduler:QoS策略為所有任務分配等量的帶寬,避免進程被餓死并實現了較低的延遲,可以認為是上述兩種調度器的折中.適用于有大量進程的多用戶系統CFQ調度器嘗試為所有進程提供相同的帶寬。它將提供平等的工作環境,對于桌面系統很合適。??
?? ?Default I/O scheduler (No-op) :默認IO調度器我這樣理解上面三個IO調度器:?
??? 搶先式是傳統的,它的原理是一有響應,就優先考慮調度。如果你的硬盤此時在運行一項工作,它也會暫停下來先響應用戶。??? 期限式則是:所有的工作都有最終期限,在這之前必須完成。當用戶有響應時,它會根據自己的工作能否完成,來決定是否響應用戶。??? CFQ則是平均分配資源,不管你的響應多急,也不管它的工作量是多少,它都是平均分配,一視同仁的。?
??? (? ) Deadline??? ?
??? (? ) CFQ? ?
??? (*?) No-op?
?
在下一個選項中可以選擇搶占模式。
Preemption Model(搶占模式)
1. No Forced Preemption (Server) ?(非強制搶占)
> 2. Voluntary Kernel Preemption (Desktop) ?(自愿內核搶占)
3. Preemptible Kernel (Low-Latency Desktop) ?(可搶占內核)
搶占就是暫停一個意圖讓它之后繼續執行的中斷任務的過程。搶占強制一個進程暫停,執行中的任務無法忽視搶占。
接著,我們被詢問關于"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 "。啟用會讓內核在沒有活躍的喚醒調用被調用時進入掛起或者睡眠狀態。這意味著空閑的系統將會進入掛起模式以節省電源。
? ? ? ? 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))。垃圾收集是一種內存管理方式。
注意: 在需要更多內存的系統中,通常最好在大多數情況下盡可能啟用垃圾收集。不然內存會消耗得更快且雜亂。
? ?"User space wakeup sources interface "。啟用這個特性將會允許喚醒源對象被激活、停用,并通過基于sysfs接口由用戶空間創建。喚醒源對象會追蹤喚醒事件源。
? ? ? ?(Run-time PM core functionality)。這個選項允許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總線標準的支持。
?
來源:https://blog.csdn.net/ffmxnjm/article/details/72933915
總結
以上是生活随笔為你收集整理的Linux配置并编译内核的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RS485通讯与RS232通讯的区别
- 下一篇: Linux内核专题 - 介绍