建立ARM Linux交叉編譯環境實踐

來源:互聯網
上載者:User

 

一、準備工作              首先需要一台運行Linux作業系統的PC以完成我們的編譯工作。       其次要準備如下一些源檔案。        1、源檔案準備         binutils-2.14.tar.gz          ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz         gcc-core-2.95.3.tar.gz          ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz         gcc-g++2.95.3.tar.gz          ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz         glibc-2.2.4.tar.gz          ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz         glibc-linuxthreads-2.2.4.tar.gz          ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz         linux-2.4.21.tar.gz         ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz         patch-2.4.21-rmk1.gz # linux kernel patch for arm         ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz         binutils-2.14.tar.gz這個壓縮包包含有ld,ar,as等一些產生或者處理二進位檔案的工具。    gcc-core-2.95.3.tar.gz這個壓縮包是GCC的主體部分,GCC是GNU Compiler Collection的簡稱,顧名思義,它能夠編譯很多種進階語言,例如C、C++,Java等,而這個壓縮包中含有C編譯器,及公用部分,而對其他語言的支援,採用另外的壓縮包單獨發布。    gcc-g++2.95.3.tar.gz,這個壓縮包就是為使GCC能夠編譯C++程式而單獨發布的。    glibc-2.2.4.tar.gz,libc是很多使用者層應用都要用到的庫,kernel和bootloader不需要這個庫的支援,這個庫主體部分封裝在這個壓縮包內。    glibc-linuxthreads-2.2.4.tar.gz,這是Libc用於支援Posix線程而單獨發布的一個壓縮包。    linux-2.4.21.tar.gz,這個壓縮包就是Linux的核心。    patch-2.4.21-rmk1.gz,這個壓縮包是用來給Linux核心打補丁,以使其可以支援ARM的硬體平台。        2、工作目錄搭建       我們建立如下的分類樹結構       mkdir arm       mkdir tool-chain       mkdir build-dir       mkdir src-dir       mkdir setup-dir       mkdir kernel              arm這個目錄是我們的最頂層工作目錄,我們所有的編譯工作都在這裡完成。       tool-chain這個目錄是我們交叉編譯工具的安裝位置,它下面的bin子目錄存放我們建立好的編譯器,彙編器,連接器,以及編譯好的C庫也會安裝到這個目錄之下。       setup-dir這個目錄用來存放我們下載的壓縮包。       src-dir這個目錄用於存放binutils,gcc,glibc解壓之後的源檔案。       kernel這個目錄用來存放核心檔案,對核心的配置、編譯工作將在這個目錄中完成。       build-dir用來編譯src-dir中的源檔案,具體就是binutils,gcc,glibc的編譯工作將在這個目錄下完成。這種源檔案目錄和編譯目錄分離的編譯方式是GNU所推薦的。              cd ./src-dir       tar –xvzf ../setup-dir/ binutils-2.14.tar.gz       tar –xvzf ../setup-dir/ gcc-core-2.95.3.tar.gz       tar –xvzf ../setup-dir/ glibc-2.2.4.tar.gz       tar –xvzf ../setup-dir/ glibc-linuxthreads-2.2.4.tar.gz –directory=./glibc-2.2.4        這樣我們在src-dir目錄下就形成了3個源檔案目錄binutils-2.14,gcc-core-2.95,3,glibc-2.2.4,其中分別存放著binutils tools,gcc,glibc的原始碼。接下來我們到build-dir中建立3個與這三個源檔案目錄對應的編譯目錄。              cd ../build-dir       mkdir ../build-dir/build-binutils       mkdir ../build-dir/build-gcc       mkdir ../build-dir/build-glibc        我們將在這三個目錄中完成對binutils tools, gcc, glibc的配置和編譯工作。下面還要把核心檔案解壓到kernel目錄下,並打補丁。        cd ../kernel       tar –xvzf ../setup-dir/ linux-2.4.21.tar.gz       cd ./linux-2.4.21       patch –p1 < ../../setup-dir/ patch-2.4.21-rmk1  二、開始建立 1、  確定幾個系統變數cd ../../export TARGET=arm-linuxexport PREFIX=../arm/tool-chainexport TARGET_PREFIX=$PREFIX/$TARGETexport KERNEL_SOURCE_LOCATION=../arm/kernel/linux-2.4.21export PATH=$PREFIX/bin:$PATH        幾個系統變數經常要用到,TARGET定義了目標機,PREFIX是工具鏈的安裝目錄,KERNEL_SOURCE_LOCATION是核心檔案位置。 2、  建立binutils       運行如下命令來建立binutils       cd ./build-dir/build-binutils       configure ../../src-dir/binutils-2.14/configure –target=$TARGET –prefix=$PREFIX       make        make install       這時$PREFIX/bin下建立了一些檔案,包括arm-linux-ld,arm-linux-as等。3、  編譯核心        cd ../../kernel/linux-2.4.21              改Makefile檔案使       ARCH = arm       CROSS_COMPILE=arm-linux-              make menuconfig       在System Types中選擇正確的硬體類型        make dep        之後執行如下操作       mkdir $TARGET_PREFIX/include       cp dR $KERNEL_SOURCE_LOCATION/include/arm-asm                      RGET_PREFIX/include/asm       cp dR $KERNEL_SOURCE_LOCATION/include/linux                      RGET_PREFIX/include/linux 4、  建立boot-trap gcc,這個GCC沒有glibc庫的支援,所以只能用於編譯核心,bootloader等,後面建立C庫也要用到這個編譯器,所以建立它主要是為建立C庫做準備,如果只想編譯核心和bootloader那麼,就可以到此結束。       cd ../../build-dir/build-gcc       ../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX               --with-headers=$ERNEL_SOURCE_LOCATION/include –enable-language=c               --disable-threads       然後修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux檔案,在              TARGET_LIBGCC2_CFLAGS中添加如下兩個定義              -Dinhibit-libc –D__gthr_posix_h       make       make install       這時$PREFIX/bin下建立了一些檔案,主要建立了arm-linux-gcc。5、  建立gblic       cd ../build-glibc       export CC=arm-linux-gcc       ../../src-dir/glibc-2.2.4/configure –host=$TARGET –prefix=$TARGET_PREFIX                             --enable-add-ons       make        make install 6、  建立功能健全的GCC,並建立G++       在成功建立了libc之後,我們就可以建立功能豐富的GCC編譯器了,並且可以建立支援編譯C++程式的G++。       cd ../../src-dir       tar –xvzf ../setup-dir/ gcc-g++2.95.3.tar.gz       cd ../build-dir/build-gcc       export CC=gcc       ../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX               –enable-language=c,c++              然後修改src-dir/gcc-2.95.3/gcc/config/arm/t-linux檔案,在              TARGET_LIBGCC2_CFLAGS中去除如下兩個定義              -Dinhibit-libc –D__gthr_posix_h        make        make install 7,至此我們成功的建立了ARM Linux的交叉編譯工具

from:  http://www.eeblog.org/user1/sohonas/archives/2006/124.asp

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.