【原创】u-boot移植-->连载三

uboot移植参考说明:

       该移植有部分移植参考互联网资源,如有侵权,请与我联系。大部分为自己原创,如有转载请注明出处,该技术仅供学习交流,不可商用。------小盒子  于哈尔滨2009年03月10日整理

这里介绍一下有关编译器的问题,如果你使用的交叉编译器版本不是3.4.1,你可以跳过此节。注意使用3.3.2版本的也需要看一下,后面有一个小地方需要修改一下。

如果你使用的是3.4.1在编译u-boot的时候大多数人会遇到以下这样的错误,这个时候你别紧张,这里给你提供了一个好的解决办法:

rm-linux-ld:ERROR:usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS) uses hardware FP, whereas u-boot uses software FP

arm-linux-ld:failed to merge target specific data of file /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS)

arm-linux-ld: ERROR: /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS) uses hardware FP, whereas u-boot uses software FP

arm-linux-ld: failed to merge target specific data of file /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS)

make: *** [u-boot] Error 1

解决的办法:

找到/u-boot-1.1.4/cpu/arm920t/config.mk文件

该文件内容如下所示:

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \

       -msoft-float

 

PLATFORM_CPPFLAGS += -march=armv4

# =========================================================================

#

# Supply options according to compiler version

#

# =========================================================================

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

 

修改该文件:

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \

#     -msoft-float

 

PLATFORM_CPPFLAGS += -march=armv4

# =========================================================================

#

# Supply options according to compiler version

#

# =========================================================================

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32)#,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

请注意紫色部分的修改!

问题是编译链接器3.4.1用的是hardware FP,而u-boot 使用的是 software FP 也可以使用2.95或者3.3.2版本可解决这个问题。

如果使用3.3.2编译器编译出错的话

编译错误:error: invalid option `abi=apcs-gnu'

出错原因:

指示编译器不支持选项 -mabi=apcs-gnu

出错的文件是/cpu/arm920t/下的config.mk

函数cc-option用于检查编译器是否支持给定的选项

PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

apcs:指的是 ARM 过程调用标准

apcs-32apcs-gnuAPCS 标准中的两个版本。

在上边脚本中cc-option首先检查是否支持apcs-32标准,如果不支持的话就使用apcs-gnu标准,而3.3.2 arm-linux-gcc也不支持apcs-gnu标准,所以出错。而PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))

脚本中如果给定的两个标准都不支持的话就不指定了。

 

如果你用的是3.3.2版本你可以按照我的修改

 

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32)#,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

 

连载三先到这里吧,这里解决了有关交叉编译环境版本与u-boot编译参数配置的问题。下面请关注《【原创】u-boot移植-->连载四》开始修改源码。

PS:自从《【原创】u-boot移植-->连载二》写完之后没几天,我生活发生一些变化,导致我的心思没能放到这里来,最后忘记了连载的问题,这里小盒子谢谢北京这位朋友的提醒!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值