ARM版Linux核心編譯與裁剪
Win7下使用Oracle VM VirtualBox搭建的Ubuntu11.10虛擬機器
1、建立交叉編譯環境:
下載交叉編譯器arm-linux-gcc-3.4.1.tar.bz2
tar jxvf arm-linux-gcc-3.4.1.tar.bz2
這樣就會在當前目錄產生一個./usr/local/arm/3.4.1目錄,我進入local目錄,將arm目錄複製到/usr/local目錄:
cd ./usr/local
cp –rf ./arm /usr/local
這裡複製路徑沒有固定要求,主要在下面設定環境變數時相對應就行:
使用sudo vim /etc/profile在/etc/profile檔案的最後加上
export PATH=$PATH:/usr/local/arm/3.4.1/bin/(如果已經存在PATH則只需將/usr/local/arm/3.4.1/bin/新增在後面即可,用”:”與其他變數分割)
然後使用source /etc/profile命令使我們對/etc/profile檔案的修改立即生效,而不用重新登入,這樣在編譯核心時系統就可以找到我們所指定的編譯器了
2、下載Linux核心原始碼
到www.kernel.org上下載linux-2.6.30.4.tar.bz2原始碼包,在當前使用者目錄(我的是:/home/billxiang/)下新建資料夾linux,複製linux-2.6.30.4.tar.bz2到linux資料夾中並解壓:
mkdirlinux
cp ./linux-2.6.30.4.tar.bz2 ./linux
cd ./linux
tar jxvf linux-2.6.30.4.tar.bz2
這樣會在我們新建的linux資料夾中產生一個linux-2.6.30.4資料夾
檢查linux-2.6.30.4資料夾中Makefile,找到ARCH和CROSS_COMPILE的定義,改為:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
這是指定我們所編譯核心所支援的cpu是ARM架構的,所使用的交叉編譯器字首是arm-linux-(這可以在我們所設定的環境變數所指定的目錄下看到)
3、編譯核心
下面就可以開始編譯linux核心了,在linux-2.6.30.4資料夾下直接執行make:
make
卻出現
cc1: error: invalid option ‘abi=aapcs-linux’
錯誤
這裡通過make menuconfig命令,在配置選單中將Kernel Features中的EABI項去掉即可:
make menuconfig
通過上下鍵選中Kernel Features,再回車進入
通過上下鍵選中EABI項後,按’n’鍵取消該項(使方括號中的’*’號消失),然後通過左右鍵選擇Exit退出,並儲存設定,再次make(需要等待一段時間):
make
編譯成功後可以在./arch/arm/boot目錄下看到生成的zImage檔案,這裡沒有進行裁剪,大小為1.9MB
4、裁剪核心
核心裁剪我還是使用圖形介面進行選擇操作,還是使用上面用到的makemenuconfig命令:
make menuconfig
在圖形選單介面中通過上下鍵選中Networking suport後按’n’鍵取消對網路的支援,退出、儲存設定後再次make:
make
等待一段時間編譯完成後,再次檢視生成的zImage檔案發現只有1.5MB了,說明裁剪成功。