免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3729 | 回复: 2
打印 上一主题 下一主题

g-bios编译时奇怪的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-19 14:06 |只看该作者 |倒序浏览
在给g-bios th增加从mmc load bh时,出现错误。
错误提示如下:

th/driver/built-in.o: In function `fat_read_block':
omap3_mmc.c.text+0xce: undefined reference to `__aeabi_uidiv'
omap3_mmc.c.text+0xcf: undefined reference to `__aeabi_uidiv'
omap3_mmc.c.text+0xd3: undefined reference to `__aeabi_uidiv'
th/driver/built-in.o: In function `fat_get_fat_table':
omap3_mmc.c.text+0xd9c): undefined reference to `__aeabi_uidiv'
omap3_mmc.c.text+0xdd4): undefined reference to `__aeabi_uidivmod'
th/driver/built-in.o: In function `fat_mount':
omap3_mmc.c.text+0xfa0): undefined reference to `__aeabi_uidiv'
make[1]: *** [th/g-bios-th.elf] Error 1
make: *** [th] Error 2

跟据提示,是链接时出错。查看代码发现,语法无任何问题。如下:
data_off = (dbr.resv_size + dbr.fats * dbr.fat32_length) / dbr.sec_per_clus - 2;        //data        //is easy to calc if begin 0

该代码在bh中编译通过。且编译环境相同。

去除该行代码,编译通过。锁定问题为使用除法运算除出错。

google,有人提示为gcc链接库出错。

ubuntu虚拟机中有全新安装的powertool、toolchain。
转到虚拟机,重新编译,错误相同。

怀疑为toolchain安装路径问题。删除toolchain及lablin,正在重新编译。

论坛徽章:
0
2 [报告]
发表于 2011-06-19 14:19 |只看该作者
这个问题比较有意思。正常情况运算符是不会出现问题的。解决这个问题对交叉编译、g-bios编译要比较清楚。
暂时提出这个问题,有兴趣的测试一下

论坛徽章:
0
3 [报告]
发表于 2011-06-22 00:08 |只看该作者
找到原因了。ARM在前几个版本中是不支持除法运算的。为了向前兼容,gcc编译的时候会链接除法运算库,而不是使用硬件实现。
g-bios th中为保证代码大小,且除法运算并非必不可少。也没有链接除法运算库。
bh中之所以支持是在bh/中实现了除法运算库。

考虑到代码的大小,我最终采用的解决方案是用移位运算代替了除法运算。而且,对于fat文件系统而言,用到的除法运算都可以转换成移位运算,而且代码会更加清晰
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP