Linux中國

戴文的Linux內核專題:05 配置內核 (1)

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

  • 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』的意思不同,作者也作出了解釋:http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/#post-13307)&#12290&%2312290);

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

配置:

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

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

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

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

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

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

  1. Gzip (KERNEL_GZIP)
  2. Bzip2 (KERNEL_BZIP2)
  3. LZMA (KERNEL_LZMA)
  4. XZ (KERNEL_XZ)
  5. LZO (KERNEL_LZO)

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

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

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

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

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

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

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

via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/

譯者:geekpi 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國