使用GNU工具链的优势
2003-06-27 12:14 PM
GNU编译器(GCC)是一个“免费”的C/C++工具链,有力的支撑了Linux系统的发展。由于它可被看作许多嵌入式处理器的一个交叉编译器,所以在嵌入式软件开发中是一个流行的工具。
支持的体系结构包括:
- ARM, StrongARM, XScale
- Hitachi SH
- Intel i960
- Intel x86/IA-32
- MIPS
- Motorola PowerPC
- Motorola 68K/ColdFire
我最近使用Windows/MS-DOS主机上的GCC工具链并使用DJGPP完成了一个面向StrongARM 处理器的项目。我发现这个工具链非常可靠,而且能够产生快速高效的机器码。
GCC工具链中大多数有用的工具主要集中于以下几个源代码包中:
GCC 包
- gcc: C 编译器
- g++: C++ 编译器
- cpp: C 预处理器
Binutils (binary utilities) 包
- as: 汇编程序
- ld: (目标代码)连接器
- objcopy: 目标文件翻译器,用于从连接器输出中创建一个ROM 映像
- objdump: 目标文件阅读器, 用于反汇编目标文件
Make
- make: make 工具
Debugger
- gdb: 源代码调试器
当使用交叉编译器的时候,程序通常用前缀来指示目标的体系结构和连接器的输出隔世。例如, arm-elf-as是GCC 工具链中的汇编程序编译器,针对ARM 处理器并产生ELF 格式的二进制代码。这种命名约定避免了对众多以”gcc”命名的针对不同体系结构的编译器的使用混淆。
你可以从GNU FTP site.免费下载GCC个工具的全部源代码。本文不包括怎样从这些源代码创建一个交叉编译器,而CrossGCC FAQ 提供了很好的文档和详细指令。但在你准备使用FTP下载之前,本文会给你一些有益的帮助。
2003-08-22 01:29 PM
在本文的第一部分,我们介绍了如何安装Cygwin环境(它为Windows提供了一个UNIX仿真层)。无论你是在Windows(使用Cygwin)或者Linux平台上构建嵌入式系统开发工具链,这之后的过程都是一样的。
本文的第二部分将继续介绍如何建立嵌入式系统交叉编译器工具链,该工具链基于广泛使用的GCC C/C++编译器(第三版)以及Newlib标准C库,可以在Windows或者Linux上运行的。本文所附带的脚本可以使构建过程自动完成。
下载源文件
下载这些源文件压缩包,它们分别对应于GNU FTP镜像站点的“gcc”、“binutils”和“gdb”子目录。(这个站点有GNU FTP镜像站点的清单。)你需要的文件有:
- gcc-3.2.1.tar.gz:GCC C/C+编译器(3.2.1版)
- binutils-2.13.1.tar.gz:GNU 汇编器、链接器和其它实用程序
- gdb-5.2.1.tar.gz:GDB源代码级调试器(可选)
然后,下载newlib-1.10.0.tar.gz源文件压缩包,它是嵌入式系统的Newlib标准C库。(请下载版本与上面所给版本号完全相同的压缩包,否则本文所提供的脚本可能不能成功的自动构建工具链。)
现在把这些文件拷贝到你的UNIX主目录(home directory)下。如果你用的是Windows平台,那么你的“主目录”就是“C:/cygwin/home/username”,其中“C:/ cygwin”是Cygwin的安装目录,“username”是你的Windows用户名。
在本文的末尾有一个完整的bash shell脚本,它将自动解压并建立工具。把这个脚本文件(命名为“gccbuild”)连通你的下载的文件一同保存到你的主目录下。
配置构建(build)脚本
上面所说的构建脚本的当前配置为使用ARM处理器和ELF可执行格式,这一行脚本为:
TARGET=aim-elf
如果你的目标系统不同,那么需要修改这一行脚本,例如:
TARGET=sh-elf #针对SuperH处理器,ELF可执行格式
或者
TARGET=powerpc-elf #针对PowerPC处理器,ELF可执行格式
这里有GCC目标配置的完整清单。
运行构建脚本
如果你在Windows平台上工作,那么双击桌面上的Cygwin图表来开发一个基于Cygwin的bash shell。在Linux上,打开一个终端并转到你的主目录。在bash命令行提示符下输入如下命令:
sh gccbuild 2>&1 tee build.log
这将执行构建脚本(你应该已经把它保存到主目录)。如果在执行过程中出现问题,所有的输出消息都会记录到一个叫着build.log的日志文件之中。在Cygwin下这个构建过程会非常缓慢,可能需要几个小时才能完成。
构建脚本是如何工作的
构建过程将创建三个目录:“src”保存解压后的源文件、“build”用来保存中间构建文件、“quntools”用来保存最终的可执行文件和库。你可以通过修改脚本来更改这三个目录的名称,但是要确保三个目录是分开的。例如,不能把中间构建文件保存到解压文件目录下。
GCC编译器要分为两个阶段构建,这是因为这个死循环问题:构建交叉编译器首先需要构建库,但是库又不能在没有交叉编译器的情况下构建。这个问题解决方法 就是建立一个最小的唯C(C-only)编译器,它足够编译Newlib库即可,然后重新建立一个完全的C/C++。构建脚本会处理好这个问题。
产生的可执行文件保存在子目录“~/qnuttools/bin”下,在Windows平台,默认路径为“c:/cygwin/home/username/qnutools/bin”。
构建脚本
下面是脚本“gccbuild”的全部内容:
# 建立GCC交叉编译器的bash shell脚本
TARGET=arm-elf # Target processor
#注意:不要用“~”来作为主目录的简写
GNUTOOLS=$HOME/gnutools # Directory for final tools
SRC=$HOME/src # Directory for source
BUILD=$HOME/build # Directory for intermediate build files
# 源代码压缩包文件的名字(不带.tar.gz扩展名)
BINUTILS=binutils-2.13.1
GCC=gcc-3.2.1
NEWLIB=newlib-1.10.0
GDB=gdb-5.2.1
# 额外的配置
export PATH="$GNUTOOLS/bin:$PATH"
GNUCONFIG="--target=$TARGET --prefix=$GNUTOOLS"
GCCFLAGS="--with-newlib --with-gnu-as --with-gnu-ld"
# 创建目录
mkdir -p $SRC $BUILD/binutils $BUILD/gcc $BUILD/newlib $BUILD/gdb $GNUTOOLS
# 解压缩源代码
cp $HOME/*.gz $SRC
cd $SRC
tar xvfz $BINUTILS.tar.gz
tar xvfz $GCC.tar.gz
tar xvfz $NEWLIB.tar.gz
tar xvfz $GDB.tar.gz
# 建立二进制工具(汇编器、链接器等等)
cd $BUILD/binutils && rm -rf *
$SRC/$BINUTILS/configure $GNUCONFIG
make all install
# 构建基本的唯C(C-only)编译器,它的能力足够编译newlib库
cd $BUILD/gcc && rm -rf *
$SRC/$GCC/configure $GNUCONFIG $GCCFLAGS --without-headers --enable-languages=c
make all install
# 构建newlib C库
cd $BUILD/newlib && rm -rf *
$SRC/$NEWLIB/configure $GNUCONFIG
make all install
# 构建完全的C/C++ 编译器。
# 注意:请删除以前产生的中间文件,这一点很重要
# 唯C构建,否则完全构建将会失败
cd $BUILD/gcc && rm -rf *
$SRC/$GCC/configure $GNUCONFIG $GCCFLAGS /
--with-headers=$GNUTOOLS/$TARGET/include --enable-languages=c,c++
make all install
# 构建GDB 调试器(可选)
cd $BUILD/gdb && rm -rf*
$SRC/$GDB/configure $GNUCONFIG
make all install
更多的信息来源
下面的站点提供了建立交叉编译器工具链的进一步信息以及有用链接。(注意:这些站点的某些内容是针对较老版本的。)
三种必需的嵌入式开发工具
作者: ZDNet China
我通常喜欢使用不同公司的很离奇的软件工具(比如编译器,汇编程序,连接器,导入器等)。微软的Visual Studio风格开发环境是我进行项目开发时特别喜欢的开发平台,因为它支持不同卖方的多处理器和多工具链接的功能。
很多嵌入式工具卖方都将他们的编译器工具封装在IDEs,但是很多这样的编辑器都有日期限制,并且提供少量的语法强调功能。这样它们就缺乏达到艺术 性的级别。好的编辑器支持先进的代码浏览,导航,代码自动完成,并且具有自保存功能。我最喜欢的是放弃卖方支持的IDEs,然后以命令行工具工作和使用自 己的IEDs。
基于此,这里我讲述当前使用的三种工具,我觉得这三种工具非常有用。请试试它们——他们可以免费下载和使用。
1. 一个编辑器
最我的列表中,最重要的工具是Visual SlickEdit。这是一个功能强大的编辑器,具有先进的代码浏览,导航,代码自动完成等特性。Visual SlickEdit UI具备与Microsoft Visual Studio相似的布局,但是它比Microsoft Visual Studio显得朴实,但Visual SlickEdit UI添加了独特的、非常强大的编辑和开发特性。而且你可以自定义这些功能。
Visual SlickEdit绝大部分有用的特性是它的独特的内容自反应和代码自完成功能,这一功能加速了代码编写过程。外部的编译器,工具,或者普通的 makefiles都可以集成到SlickEdit以形成一个完整的IDE,即使当和多卖方工具使用时,它也兼容。更令人注目的是Visual SlickEdit可以被Windows和Linux操作系统使用。
2. 源代码浏览器
Source Dynamics' Source Insight是另一个出色的代码编辑器,同时它也是一个出色的代码浏览器。其唯一的缺点是它只能使用于Windows操作系统。
如果你的项目是基于大量的多文件操作,这就意味应该具备迅速查找,内容窗口,对象等级查看,相关的树,树之间调用查看等功能。编辑功能比较普通,与 外部编译器的集成度也不是很高,但是,这一软件是以快速代码浏览而著称。如果你想要在冗长的代码中进行快速查找,特别不熟悉的代码的时候,这一工具就显示 出它的优越性。
3.一个更好的命令提示模式
虽然这一工具在Windows工具系列中并不是最流行的,但是我却是一个命令行工具的喜欢者。我觉得这一工具提供了管理命令行编译器,文件生成器,脚本程序等的一种良好方式。
我最喜欢的是4DOS/4NT from JP Software。它最主要的特性包括文件名称完成(通过标签键)和支持命令行历史。它也具有很多可扩展的命令,使一些晦涩的命令变得很形象。