![]() |
|
Linux內核配置與編譯 |
|
1.內核配置 編譯內核之前要先配置。為了正確、合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,主要有以下4個方面需要考慮。 ● 尺寸小。自己定制內核可以使代碼尺寸減小,運行將會更快。 Linux內核源代碼支持20多種體系結構的處理器,還有各種各樣的驅動程序。因此,在編譯前必須根據特定平臺配置內核源代碼。Linux內核有上千個配置選項,配置相當復雜。所以,Linux內核源代碼組織了一個配置系統。 Linux內核配置系統可以生成內核配置菜單,方便內核配置。配置系統主要包含Makefile、Kconfig和配置工具,可以生成配置接口。配置接口是通過工具來生成的,工具通過Makefile編譯執行,選項則是通過各級目錄的Kconfig文件定義的。 Linux內核配置命令有make config、make menuconfig和make xconfig,它們分別是字符接口、ncurses光標菜單和X-window圖形窗口的配置接口。字符接口配置方式需要回答每一個選項提示,逐個回答內核上千個選項幾乎是行不通的;圖形窗口的配置接口很好,光標菜單也方便實用。例如,執行make xconfig,主菜單接口如圖1.5所示。
2.內核編譯 (1)下載內核源碼。 從//www.kernel.org/pub/Linux/kernel/v2.6/Linux-2.6.14.tar.bz2下載Linux-2.6.14內核(或者更高的版本)至/source/kernel目錄。解開壓縮包,并進入內核源碼目錄,具體過程如下: $ tar jxvf Linux-2.6.14.tar.bz2 (2)修改內核目錄樹根下的Makefile,指明交叉編譯器: $ vim Makefile 找到ARCH和CROSS_COMPILE,修改: ARCH = arm (3)設置環境變量: $ export PATH=$PATH:/usr/local/arm/3.3.2/bin (4)配置內核產生.config文件: $ cp arch/arm/configs/smdk2410_defconfig .config (5)輸入內核配置命令,進行內核選項的選擇,命令如下: $ make menuconfig 命令執行成功以后,會看到如圖1.6所示的界面。其實我們在圖1.5中看到過同樣功能的界面,那個圖也是內核選項配置界面,只不過那個界面在X-window下才能執行。
在各級子菜單項中,選擇相應的配置時,有3種選擇,它們代表的含義分別如下。 ● Y:將該功能編譯進內核。 如果使用的是make xconfig,使用鼠標就可以選擇對應的選項。如果使用的是make menuconfig,則需要使用回車鍵進行選取。 在每一個選項前都有個括號,有的是中括號,有的是尖括號,還有的是圓括號。用空格鍵選擇時可以發現,中括號中要么是空,要么是“*”;而尖括號中可以是空、“*”和“M”。這表示前者對應的項要么不要,要么編譯到內核中;后者則多一樣選擇,可以編譯成模塊。而圓括號的內容是要你在所提供的幾個選項中選擇一項。 在編譯內核的過程中,麻煩的事情就是配置這步工作了。初次接觸Linux內核的開發者往往弄不清楚該如何選取這些選項。實際上,在配置時,大部分選項可以使用其默認值,只有小部分需要根據用戶不同的需要選擇。選擇的原則是將與內核其他部分關系較遠且不經常使用的部分功能代碼編譯成為可加載模塊,這有利于減小內核的長度,減少內核消耗的內存,簡化該功能相應的環境改變時對內核的影響;不需要的功能就不要選;與內核關系緊密而且經常使用的部分功能代碼直接編譯到內核中。 (6)執行下面的命令開始編譯: $ make zImage 在編譯過程中會出現一些錯誤,可以看到錯誤發生在/drivers/video/console中。有時是因為我們選擇了“VGA text console”選項,去掉這個選項即可。這個選項在“Device Driver”→“Graphics Support”→“console display driver support”下。 總之,這類錯誤是由于內核配置不當引起的,不需要修改內核源碼。 如果按照默認的配置,沒有改動的話,編譯后系統會在arch/arm/boot目錄下生成一個zImage文件,這個文件就是剛剛生成的內核文件。我們需要把它加載到開發板中運行,加以驗證。 (7)下載Linux內核。加載到開發板的方式是通過U-Boot提供的網絡功能,直接下載到開發板的內存中。首先把內核復制到tftp服務器的根目錄下(見tftp配置文件說明)。在我們的實驗中,這個目錄在/tftpboot下,所以我們在內核源碼目錄中直接執行下面命令: $ cp arch/arm/boot/zImage /tftpboot 啟動開發板,在U-Boot界面下輸入下面一組命令: FS2410# printenv (查看當前開發板的環境變量) 如果網絡暢通,執行下面的命令下載內核: FS2410#tftp 30008000 zImage (把Linux內核下載到開發板內存的30008000地址處) 此時可以在超級終端中觀察到內核的啟動現象,不過內核在此時還不會成功啟動,因為還需要做一些其他的移植工作。 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈接:
1、Linux內核結構介紹 |