欢迎来到天天文库
浏览记录
ID:8806952
大小:25.64 KB
页数:10页
时间:2018-04-08
《arm交叉编译链的制作》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ARM交叉编译链的制作1.直接下载已经编译好的文件。例如:http://arm.linux.org.uk,这里提供已经编译好的cross,如cross-3.3.2.tar.bz2,cross-3.0.tar.bz2。直接下载某个包后解压,然后创建合适的链接或者输出环境变量即可调用。这种做法操作很简单,但是不能根据自己的需求去定义,只能选择已经编译好的东西。2.自己动手利用crosstool来制作。A.在CROSSTOOL官方网站下载源码包,解压,进入解压后的目录。$sudowgethttp://kegel.com/crosstool/crosstool-0.42.tar
2、.gz$sudotar-xzvfcrosstool-0.42.tar.gz$cdcrosstool-0.42B.以ROOT建立目录,存放生成的交叉编译链改变该目录的所有者为普通用户例如,存放生成的交叉编译链目录为/opt/crosstool,如下所示:sudomkdir/opt/crosstoolsudochown$USER/opt/crosstoolC.修改针对目标板的脚本文件。$sudovidemo-arm.sh(1)这几个环境变量可以根据实际情况修改TARBALLS_DIR=$HOME/downloadsRESULT_TOP=/opt/crosstoolexpor
3、tTARBALLS_DIRRESULT_TOPGCC_LANGUAGES="c,c++"exportGCC_LANGUAGES(2)在若干行eval语句中选择要建立的交叉编译链的组合,去掉该行eval的#号。例如要做gcc为3.3.3,glibc为2.3.2的工具链eval`catarm.datgcc-3.4.5-glibc-2.3.6.dat`shall.sh--notestD.修改目标板脚本文件demo-arm.sh中eval那一行出现的体系结构的配置文件$sudoviarm.datKERNELCONFIG=`pwd`/arm.configTARGET=arm-un
4、known-linux-gnuTARGET_CFLAGS="-O"可以修改TARGET变量为TARGET=arm-S3C2410-linux-gnu(你的arm型号)E.修改目标板脚本文件demo-arm.sh中eval那一行出现的工具链的匹配文件$sudovigcc-3.4.5-glibc-2.3.6.datBINUTILS_DIR=binutils-2.15GCC_DIR=gcc-3.3.3GLIBC_DIR=glibc-2.3.2LINUX_DIR=linux-2.4.26GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
5、以上变量要根据实际情况修改。不过例如想下载linux2.6的版本,并且下载gdb最新的版本。内核具体的版本要参照http://kernel.org/和ftp://ftp.gnu.org/pub/gnu/gdb。例如。LINUX_DIR=linux-2.6.12.1GDB_DIR=gdb-6.0F.以普通用户运行脚本$sudoshdemo-arm.sh进入漫长的等待过程中……3.安装完成后路径设置和测试。编辑~/.bash_profile,在其中exportPATH前加入这样一行,PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-
6、S3C2410-linux-gnu/bin:$PATH,改完后我的是这样的#UserspecificenvironmentandstartupprogramsPATH=$PATH:$HOME/binPATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATHexportPATHunsetUSERNAME然后就好了。可以开始测试使用了。测试的方法很简单,随便找个程序源码编译一下就好了。这里用的这些编译器生成的是二进制文件,和平时的gcc生成的可执行文件并不相同。例如我测试时的文件是tes
7、t.c,#includeintmain(){printf("Hello!");return0;}调用新的arm-linux-gcc来编译:arm-S3C2410-linux-gnu-gcc-otesttest.c,这时生成的test文件是一个二进制的可执行文件,并不是我们平时常用的,所以在PC上执行这个文件的话是不行的,系统会提示:bash:./test:cannotexecutebinaryfile。所以不能用这种方法来测试交叉编译是否成功。而应改采用file命令,例如我的是这样的:filetest结果如下:test:
此文档下载收益归作者所有