微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux ARM交叉编译工具链制作过程

Linux ARM交叉编译工具链制作过程

时间:11-21 来源:互联网 点击:
嵌入式系统的限制,标准GNU C链接库显得太大,不适合应用在目标板上。所以需要寻找C链接库的替代品,在这里现以标准GNU C为例建立工具链。
[root@localhost build-gcc] #cd $PRJROOT/src-dir
[root@localhost src-dir] # tar jxvf ../setup-dir/glibc-2.11.2.tar.bz2
[root@localhost src-dir] # tar jxvf ../setup-dir/glibc-ports-2.11.tar.bz2
[root@localhost src-dir] # mv –v glibc-ports-2.11 glibc-2.11.2/ports
[root@localhost src-dir] # cd glibc-2.11.2
[root@localhost glibc-2.11.2] # patch –Np1 –i ../../setup-dir/glibc-2.11.2-gcc_fix-1.patch
[root@localhost glibc-2.11.2] # patch –Np1 –i ../../setup-dir/glibc-2.11.2-makefile_fix-1.patch
[root@localhost glibc-2.11.2] # cd $PRJROOT/build-dir/build-glibc
[root@localhost build-glibc] # CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux-ranlib /
../../src-dir/glibc-2.11.2/configure /
--host=arm-linux /
--prefix=$PREFIX/$TARGET /
--with-tls --disable-profile /
--enable-add-ons /
--with-headers=$PREFIX/$TARGET/include /
libc_cv_forced_unwind=yes /
libc_cv_c_cleanup=yes /
libc_cv_arm_tls=yes
[root@localhost build-glibc] # make
[root@localhost build-glibc] # make install

注:以上完成后,请查看一下$TARGET_PREFIX/lib目录下的文件libc.so,看看GROUP的内容是否指定到可以用于交叉编译的库,如果不是请修改,如下。
libc.so 文件(所在目录是$TARGET_PREFIX/lib),将GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)改为GROUP ( libc.so.6 libc_nonshared.a)
这样连接程序 ld 就会在 libc.so 所在的目录查找它需要的库,因为你的机子的/lib目录可能已经装了一个相同名字的库,一个为编译可以在你的宿主机上运行的程序的库,而不是用于交叉编译的。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
经过查看,发现libc.so中的GROUP已经是交叉编译链的目录,所以不用更改
对 libc.so 的修正·

vi $PREFIX /${TARGET}/lib/libc.so

去掉绝对路径,修改后的内容如下:



OUTPUT_FORMAT(elf32-littlearm)

GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
八、建立全套编译器 (full gcc)
[root@localhost build-gcc] #../../src-dir/gcc-4.4.4/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --enable-shared
[root@localhost build-gcc] #make all
[root@localhost build-gcc] #make install


我们再来看看 $PREFIX/bin 里面多了哪些东西。你会发现多了 arm-linux-g++ 、和 arm-linux-c++ 几个文件。
G++-gnu的 c++ 编译器。
C++-gnu 的 c++ 编译器。
至此,整个交叉编译环境就建立完成了。
九、完成工具链的设置
root@localhost build-gcc] # cd $TARGET_PREFIX/bin
查看文件是否为二进制文件:
[root@localhost bin] # file as ar gcc ld nm ranlib strip
查看缺省的搜寻路径:
[root@localhost bin] #arm-linux-gcc -print-search-dirs
十、测试和验证交叉编译工具
下面编写一个简单的C程序,使用建立的工具链。、
[root@localhost bin] #cd $PRJROOT/program
[root@localhost program] #vi hello.c
#include
int main(void)
{
printf("hello linux/n");
return 0;
}
[root@localhost program] #arm-linux-gcc hello.c -o hello –static (制作静态可执行文件)
制作的可执行文件hello可以直接在目标机上运行。

上一篇:S3C2440 AD转换器
下一篇:S3C2440的UART

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top