linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 嵌入应用 >
栏目导栏
资料搜索
热门文章
·Symbian编程VC开发环境设置
·基于ARM的嵌入式Linux开发平台
·嵌入式Linux用Qt Designer快速
·S3C2410X开发总结及心得
·轻松控制uClinux嵌入式开发过程
·嵌入式操作系统uCLinux
·uC/OS和uClinux的比较
·uClinux系统分析
·Porting uClinux to Samsung S
·在Windows上应用uClinux
·sqlite嵌入式数据库在arm-linu
·嵌入式设备上的 Linux 系统开发
·七款嵌入式Linux操作系统简介
·e680i手机嵌入式Linux 研究
·嵌入式系统和嵌入式操作系统
最新文章
·在嵌入式Linux环境下制作QPF字
·ARM Linux开机后自动运行特定程
·构建基本的嵌入式Linux根文件系
·自己动手打造嵌入式Linux软硬件
·MP3播放器madplay在ARM的移植
·Linux 2.6.11 MTD驱动情景分析
·ARM中C和汇编混合编程及示例
·BusyBox 简化嵌入式 Linux 系统
·使用虚拟机嵌入式Linux开发前的
·用NFS服务开发ARM Linux程序的
·虚拟机Linux系统下连接ARM开发
·嵌入式Linux系统下的网页浏览器
·Linux移植PSP详细步骤
·浅析armlinux 2.4.19中断irq分
·Linux 的魅力: 开发 Nokia N80
Google
 
嵌入式基础:ARM下GCC交叉编译器的制作
[ 作者:  加入时间:2007-12-21 12:56:27  来自:Linux联盟收集整理 ]
 

1.下载所需文件

以下是我在Cygwin环境下制作arm-gcc(uclibc)交叉编译器中所需要的文件:

binutils-2.14.90.0.8

uClibc-0.9.27

gcc-3.4.2

linux-libc-headers-2.4.29

PS:一般来说这里还需要下一些patch,因为我对编译器的理解还不够,加上这个事情是工作内容,还有些其他的特殊需求,为了省麻烦,我用了一个很龌龊的方法。我将在linux环境下被buildroot打过补丁的源代码复制出来。

注:通常制作交叉编译器的时候,源代码的版本是非常重要的。

2.准备工作

${PREFIX}为安装目录;

${TARGET}为目标的体系结构,例如arm-linux;

将${PREFIX}/${TARGET}下的sys-include链接到../include目录;

将${PREFIX}/${TARGET}下的lib链接到../lib目录;

将内核头文件中对应的asm(例如asm-arm)和linux目录复制到${PREFIX}/include下;

修改内核头文件,比如在制作i386-arm交叉编译器时,需要在asm目录下的建立arch,proc对应的目录;

修改环境变量

export PATH=${PREFIX}/bin:${PATH}

这个一定要记得,因为制作gcc交叉编译器时,需要用到此bin目录下的交叉二进制工具;

接下来这步,是为uclibc库所做的,创建${PREFIX}/usr目录,将目录中的lib链接到../lib,将目录中的include链接到../include;

接下来就准备开始制作交叉编译器了,制作交叉编译器一般分四步:

制作交叉的二进制工具

制作不带库的gcc交叉编译器

用制作好的gcc交叉编译器将所需要的库编译

重新编译带库的gcc交叉编译器

以下是制作交叉编译器的步骤,因为我用的源代码是给buildroot打过补丁的,所以制作的参数会和通常的交叉编译器制作的参数有些不同。

3.制作binutils

制作交叉环境的二进制工具:

../binutils-2.14.90.0.8/configure --prefix=/staging_dir --target=arm-linux-uclibc --disable-nls --enable-multilib --disable-werror

make

make install

4.制作gcc交叉编译器

../gcc-3.4.2/configure --prefix=/staging_dir --target=arm-linux-uclibc --enable-languages=c --disable-shared --with-sysroot=/sour-uc/uClibc_dev/ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls --enable-multilib

make

make install

注:如果是通常的制作,这里一般需要--without-headers --disable-shared --disable-threads,如果不是使用glibc库,还需要 --with-newlib。

5.编译uclibc库

make menuconfig

make CROSS=arm-linux-uclibc-

make PREFIX="/staging_dir" install

注:在menuconfig配置中,Library Installation Options的参数设置如下:

(/lib) Shared library loader path

(/) uClibc runtime library directory

(/usr/) uClibc development environment directory

在/staging_dir/usr目录下会生成include和lib两个目录,这两个目录会生成下一步制作gcc所需要的文件,已经被我们链接到相应的目录里去了。如果之前没有把目录链接到安装目录下的lib和include中,则下步编译gcc会出现许多错误,比如找不到crt?.o等等。

6.重新制作gcc交叉编译器

../gcc-3.4.2/configure
--prefix=/staging_dir
--target=arm-linux-uclibc
--enable-languages=c
--enable-shared
--disable-__cxa_atexit
--enable-target-optspace
--with-gnu-ld --disable-nls
--enable-multilib
make
make install

如果不出现编译错误,那么恭喜你,你距离成功就仅有一小步了。为什么这么说,因为你的gcc的specs文件可能还需要做一点简单的修改,因为编译的时候可能会遇到一些错误。比如我制作完成后,在编译so文件时,specs里的规则就会导致我无法编译。

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·ARM下 GCC交叉编译器的制作  (2007-12-20 11:09:58)
 ·ARM、DSP、FPGA的技术特点和区别是什么  (2007-12-11 11:58:29)
 ·嵌入式系统编程者必须要掌握的原则  (2007-12-06 18:08:55)
 ·如何使用RMAN和dbv检查数据文件中的坏块  (2007-12-03 10:45:35)
 ·表的许多分区被意外drop用rman不完全恢复  (2007-11-29 11:23:31)
 ·冲击Linux市场 微软嵌入式重心向亚洲转移  (2007-11-23 09:59:13)
 ·媒体观察:谁将引领嵌入式Linux开发  (2007-11-14 17:45:28)
 ·基于嵌入式linux和s32410平台的视频采集  (2007-11-09 10:16:13)
 ·基于ARM-μCLinux嵌入式系统启动引导的实现  (2007-11-09 10:15:39)
 ·在Bootloader中实现嵌入式系统自动升级  (2007-11-08 17:48:16)