Linux 2 6 37 1核心的交叉編譯

2021-06-18 00:44:53 字數 3446 閱讀 3623

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階段了,這階段才是技術要求所在。 

、編譯適應

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 ...