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-x 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-x 1 user users 5536 2010-03-16 12:01 hello
把编译生成的hello文件拷贝的U盘上,然后插入到MP800H上,telnet上去运行一下,Bingo! 打印出Hello, world!