linux 2.6.37.1核心的交叉編譯
**本文主要介紹適合arm 處理器s3c2440目標板的最新版本linux 核心 linux-2.6.37.1的交叉編譯。環境為:fedora14,編譯器arm-linux-4.3.2
1
、linux核心的編譯過程
對於 linux-2.6.37.1.tar.gz為
tar zxvf linux-2.6.37.1.tar.gz
對於 linux-2.6.37.1.tar.bz2為
tar xjvf linux-2.6.37.1.tar.bz2
之後進入linux-2.6.37.1資料夾內。:
cd linux-2.6.37.1
準備工作結束後,我們開始配置核心。在本機編譯核心時,我們可以直接make menuconfig之類,就可根據我們機器當前核心的配置生產.config檔案。但對於嵌入式當然就很困難。幸虧linux支援上百種平台。對於不同平台都有預設的配置檔案,對於我們使用的arm,可以在/arch/arm/configs資料夾下看到,我們要根據自己所使用的平台來選擇。如s3c2440目標板,可以選擇s3c2410_defconfig。之後只要執行
make arch=arm cross_compile=arm-linux- menuconfig
對於我們使用的兩個巨集arch和cross_compile,分別是指我們選擇的體系結構(linux在核心**樹arch資料夾中列出支援的體系結構)和交叉編譯器的字首。(當然也可以直接修改makefile中arch和cross_compile引數)。
這裡我們通過配置介面中「load an alternate configuration file」載入/arch/arm/configs/s3c2410_defconfig
然後我們根據平台的特性進行相應的配置,配置完畢儲存成預設配置(.config)。
之後就是編譯了,對於嵌入式大多是編譯成映象檔案,這裡編譯成zimage
make arch=arm cross_compile=arm-linux-
一般而言編譯好的映象檔案zimage是在 linux-2.6.26/arch/$arch/boot裡,本次當然是在 linux-2.6.26/arch/arm/boot找到他了,一看居然有1.7兆這麼大。怎麼變小呢?關鍵就是在make menucnfig階段了,這階段才是技術要求所在。
2
、編譯適應
s3c2440
目標板的
linux
核心1
)、首先linux啟動過程中需要校驗machine id,因此我們修改linux核心的檔案arch/arm/tools/mach-types中:
s3c2440 arch_s3c2440 s3c2440 1008 //1008,
與uboot中一致
說明:不建議直接修改
arch/arm/kernel/head.s
檔案通過
r1暫存器直接傳遞
machine id
給核心。
修改核心檔案arch/arm/plat-s3c24xx/common-smdk.c檔案中nand flash分割槽。這裡只建立四個分割槽,其他多餘的分割槽遮蔽掉(這裡的分割槽需要和u-boot中的分割槽資訊一致)
static struct mtd_partition smdk_default_nand_part = ,
[1] = ,
[2] = ,
[3] = , };
2)、配置核心模組的功能,有幾種方式可以進行介面選擇:
make menuconfig(文字選單的配置方式,在有字元終端下才能使用)
make xconfig(圖形視窗模式的配置方式,圖形視窗的配置比較直觀,必須支援xwindow下才能使用)
make oldconfig(文字配置方式,在原核心配置的基礎修改時使用)
這裡使用make menuconfig命令。
1> [*]enable loadable module support--->
[*]forced module loading
[*]module unloading
2> system type--->
s3c2410 machines--->
[*]smdk2410/a9m2410
選上 其餘不選
s3c2440 machines--->
[*]smdk2440
[*]smdk2440 with s3c2440 cpu module
,其餘不選
其餘的machines下選項全部不選(如2400,2412,2442,2443)
3> kernel features--->
[*]use the arm eabi to compile the kernel
4> boot options-
noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttysac0
5> userspace binary formats--->
[*]kernel support for elf binaries
其它的可以全部不選。
6>
選擇支援yaffs2檔案系統
filesystem--->
miscellaneous filesystems--->
<*>yaffs2 file system support
[*] lets yaffs do its own ecc
native language support
<*> codepage 437 (united states,canada)
<*>simplified chinese charset(gb2312)
<*>traditional chinese charset(big5)
<*>nls iso 8859-1(latin1:western european languages)
<*>nls utf-8
配置完成以後,我們就可以通過make arch=arm cross_compile=arm-linux- 命令生成我們需要的zimage映象檔案了,然後再通過mkimage工具生成可以由u-boot直接引導的uimage映象檔案了。
說明:原始的linux核心是不支援yaffs2檔案系統的,關於檔案系統的支援和製作參見本博其他文章。
首先是要構建.config檔案,因為是交叉編譯用於arm的核心,所以先載入預設.config檔案
$make at91sam9260ek_defconfig #載入預設的.config
然後進入menuconfig,修改設定 general steup ---> cross-compiler tool prefix 值為: (arm-linux-)
注:括號內的值
雙擊esc退出,注意儲存。
$make #編譯
linux 核心交叉編譯
我使用執行make menuconfig配置核心。使用之前,先執行make mrproper,該命令會刪除核心源 中的.config檔案和.o檔案保證源 的乾淨。在執行make menuconfig時,這裡面會涉及到幾個資料夾 linux核心根目錄下的scripts資料夾 arch arch kco...
linux核心測試 Linux核心測試的生命週期
linux核心測試 在針對linux核心的持續整合測試中 我寫了關於 持續核心整合 cki 專案及其更改核心開發人員和維護人員工作方式的使命。本文深入 了該項目的更多技術方面以及所有部分如何組合在一起。核心中每一項令人興奮的功能,改進和錯誤都始於開發人員提出的更改。這些更改將出現在不同核心儲存庫的大...
linux 交叉編譯環境的搭建
arm linux gcc 3.4.1.tgz arm linux gcc 4.3.3.tgz 通過 和 windows 的共享資料夾將其考到linux中 我將其放在 opt arm gcc 下 開啟超級終端 輸入 cd opt arm gcc 回車 超級終端 tar zvxf arm linux ...