ARM交叉编译链的制作

来源:互联网 发布:4m宽带能看网络电视吗 编辑:程序博客网 时间:2024/05/22 02:28
什么是交叉编译这里就不用多说了,这里给出两种制作的方法。
1.    直接下载已经编译好的文件。例如:http://arm.linux.org.uk,这里提供已经编译好的cross,如cross- 3.3.2.tar.bz2,cross-3.0.tar.bz2。直接下载某个包后解压,然后创建合适的链接或者输出环境变量即可调用。
    这种做法操作很简单,但是不能根据自己的需求去定义,只能选择已经编译好的东西。
2.    自己动手利用crosstool来制作。
    A. 在CROSSTOOL官方网站下载源码包,解压,进入解压后的目录。
        $sudo wget http://kegel.com/crosstool/crosstool-0.42.tar.gz
        $sudo tar -xzvf crosstool-0.42.tar.gz
        $cd crosstool-0.42

    B. 以ROOT建立目录,存放生成的交叉编译链
        改变该目录的 所有者为普通用户
        例如,存放生成的交叉编译链目录为/opt/crosstool,如下所示:

        sudo mkdir /opt/crosstool
        sudo chown $USER /opt/crosstool

    C.    修改针对目标板的脚本文件。
    $sudo vi demo-arm.sh

        (1)这几个环境变量可以根据实际情况修改
            TARBALLS_DIR=$HOME/downloads
            RESULT_TOP=/opt/crosstool
            export TARBALLS_DIR RESULT_TOP
            GCC_LANGUAGES="c,c++"
            export GCC_LANGUAGES
        (2)在若干行eval语句中选择要建立的交叉编译链的组合,去掉该行eval的#号。例如要做gcc为3.3.3,glibc为2.3.2的工具链
            eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

    D. 修改目标板脚本文件demo-arm.sh中eval那一行出现的体系结构的配置文件
        $sudo vi arm.dat

        KERNELCONFIG=`pwd`/arm.config
        TARGET=arm-unknown-linux-gnu
        TARGET_CFLAGS="-O"

        可以修改TARGET变量为
        TARGET=arm-S3C2410-linux-gnu(你的arm型号)

    E.修改目标板脚本文件demo-arm.sh中eval那一行出现的工具链的匹配文件
        $sudo vi gcc-3.4.5-glibc-2.3.6.dat

        BINUTILS_DIR=binutils-2.15
        GCC_DIR=gcc-3.3.3
        GLIBC_DIR=glibc-2.3.2
        LINUX_DIR=linux-2.4.26
        GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2

        以上变量要根据实际情况修改。不过
        例如想下载linux2.6的版本,并且下载gdb最新的版本。内核具体的版本要参照http://kernel.org/和ftp://ftp.gnu.org/pub/gnu/gdb。例如。
        LINUX_DIR=linux-2.6.12.1
        GDB_DIR=gdb-6.0

    F.以普通用户运行脚本
        $sudo sh demo-arm.sh
        进入漫长的等待过程中……
3. 安装完成后路径设置和测试。
        编辑~/.bash_profile,在其中export PATH前加入这样一行,              PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
,改完后我的是这样的
    # User specific environment and startup programs

    PATH=$PATH:$HOME/bin
    PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
    export PATH
    unset USERNAME

      然后就好了。可以开始测试使用了。测试的方法很简单,随便找个程序源码编译一下就好了。这里用的这些编译器生成的是二进制文件,和平时的gcc生成的可执行文件并不相同。例如我测试时的文件是test.c,
    #include<stdio.h>
    int main()
    {
        printf("Hello!");
        return 0;
    }

        调用新的arm-linux-gcc来编译:arm-S3C2410-linux-gnu-gcc -o test test.c,这时生成的test文件是一个二进制的可执行文件,并不是我们平时常用的,所以在PC上执行这个文件的话是不行的,系统会提示:bash: ./test: cannot execute binary file。所以不能用这种方法来测试交叉编译是否成功。而应改采用file命令,例如我的是这样的:
        file test
       结果如下:
        test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped
       如果出现这样的结果说明交叉编译环境已经安装成功。否则…………重新想办法吧……


        Note:在第二种方法中,gcc,gdb等文件的下载方法有两种,一是设置好网络后让shell程序自己去下载,这种方法简单,但是下载速度不敢恭维。 另外一种是自己使用下载工具去下载,然后将存放路径告诉demo-arm.sh,即 2.C里面的内容。这种方法速度让人满意。推荐使用。
 

来自:http://hi.baidu.com/yangyingchao/blog/item/1350e488bb803095a4c272b2.html