新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式linux-arm交叉編譯工具鏈的構建

        嵌入式linux-arm交叉編譯工具鏈的構建

        作者: 時間:2016-11-11 來源:網絡 收藏
        第一步:首先下載如下源文件
        binutils-2.16.tar.gz,gcc-3.4.4.tar.bz2,t-linux.diff,glibc-2.3.5.tar.gz,glibc-linuxthreads-2.3.5.tar.gz,ioperm.c.diff,linux-2.6.11.12tar.gz并且把所有的源文件放入/home/zmj/usr/arm/src文件夾中,其中zmj是用戶名。并把如下腳本,寫入一個文件,例如文件名為buildchain.sh,并把該文件放入usr目錄下。
        第二步:運行buildchain.sh腳本即可。其中第七步是不需要的,將來自己編譯內核的時候還要重新配置,故可以刪去。
        #!/bin/bash

        # Setup

        PREFIX=/home/zmj/usr/arm
        TARGET=arm-unknown-linux-gnu
        SYSROOT=${PREFIX}/sysroot
        export ARCH=arm
        export CROSS_COMPILE=${TARGET}-
        export PATH=$PATH:${PREFIX}/bin
        mkdir -p ${PREFIX}/src

        ## Get the sources
        #
        #cd ${PREFIX}/src
        #tar xvfz binutils-2.16.tar.gz
        #mkdir -p BUILD/binutils-2.16
        #cd BUILD/binutils-2.16
        # ../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
        #make 2>&1 | tee make.out
        #make install 2>&1 | tee -a make.out
        #
        # Linux Kernel Headers

        #cd ${PREFIX}/src
        #tar xvfz linux-2.6.11.12.tar.gz
        #ln -s linux-2.6.11.12 linux
        #cd linux
        #make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} menuconfig
        #make include/linux/version.h
        #mkdir -p ${SYSROOT}/usr/include
        #cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
        #cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
        #cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic
        ##
        ## Glibc headers
        #
        #cd ${PREFIX}/src
        ##tar xvfz glibc-2.3.5.tar.gz
        ##patch -d glibc-2.3.5 -p1 #cd glibc-2.3.5
        ##tar xvfj ../glibc-linuxthreads-2.3.5.tar.gz
        #cd ..
        #mkdir BUILD/glibc-2.3.5-headers
        #cd BUILD/glibc-2.3.5-headers
        #../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
        #make cross-compiling=yes install_root=${SYSROOT} install-headers 2>&1 | tee make.out
        #touch ${SYSROOT}/usr/include/gnu/stubs.h
        #touch ${SYSROOT}/usr/include/bits/stdio_lim.h
        #
        # Step 4: stage 1 gcc
        #
        #cd ${PREFIX}/src
        #bunzip2 -c gcc-3.4.4.tar.bz2 | tar xvf -
        #patch -d gcc-3.4.4 -p1 < flow.c.diff
        #patch -d gcc-3.4.4 -p1 < t-linux.diff
        #mkdir -p BUILD/gcc-3.4.4-stage1
        #cd BUILD/gcc-3.4.4-stage1
        #../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
        #make 2>&1 | tee make.out
        #make install 2>&1 | tee -a make.out
        #
        # Step 5: glibc

        #cd ${PREFIX}/src
        #mkdir BUILD/glibc-2.3.5
        #cd BUILD/glibc-2.3.5
        #BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.3.5/configure --prefix=/usr --build=i686-pc-linux-gnu--host=arm-unknown-linux-gnu --target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
        #
        #make 2>&1 | tee make.out
        #make install_root=${SYSROOT} install

        # Step 6: stage 2 gcc

        #cd ${PREFIX}/src
        #mkdir BUILD/gcc-3.4.4
        #cd BUILD/gcc-3.4.4
        #../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
        #make 2>&1 | tee make.out
        #make install 2>&1 | tee -a make.out
        #cd ../..

        # Step 7: Linux kernel

        cd ${PREFIX}/src/linux
        make zImage
        make modules
        make INSTALL_MOD_PATH=${SYSROOT} modules_install

        注意:文中的大部分#號是自己當初為了分步編譯差錯方便而屏蔽掉的部分。自己編譯的時候可以去掉。順便說一下我是在suse環境下建立這個交叉編譯環境的,內核是2.6以上的版本,其中—build=i686-pc-linux-gnu。
        幾個簡單的命令::set nu顯示文本行號。:1,5s/^/#/g可以在文本的1~5行添加一個#號,也即屏蔽掉這幾行。1,5s/^#//g去掉文本1~5行文本開頭的#號。

        第三步測試程序Helloworld.c

        #include《stdio.h》
        int main( )
        {
        printf(“Hello ,world!n”);
        return 0;
        }
        可以在腳本中/etc/bash.bashrc中寫入環境變量,也可以直接寫如下:
        export PATH=/home/zmj/usr/arm/arm/bin:$PATH其中bin中存放的是自己交叉編譯器的路徑。
        cd ..到helloworld.c的目錄。# arm-unknown-linux-gnu-gcc helloworld.c完畢!


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 晴隆县| 辽阳县| 紫阳县| 舒兰市| 禄劝| 忻城县| 葵青区| 桃江县| 温宿县| 梁山县| 囊谦县| 额济纳旗| 广水市| 沙坪坝区| 木里| 织金县| 蕉岭县| 武夷山市| 大余县| 新巴尔虎右旗| 白银市| 建水县| 林州市| 桦南县| 南皮县| 林西县| 东兰县| 虎林市| 迭部县| 衢州市| 福贡县| 塔河县| 普定县| 香河县| 福安市| 贞丰县| 咸阳市| 黄大仙区| 如东县| 启东市| 建始县|