本博客倡导开放源代码,在此公布之程序源代码如无特别声明均采用GNU通用公共 许可证(GPL)

乐在其中

分享学习Linux的乐趣

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  23 随笔 :: 0 文章 :: 401 评论 :: 0 Trackbacks
RTD1073是基于32位MIPS指令集的,与我们常用的x86平台是不兼容的。为了能够生成在RTD1073上运行的程序,必然要用到交叉编译工具。
简单说,交叉编译就是在一个平台(编译平台/build platform)上生成另一个平台(目标平台/target platform)的执行代码。通常目标平台是一些运算能力较弱的嵌入式系统。交叉编译工具链(cross compile tool chain)是指用于交叉编译的一系列工具,主要包括C/C++编译器、函数库(libc, libstdc++等)、binutils等。C函数库libc常用的有两种:大而全的glibc(GNU C Library) 和小巧的uClibc。嵌入是系统由于受内存和flash存储空间的限制,通常都使用uClibc。
早前提到的华硕的公开源码包中提供了有两套工具链:一套用于应用程序编译,一套用于Linux内核编译,并附有安装说明。在网上搜搜还能找到其它厂商公布的源码和工具链,只要是基于RTD1073或其姊妹产品的,内核源码和工具链都是一样的,相信它们都源自Realtek。
交叉编译工具常常在命令前加一个前缀,比如上述两套工具链都使用'mipsel-linux-'的前缀。如果将两套工具链安装在一个系统里,可以通过PATH环境变量来选择所用的工具链。具体地说,用于AP(应用程序)的工具链安装在/usr/local/bin;用于内核的工具链安装在/usr/bin。要选择AP工具链就在PATH中将/usr/local/bin放在/usr/bin前面,反之亦然。
写一个hello.c程序试试看
1 #include <stdio.h>
2 int main(int argc, char* argv[]) {
3    printf("Hello, world!\n");
4 }
编译
 1 $ which mipsel-linux-gcc
 2 /usr/local/bin/mipsel-linux-gcc
 3 $ mipsel-linux-gcc -o hello hello.c
 4 $ ls -l hello
 5 -rwxr-xr-1 user users 7749 2010-03-16 12:00 hello
 6 $ file hello
 7 hello: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
 8 $ mipsel-linux-strip hello
 9 $ file hello
10 hello: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped
11 $ ls -l hello
12 -rwxr-xr-1 user users 5536 2010-03-16 12:01 hello
把编译生成的hello文件拷贝的U盘上,然后插入到MP800H上,telnet上去运行一下,Bingo! 打印出Hello, world!
posted on 2010-03-16 12:55 gouzhuang 阅读(3387) 评论(3)  编辑 收藏 引用 所属分类: 嵌入式Linux

评论

# re: 交叉编译(Cross Compiling) 2010-04-28 14:34 焦路
很棒的文章。希望lz能够继续。  回复  更多评论
  

# re: 交叉编译(Cross Compiling) 2010-09-17 20:00 bgs90@126.com
运行mipsel-linux-gcc -o hello hello.c
报错:
hello.c:1:18: stdio.h: No such file or directory

怎么设置include文件和lib文件目录?  回复  更多评论
  

# re: 交叉编译(Cross Compiling) 2010-09-21 10:28 bgs90@126.com
谢楼主,按照前面配置要求,现在可以运行了。  回复  更多评论
  

只有注册用户登录后才能发表评论。