新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 制作ARM Linux交叉編譯環境

        制作ARM Linux交叉編譯環境

        作者: 時間:2016-11-09 來源:網絡 收藏
        一、準備工作


        首先需要一臺運行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 //unsuccess

        這樣我們在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//unsuccess


        二、開始創建

        1、 確定幾個系統變量
        cd ../../
        export TARGET=arm-linux
        export PREFIX=../arm/tool-chain
        export TARGET_PREFIX=$PREFIX/$TARGET
        export KERNEL_SOURCE_LOCATION=../kernel/linux-2.4.21
        export PATH=$PREFIX/bin:$PATH

        本文引用地址:http://www.104case.com/article/201611/317980.htm

        創建目錄

        幾個系統變量經常要用到,TARGET定義了目標機,PREFIX是工具鏈的安裝目錄,KERNEL_SOURCE_LOCATION是內核文件位置。

        2、 創建binutils
        運行如下命令來創建binutils
        cd ./build-dir/build-binutils
        ../../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文件使
        make ARCH = arm CROSS_COMPILE=arm-linux-

        編譯linux的內核,進入該目錄,命令make menuconfig
        之后,出現下面的錯誤:
        rm -f include/asm-arm/arch include/asm-arm/proc
        (cd include/asm-arm; ln -sf arch-mx2ads arch; ln -sf proc-armv proc)
        rm -f include/asm
        ( cd include ; ln -sf asm-arm asm)
        make -C scripts/lxdialog all
        make[1]: Entering directory `/home/lhs/HHARMMX21/linux-2.4.20/scripts/lxdialog
        /usr/bin/ld: cannot find -lncurses
        collect2: ld returned 1 exit status
        -e
        >> Unable to find the Ncurses libraries.
        >>
        >> You must have Ncurses installed in order
        >> to use make menuconfig

        make[1]: * [ncurses] Error 1
        make[1]: Leaving directory `/home/lhs/HHARMMX21/linux-2.4.20/scripts/lxdialog
        make: * [menuconfig] Error 2

        解決方法:

        執行命令:sudo apt-get install ncurses-dev即可!

        (ncurses 用于make menuconfig界面顯示)


        make menuconfig
        在System Types中選擇正確的硬件類型

        make dep

        之后執行如下操作
        mkdir $TARGET_PREFIX/include
        cp-r $KERNEL_SOURCE_LOCATION/include/asm-arm
        $TARGET_PREFIX/include/asm

        [cp -r kernel/linux-2.4.21/include/asm-arm arm/tool-chain/arm-linux/include/asm]
        cp-r $KERNEL_SOURCE_LOCATION/include/linux
        $TARGET_PREFIX/include/linux
        [cp -r kernel/linux-2.4.21/include/linux arm/tool-chain/arm-linux/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=arm/tool-chain --with-headers=arm/kernel/linux-2.4.21/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//unsuccess
        這時$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//unsuccess

        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的交叉編譯工具



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 贡嘎县| 从江县| 满城县| 黎城县| 尤溪县| 揭阳市| 历史| 晋州市| 呼伦贝尔市| 社会| 贡嘎县| 万载县| 临漳县| 芦山县| 泉州市| 蓝田县| 亳州市| 镇远县| 汾阳市| 鄂州市| 祥云县| 邵武市| 南和县| 滁州市| 大新县| 修文县| 辛集市| 抚松县| 项城市| 邹城市| 商丘市| 于都县| 松潘县| 上林县| 遵义县| 邹平县| 会同县| 龙泉市| 镇宁| 湛江市| 扬中市|