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