http://blog.csdn.net/lithocntlor/article/details/7688264
简介
Sourcery CodeBech的下载页面:
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/overview/
在网页的最后: 有链接 Learn more and download Lite edition可以下载Lite version。
http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
此处选择target Processor 以及 OS。打开下载页面后, 选择host processor 以及 OS。
我是Ubuntu系统, 所以选择IA32 GNU/Linux Tar.
二. 安装
参照Gettting Started Guid (pdf).
1.$ cd ~; mkdir CodeSourcery
2.把下载的arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2, 移动到~/CodeSourcery
3.$ bunzip2 ~/CodeSourcery/arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
4.$ tar xf ~/CodeSourcery/arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5.把~/CodeSourcery/arm-2012.03/bin 添加到PATH
(在~/.bashrc中添加PATH = ~/CodeSourcery/arm-2012.03/bin:$PATH)
6.验证安装是否成功:
$ arm-none-linux-gnueabi-g++ -v如果显示如下信息,则表示安装成功。
> gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-57)
三. 卸载
本节主要介绍其在TQ2440开发板上的使用。TQ2440的处理器是 Samsung S3C2440AL(ARM920T).为了使Soucery CodeBench产生的程序能够在target上运行, target必须安装target board对应的sysroot(由etc, lib, sbin以及usr子目录组成)。对于S3C2440AL选择 Install path to Sourcery CodeBench/arm-none-linux-gnueabi/libc/armv4t下的 etc, lib, sbin以及usr子目录。
1. 安装sysroot及运行binary安装sysroot有三种选择:a. 直接在target的filesystem的root下安装。
b. 在target的root之外其他地方安装。这种方法适合从头开始构建target board的Linux filesystem. 如果target board已经有Linux filesystem,那么覆盖原来的c libraries, 有可能导致已有的程序不能运行,或者target board不能正常开机。
在Host上编译程序时使用-rpath以及--dynamic-link linker选项指定sysroot的位置。在TQ2440上,我比较喜欢这种方法。下面以HelloArm程序为例,说明其使用 main.cpp:
- #include <iostream>
- using namespace std;
- int main()
- {
- cout<<"Hello ARM!!"<<endl;
- }
#include <iostream> using namespace std; int main() { cout<<"Hello ARM!!"<<endl; }
把armv4t/lib/ld-linux.so.3 copy到u盘的lib目录下(ld-linux.so.3是一个link,link向ld-2.15.so, 可以把ld-2.15.socopy到u盘的lib目录下,并把重命名为ld-linux.so.3),同样吧armvt/usr/lib下的libstdc++.so.6copy到u盘的lib目录下。命令:
arm-none-linux-gnueabi-g++ -o HelloArm -march=armv4t -Wl,-rpath=/udisk/lib:/udisk/usr/lib -Wl,-dynamic-linker=/udisk/lib/ld-linux.so.3 main.cpp
编译生成HelloArm.
命令:
$ file HelloArm
> HelloArm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
即可查看生成的HelloARM的信息。
把HelloArm copy到TQ2440开发板,在minicom里, 直接运行:
/udisk/HelloArm
> Hello ARM!!
即表示运行成功。如果出现error: Permission denied, 那么需要同时把上面copy的lib以及HelloArm binary都改成可执行。
事实上, TQ2440自带的系统/lib下同样有libstdc++.so.6, 重命名此文件为其他名字比如libstdc++.so.6__, 再次运行HelloARM,同样可以成功。如果同时重命名/udisk/lib下的libstdc++.so.6为libstdc++.so.6__ 则HelloARM不能成功运行,提示: Failed to find the shared library: libstdc++.so.6.....
c. 在target的root之外其他地方安装, 但执行时指定sysroot位置。
由于debugger不支持这种方式,故不推荐。