linux交叉开发工具链,一些现成的GNU交叉开发工具链

博客介绍了如何在Debian/Ubuntu系统中搭建嵌入式系统的交叉编译环境,包括使用Emdebian提供的预编译工具链和手动安装arm-elf-tools。文章详细阐述了添加软件源、安装步骤以及不同工具链(arm-linux与arm-elf)的区别,特别提到了GNU ARM提供的交叉编译工具及其简易安装方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC来完成,然后将可执行文件下载到嵌入式系统中运行。这是目前嵌入式程序开发的不二选择——Host/target模式。但这引发了一个问题:由于Host和Target的处理器体系结构不同,我们不能直接用PC上既有的程序开发工具,必须使用跨平台开发工具,即在Host上生成能在Target上运行格式的目标文件。

自己建立交叉编译环境是一件很头疼的事(处理版本的依赖性, 漫长的编译过程...),如果你不想经历这样的痛苦,可以选择网上编译好了的工具链进行安装.如果你用的是Debian/Ubuntu的发行版, 可以使用. 如果使用uClinux, 也可安装. 另外, 有一个比较新的项目:, 它提供了针对linux, cygwin, MacOS平台的交叉编译工具, 有源代码形式的, 也有二进制形式的.

本blog有篇自己从源代码构建交叉编译工具的文章,  看这里!

Emdebian

Emdebian提供了binutils 2.15, gcc3.3.5 / gcc3.4.3的稳定已编译版本.

安装方法:

(1)在/etc/apt/sources.list文件中添加下列内容:

deb ./

(2)运行 $apt-get update

(3) $ apt-get install gcc-3.3-arm-linux libc6-dev-arm-cross

或 $ apt-get install gcc-3.4-arm-linux libc6-dev-arm-cross

前者安装3.3版,后者安装3.4版.我在Ubuntu上安装3.3的依赖性有问题,安装3.4的成功。

WarningThe emdebian cross development environment will install files in /usr/bin so you will have to make sure that you do not overwrite any development tools which you may already have on your system.Embedian将开发环境所用的软件放在/usr/bin目录中:

$ ls /usr/bin/arm*

arm-linux-addr2line  arm-linux-c++filt  arm-linux-gcc      arm-linux-nm       arm-linux-ranlib   arm-linux-stringsarm-linux-ar         arm-linux-cpp      arm-linux-gcc-3.4  arm-linux-objcopy  arm-linux-readelf  arm-linux-striparm-linux-as         arm-linux-cpp-3.4  arm-linux-ld       arm-linux-objdump  arm-linux-size但我最近运行 $ sudo apt-get update 时发现:

deb ./

这个源有问题了, 装不了

010.gif

ARM-ELF-TOOLS

到下载arm-elf-tools交叉编译工具安装程序。

下载之后的文件名为arm-elf-tools-20030314.sh(日期可能不同)是脚本文件,安装方法:

(1)首先看其权限,如果没有执行权限,先给它加上相应的执行权限。

(2)应该将它拷贝到根目录下,运行$ sudo sh ./arm-elf-tools-20030314.sh。默认的安装路径在usr/local目录。

到/usr/local/bin,查看目录中是否存在以arm-elf开头的文件,如果有,则说明安装成功。

注意Emdebian的arm-linux工具和uClinux的arm-elf工具区别:

1, arm-linux可视为标准工具链, arm-elf相当于针对运行uClinux的目标环境做了一些补丁.

2, arm-linux默认安装路径在/usr/bin, arm-elf默认安装路径在usr/local/bin.

3, arm-linux使用glibc库,而arm-elf使用uClibc.

一般来说,如果你用uClinux开发,则使用arm-elf工具,否则使用arm-linux工具.GNU ARM

GNU ARM 针对cygwin, GNU/Linux(x86), GNU/Linux(x86_64), MacOS提供了source, binary形式的交叉编译工具.

目前针对x86 GNU/Linux 的binary工具是:

使用它很简单, 将包放在一个合适的目录, 解压, 将bin目录添加到PATH变量, 你就可以调用了.

注意它使用的newlib, 而且带上了insight调试工具(后端是gdb).

http://man.chinaunix.net/linux/lfs/htmlbook/chapter06/chapter06.html参考具体的gcc相关软件安装 本人的联系方式为:[email protected],西华大学 我们采用crosstool0.42来作为我们编译交叉编译工具链的脚本。详细的用法说明请阅读网站上的文档crosstool-how to 。 [zzl@localhost] tar -xzvf crosstool-0.43.tar.gz [zzl@localhost]cd crosstool-0.42 我们可以看到目录下有很多.sh脚本和.dat配置文件。每一个支持的CPU都有它所相应的脚本,如我们选用demo-arm9tdmi.sh 需要我们记住的三个重要的变量: TARBALLS_DIR=$HOME/downloads #$HOME为用户的主目录,如fedora这个目录,是固定的,与$PWD为当前路径不同 RESULT_TOP=/usr/local/arm #做了更改 GCC_LANGUAGES="c,c++" 我们需要如下压缩包:gcc-3.4.1.tar.gz glibc-2.3.3.tar.gz linux-2.6.17binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz gdb6.0a.tar.gz,且还要下载内核arm补丁,给它打补丁,之后再压缩成原来格式,并删除解压的文件,只保留打补丁后的文件 下面为打补丁的格式,其中linuxlinux内核解压后产生的目录: tar jxvf patch-2.4.18-rmk7.bz2;cp patch-2.4.18-rmk7 linux;cd linux;patch -p1<patch-2.4.18-rmk7 最后再次还原成原来的包文件:tar czvf linux-2.4.18.tar.gz linux ,即将linux目录及其文件打包为前面的文件名 首要任务是下载这些源代码软件包,并将它们放在/home/fedora/downloads下面,保证这些包的所有者为当前用户而不是根用户。 可以用chown usr 文件名,更改使用者,更改后的使用者为usr,我的用户名为fedora,可以用ll查看用户名 我们选择的配置是:demo-arm9tdmi.sh,其内容具体如下: #!/bin/sh set -ex TARBALLS_DIR=$HOME/downloads RESULT_TOP=/usr/local/arm #原本是:/opt/crosstool ,后修改了 export TARBALLS_DIR RESULT_TOP GCC_LANGUAGES="c,c++" export GCC_LANGUAGES # Really, you should do the mkdir before running this, # and chown /opt/crosstool to yourself so you don't need to run as root. mkdir -p $RESULT_TOP #应该先创建/usr/local/arm目录,并chmod fedora /usr/local/arm 目录的用户为fedora #-p, --parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理 # Build the toolchain. Takes a couple hours and a couple gigabytes. eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest --gdb#增加调试器 echo Done. 从 eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest --gdb 可以看出,我们的gcc版本采用3.2.3,glibc版本采用2.2.5。 我们再来看gcc-3.2.3-glibc-2.2.5.dat这个文件,并做一些更改 BINUTILS_DIR=binutils-2.15 GCC_DIR=gcc-3.2.3 GLIBC_DIR=glibc-2.2.5 LINUX_DIR=linux-2.4.18 #修改后的内容,为了匹配内核 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.5 GDB_DIR=gdb-6.0 #增加的内容 修改 armtdmi.dat 文件如下红色部分: KERNELCONFIG=`pwd`/arm.config TARGET=arm-9tdmi-linux-gnu(这个名字可以改成你想要的交叉工具链前缀名) TARGET_CFLAGS="-O" GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi" 修改all.sh 文件如下: 修改 all.sh 文件第 41 行,指定存放工具链文件夹的名称; vimall.sh +41 将:TOOLCOMBO=$GCC_DIR‐$GLIBC_DIR 改为: TOOLCOMBO=3.2.3 #gcc版本号作为文件名 修改第 70 行,更改安装路径,将: PREFIX=${PREFIX‐$RESULT_TOP/$TOOLCOMBO/$TARGET} 改为 PREFIX=${PREFIX‐$RESULT_TOP/$TOOLCOMBO} #即路径最终为:/usr/local/arm/3.2.3,gcc就在3.2.3的bin库中 最后: #vi /etc/profile在if代码 语句中添加绝对路径 PATH=$PATH :/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/bin 也可以设置为临时变量:export PATH=$PATH :/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/bin 但每次开机要重启,此时我们编译器就上上述的路径中,包含arm-9tdmi-linux-gnu-gcc,arm-9tdmi-linux-gnu-g++,arm-9tdmi-linux-gnu-ld 如果gcc版本太高,可以用 yum install compat-gcc-34 ,3.4版本的gcc不过之前应该在/usr/bin下重命名gcc,以保证之后还能运行,可以查看它的版 本,cat /proc/version,用它的版本号来重命名,gcc -v查看当前gcc版本号 ftp://ftp.sunet.se/pub/Linux/distributions/scientific/53/i386/SL/ 上面这个网站中有一些低版本的gcc和glibc,另外还有一些nfs工具等等,其中就有以compat开头的gcc和glibc,另外当然还有以gcc、glibc开头的 specs文件最后在/usr/local/arm/3.2.3/gcc-3.2.3-glibc-2.2.5/arm9tdmi-linux-gnu/lib中,specs文件中一般有一句/lib/ld-linux.so.2,有可能要修改为自己的库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值