歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

自己動手制作交叉編譯工具鏈

准備工作

這個過程其實是很簡單的。 之所以經常會失敗, 大部分都是因為configure時使用的配置選項不正確導致編譯出錯。所以,出錯時最好的解決辦法是根據提示,把相關配置選項的真正含義搞明白,然後再做取捨;如果一味地去網上搜索別人的辦法,即使解決了錯誤,自己也還是知其然而不知其所以然。

工作環境:普通的x86電腦,Ubuntu 9.04操作系統,目標是制作ARM交叉編譯工具鏈,支持EABI和Soft Float。

使用的軟件包版本:Binutils-2.19.1; GCC-4.4.0; Glibc-2.9; Linux-2.6.29; gmp-4.3.0; mpfr-2.4.1; 所需的軟件包大都可以從中國科技大學的鏡像服務器上下載:http://oss.ustc.edu.cn, 教育網內速度應該是很快的。

工作目錄結構:

package 存放下載到的原始文件壓縮包

patch 存放一些補丁文件

source 存放解壓縮後的源代碼,

build     存放編譯過程中生成的所有文件,不在源代碼目錄下編譯是為了避免對源代碼文件夾造成影響

result   存放編譯後生成的最終結果放在此處

幾個環境變量:

PACKAGE_DIR=${PWD}/package

BUILD_DIR=${PWD}/build

PATCH_DIR=${PWD}/patch

RESULT_DIR=${PWD}/result

SOURCE_DIR=${PWD}/source

TARGET_PREFIX=${RESULT_DIR}/${TARGET}

HOST=i686-pc-linux-gnu

TARGET=arm-hwlee-linux-gnueabi

注意這裡的arm-*-linux-gnueabi,(中間的星號部分是任意的),這種寫法是固定格式的,可以在Binutils軟件包的README文件裡找到格式說明。其中gnueabi表示創建的交叉編譯器支持EABI。

什麼是EABI?簡單的說,就是C/C++源代碼編譯成匯編碼的約定,如符號表的生成,全局變量的初始化等。我們可以把ABI理解為一套規則,這套規則一般包括定義了以下內容: 1.應用程序如何發出系統調用來trap到內核態。 2.如何使用機器的寄存器。比如,RISC處理器的ABI就要規定用那個通用寄存器來作stack pointer和frame pointer。3.規定如何進行procedure call。這是從網上找來的別人的介紹,等我把它搞透徹了再通過一些實驗來具體說明。

使用shell腳本自動創建目錄、下載軟件包、自動解壓和打補丁, 本文中所敘述的所有步驟都寫在Shell腳本中。

Copyright © Linux教程網 All Rights Reserved