Devyn的Linux內(nèi)核專題:配置內(nèi)核(1)
現(xiàn)在我們已經(jīng)了解了內(nèi)核,現(xiàn)在我們可以進(jìn)入主要工作:配置并編譯內(nèi)核代碼。配置內(nèi)核代碼并不會花費太長時間。配置工具會詢問許多問題并且允許開發(fā)者配置內(nèi)核的每個方面。如果你有不確定的問題或者特性,你最好使用配置工具提供的默認(rèn)值。本系列教程會使讀者逐步了解配置內(nèi)核的整個過程。
配置代碼前需要在源文件的文件夾內(nèi)打開一個終端。當(dāng)終端打開后,基于你喜好的配置界面,這里有幾種不同的配置方法:
- make config - 純文本界面 (最常用的選擇)。
- make menuconfig - 基于文本彩色菜單和單選列表。這個選項可以加快開發(fā)者開發(fā)速度。需要安裝ncurses(ncurses-devel)。
- make nconfig - 基于文本的彩色菜單。需要安裝curses (libcdk5-dev)。
- make xconfig - QT/X-windows 界面。需要安裝QT。
- make gconfig - Gtk/X-windows 界面。需要安裝GTK。
- make oldconfig - 純文本界面,但是其默認(rèn)的問題是基于已有的本地配置文件。
- make silentoldconfig - 和oldconfig相似,但是不會顯示配置文件中已有的問題的回答。
- make olddefconfig -和silentoldconfig相似,但有些問題已經(jīng)以它們的默認(rèn)值選擇。
- make defconfig - 這個選項將會創(chuàng)建一份以當(dāng)前系統(tǒng)架構(gòu)為基礎(chǔ)的默認(rèn)設(shè)置文件。
- make ${PLATFORM}defconfig - 創(chuàng)建一份使用arch/$ARCH/configs/${PLATFORM}defconfig中的值的配置文件。
- make allyesconfig - 這個選項將會創(chuàng)建一份盡可能多的問題回答都為‘yes’的配置文件。
- make allmodconfig - 這個選項將會創(chuàng)建一份將盡可能多的內(nèi)核部分配置為模塊的配置文件。
注意:內(nèi)核代碼可以放進(jìn)內(nèi)核自身,也可以成為一個模塊。例如,用戶可以將藍(lán)牙驅(qū)動作為一個模塊加入(獨立于內(nèi)核),或者直接放到內(nèi)核栗,或者完全不加藍(lán)牙驅(qū)動。當(dāng)代碼放到內(nèi)核本身時,內(nèi)核將會請求更多的內(nèi)存并且啟動會花費更長的時間。然而,內(nèi)核會執(zhí)行的更好。如果代碼作為模塊加入,代碼將會一直存在于硬盤上直到被需要時加載。接著模塊被加載到內(nèi)存中。這可以減少內(nèi)核的內(nèi)存使用并減少啟動的時間。然而,因為內(nèi)核和模塊在內(nèi)存上相互獨立所以會影響內(nèi)核的性能。另一種選擇是不添加一些代碼。舉例來說,內(nèi)核開發(fā)人員假如知道系統(tǒng)永遠(yuǎn)都不會使用藍(lán)牙設(shè)備,因此這個驅(qū)動就可以不加到內(nèi)核中。這提升了內(nèi)核的性能。然而,如果用戶之后需要藍(lán)牙設(shè)備,那么他么需要安裝藍(lán)牙模塊或者升級內(nèi)核才行。 |
- make allnoconfig - 這個選項只會生成內(nèi)核所必要代碼的配置文件。它對盡可能多的問題都回答no。這有時會導(dǎo)致內(nèi)核無法工作在為編譯該內(nèi)核的硬件上。
- make randconfig - 這個選項會對內(nèi)核選項隨機(jī)選擇(譯注:這是做什么用途的??。?/li>
- make localmodconfig - 這個選項會根據(jù)當(dāng)前已加載模塊列表和系統(tǒng)配置來生成配置文件。
- make localyesconfig - 將所有可裝載模塊(LKM)都編譯進(jìn)內(nèi)核。
譯者注:這里與原文 ‘This will set all module options to yes - most (or all) of the kernel will not be in modules’的意思不同,作者也作出了解釋:
http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/#post-13307)。
貼士:最好使用“make menuconfig”,因為用戶可以保存進(jìn)度。“make config”不會提供這樣的便利,因為配置過程會耗費大量時間。
配置:
大多數(shù)開發(fā)者選擇使用“make menucongfig”或者其他圖形菜單之一。當(dāng)鍵入上述配置命令后,第一個問題,是受否將內(nèi)核編譯成64位。選項有“Y”、“n”和“?”。問號用來解釋這個問題,“n”代表這個問題回答否(no),"Y"代表這個問題回答是(yes)。在這個教程里,我選擇是。 這里我輸入"Y"(這里是大小寫敏感的)并輸入回車。
注意:當(dāng)內(nèi)核在32位系統(tǒng)上編譯時,編譯工具會詢問內(nèi)核是否編譯成32位。第一個問題在不同的處理器上不一樣。
下一行顯示的是"Cross-compiler tool prefix (CROSS_COMPILE) []"(交叉編譯器工具前綴)。如果你不是做交叉編譯就直接按下回車。如果你正在交叉編譯,對ARM系統(tǒng)輸入像"arm-unknown-linux-gnu-",對64位PC輸入像"x86_64-pc-linux-gnu-"的字樣。對其他處理器而言還有許多其他可能的命令,但是這個表太大了。一旦一名開發(fā)者知道他們想要支持的處理器,很容易就可研究出處理器需要的命令。
注意:交叉編譯是為別的處理器編譯代碼。比如,一臺Intel系統(tǒng)正編譯著不在Intel處理器上運(yùn)行的程序,比如,這個系統(tǒng)可能正在編譯著要在ARM或AMD處理器上運(yùn)行的代碼。
注意:每一項選擇會改變接下來顯示什么問題及何時顯示。我會(在教程里)包含上我的選擇讓讀者可以在他們自己的系統(tǒng)上跟上配置的進(jìn)度。
接下來,用戶會看到“Local version - append to kernel release (LOCALVERSION) []”(本地版本號,附加到內(nèi)核版本號后面)。這使開發(fā)人員可以給定一個特殊版本號或命名他們自定義的內(nèi)核。我將輸入“LinuxDotOrg”,這樣,內(nèi)核版本會顯示為“3.9.4-LinuxDotOrg”。接下來,配置工具會詢問“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”(是否自動添加版本信息到版本號后)。如果本地有一個git版本庫,git的修訂號會被添加到版本號后面。這個例子中我們沒有使用git,所以我回答"no"。不然git修訂號將會追加到版本號中。還記得vmlinuz和幾個類似的文件么?好了,下一個問題就是問使用哪一種格式壓縮內(nèi)核。開發(fā)人員可以從五個選項中選擇一個。它們是
- Gzip (KERNEL_GZIP)
- Bzip2 (KERNEL_BZIP2)
- LZMA (KERNEL_LZMA)
- XZ (KERNEL_XZ)
- LZO (KERNEL_LZO)
Gzip是默認(rèn)值,所以我選擇"1"并按回車。每種壓縮格式和其他壓縮格式相比都有更高或者更低的壓縮比。更好的壓縮比意味著更小的體積,但是與低壓縮比文件相比,它解壓時需要更多的時間。
現(xiàn)在這行顯示“Default hostname (DEFAULT_HOSTNAME) [(none)]”(默認(rèn)主機(jī)名)。這里可以配置主機(jī)名。通常地,開發(fā)者這行留空(我這里留空),以便以后Linux用戶可以自己設(shè)置他們的主機(jī)名。
接下來開發(fā)者可以啟用或者禁用交換分區(qū)。Linux使用一個叫做"swap space"的獨立分區(qū)來使用虛擬內(nèi)存。這相當(dāng)于Windows中的頁面文件。典型地,開發(fā)者在這行“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”(是否支持匿名內(nèi)存換頁)回答“Y”。
接下來的一行(System V IPC (SYSVIPC) [Y/n/?])詢問內(nèi)核是否支持IPC。進(jìn)程間通信使進(jìn)程間可以通信和同步。最好啟用IPC不然許多程序?qū)o法工作。這個問題回答“Y”會使配置工具接下來問“POSIX Message Queues (POSIX_MQUEUE) [Y/n/?]”(是否使用POSIX消息隊列),這個問題只會在IPC啟用后看見。POSIX消息隊列是一種給每條消息一個優(yōu)先級的消息隊列(一種進(jìn)程間通信形式)。默認(rèn)的選擇是“Y”。按回車選擇默認(rèn)選擇(以大寫選擇指示默認(rèn))。
下一個問題“open by fhandle syscalls (FHANDLE) [Y/n/?]”(是否使用文件句柄系統(tǒng)調(diào)用來打開文件)是問當(dāng)有需要進(jìn)行文件系統(tǒng)操作的時候,程序是否允許使用文件句柄而不是文件名進(jìn)行。默認(rèn)上,這個選擇是“Y”。
有時,開發(fā)者在做了一些選擇后,某些問題會自動回答。比如,下一個問題“Auditing support (AUDIT) [Y/?]”(是否支持審計)會在沒有提示的情況下自動回答,因為先前的選項需要這個特性。審計支持會記錄所有文件的訪問和修改。下一個關(guān)于審計的問題“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”(是否啟用系統(tǒng)調(diào)用審計支持)。如果啟用,所有的系統(tǒng)調(diào)用都會記錄下來。如果開發(fā)者想要更好的性能,那么最好盡可能地禁用審計特性并且不把它加入內(nèi)核。而另外一些開發(fā)者可能為了安全監(jiān)控而啟用審計。這個問題我選擇“n”。下一個審計方面的問題“Make audit loginuid immutable (AUDITLOGINUIDIMMUTABLE) [N/y/?]”(是否要審計進(jìn)程身份ID不可變)是詢問進(jìn)程是否可以改變它們的loginuid(LOGIN User ID),如果啟用,用戶空間的進(jìn)程將無法改變他們的loginuid。為了更好的性能,我們這里禁用這個特性。(譯注:對于使用systemd這樣的系統(tǒng),其是通過中央進(jìn)程來重啟登錄服務(wù)的,設(shè)置為“y”可以避免一些安全問題;而使用較舊的SysVinit和Upstart的系統(tǒng),其需要管理員手工重啟登錄服務(wù),應(yīng)該設(shè)置為“N”)
注意:當(dāng)通過“make config”配置時,這些通過配置工具回答的問題會顯示出來但是用戶無法改變答案。當(dāng)通過"make menuconfig"配置時,無論用戶按任何鍵都無法改變選項。開發(fā)者不需要去改變這些選項,因為之前的選擇決定了另外一個問題的選擇。
via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/