平台:虛擬機Ubuntu10.04
內核版本:3.0.80
----------------------------------------------------------------------------------------------------
內核的編譯分為兩種:X86平台和ARM嵌入式平台
一.X86
平台:虛擬機Ubuntu10.04
內核版本:3.0.80
1.下載(並安裝)源碼:linux-3.0.08
https://www.kernel.org/pub/linux/kernel/
網站默認的源碼支持的為X86平台,下載源碼解壓到自定義的目錄:/root(此目錄是我自己建的,你盡可以解壓到任意目錄),解壓後生成內核文件夾:linux-3.0.80
2.下載(並安裝)終端處理庫:libncurses5-dev
這個庫用於後面的內核配置界面命令的執行環境。許多人在線安裝軟件包會遇到網速過慢的情況,這裡建議先在“新立得軟件管理”裡搜索到適合自己系統的軟件包版本,然後在下述網址搜索下載,最後離線安裝即可。
網址1:
https://launchpad.net/ubuntu
網址2:
http://packages.ubuntu.com/
3.內核配置:
終端界面,執行以下命令:
cd /root/linux-3.0.80# 進入內核根目錄
make meuconfig #進入內核配置界面
此時,出現如圖內核配置界面:
上下鍵選擇相應的選項,空格鍵更改相應的選項的屬性:
[*]把此項編入系統內核
[M]把此項以驅動模塊的形式編譯。
[]不選擇編譯此項。
雙擊Esc後退。選擇完後退出,提示是否保存,確定即可。這時候在根目錄下生成一個隱藏文件:.config
裡面以“文本”的形式記錄下你的配置信息。當你後續編譯的時候即按照這個文件的信息進行編譯。
當然,你也可以直接輸入:
make defaultconfig
來執行默認的配置信息。
這裡還要敘述一下另外兩個文件:Kcongfig和Makefie。
這兩個文件分布在內核源碼樹的各個目錄下,其中Kconfig構成了一個分布式的內核設置數據庫,每個Kconfig描述了所屬目錄源文件相關的內核設置菜單。在內核設置make menuconfig(或xconfig等)時,從Kconfig中讀出菜單,用戶在配置界面選擇後保存到.config的內核設置文件中。在內核編譯時,Makefile調用這個.config,就知道了用戶的選擇。
比如,要想添加新的驅動到內核的源碼中,要修改Kconfig,這樣就能選擇這個驅動。如圖
就是下圖USB_SURPORT的菜單信息
如果想使某個驅動被編譯,要修改Makefile,如圖:
也就是說,Kconfig負責使你的配置菜單顯示出來。而真正要想編譯出來相應的模塊是由Makefile來負責的。而上圖中等號右邊的文件名對應的c源代碼,就在Makefile當下的目錄下,Makefile負責引導編譯這些c源代碼變成相應的文件。
3.編譯:
如果是編譯整個內核,直接輸入:
make
而實際上,為了加快編譯速度我們常常執行
make -j4
其中數字4可以理解為4線程同時編譯,所以速度會快。理論上數字應為實際cpu核心+1.但是,如果你是雙核的就直接寫成 make -j4也是沒有問題的。另外需要解釋的是,你會看到一些文檔的執行命令是: make bzlmage。實際上,make命令默認的執行的是:Make bzlmage和make modules,即編譯內核和內核驅動。而生成的內核鏡像zlmage在內核源碼目錄下:arch/x86/boot或者是arch/i386/boot.
而如果你只是編譯驅動的話,請執行:
make modules
就行了。
4.安裝:
安裝模塊:
make modules_install
執行後,系統會在/lib/modules目錄下生成一個3.0.8子目錄,裡面存放著新內核的所有可加載模塊(即將編譯好的modules拷貝到/lib/modules下),注意,此目錄是系統的目錄,不是內核源碼的目錄。
安裝內核:
make install
執行後,即復制內核目錄內的.config,vmlinuz,initrd.img,System.map文件到系統/boot目錄、更新grub。
5.檢查:
dpkg--get-selections|grep linux
此命令可以查看當前安裝的內核版本號有哪些,從而看到我們是否把新內核安裝到系統了
6.重啟:
Reboot
在內核選擇界面,選擇內核版本號。對於不同的系統,有可能得修改一下啟動引導文件。這裡先不敘述。
好了,這就是X86內核的編譯與安裝。
------------------------------------------------------------------------------------------------------
二 ARM
平台:Ubuntu10.04
交叉編譯環境:arm-linux-gcc 4.5.1
目標開發板:友善之臂tiny210
內核移植版本:3.0.8
1.下載內核
2.下載終端處理庫
3.建立交叉編譯環境:
虛擬機上默認的系統的編譯器是X86的,也就是說編譯完成的內核是適用於X86機器的。所以我們必須安裝交叉編譯環境,使X86機器編譯出的內核適用於ARM平台。一般所買的開發板都配套有開發板建立交叉編譯環境的說明文檔,這裡我簡要的說明一下:
1.首先把交叉編譯器拷貝到Ubuntu系統任意目錄:
在終端命令行輸入:
cd /tmp #進入所在目錄
tar xvzfarm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /#解壓安裝
執行後,將把arm-linux-gcc安裝到/opt/FriendlyARM/toolschain/4.5.1目錄
2.編輯環境變量:
gedit /root/.bashrc #打開文件.bashrc,
最後一行添加:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路徑一定要寫對,否則將不會有效。
3.注銷計算機後,重新回到命令終端,執行命令:
arm-linux-gcc –v
會出現如下信息,這說明交叉編譯環境已經成功安裝
其實,你只需要看到最後一行gcc version 4.5.1就行了。
4.配置交叉編譯器:
如果此時我們執行make命令來編譯內核的話,系統默認的依然是調用gcc編譯器來編譯。執行:
gdit Makefile #打開源碼目錄下的Makefile文件
找到下面兩行:(192行左右)
修改為:
這個時候,我們再執行make命令,就會調用交叉編譯器。
4.修改內核:
其實,原生X86的內核是不適用於ARM開發板的,一般情況下我們需要做相應的移植工作。網上關於特定開發板的內核移植有相應的文章。而實際上如果要獨立的做內核移植的話,需要對linux內核和嵌入式開發有不錯的理解。但是一般情況下,開發板配套的都會有適合此開發板的已經移植好的內核。所以在第一步確切的應該是:從開發板獲得內核源碼。而且這樣獲得內核源碼一般會省略掉上一步中修改Makefile文件的步驟。
5.編譯內核:
執行:
make -j4
執行完後,會在arch/arm/boot生成zlmage鏡像。運用開發板配套的內核燒錄工具下載到開發板即可。
好了,就這樣!