lpc2103 报错aeabi_uidiv

lpc2103 报错aeabi_uidiv,第1张

解决思路:

1、这个错误提示说明是一个未定义引用的错误,根据__aeabi_uidivmod,和__aeabi_uidiv猜想应该是除法实现的问题(为什么就能得出是除法实现的问题?根据英文名吗?可是我查了下,没有这个英文。)。

2、这里用到了lib1funcs.S这个除法库文件,于是在里面搜索__aeabi_uidiv和__aeabi_uidivmod,找不到这两个关键字的定义。

说明应该是4.3.2版本的编译工具需要找这两个关键字的定义,但是找不到。

3、猜测应该是这个lib1funcs.S是比较老版本的库文件,可是这个较新版本的去哪找呢,除法运算在u-boot和Linux内核里肯定实现了,就到这两个里面去找这个文件。

4、4.3.2编译通过的两个项目版本分别是u-boot-2012.04.01以及linux-3.4.2,就到这两个项目中找,你会发现u-boot里面没有这个文件,u-boot肯定实现了,但是不是用这个来实现的,我们到linux内核里找:

find /work/projects/linux-3.4.2 -name "lib1funcs.S"

搜索结果:

./arch/arm/lib/lib1funcs.S

./arch/arm/boot/compressed/lib1funcs.S

登录后复制

5、/work/system/linux-3.4.2/arch/arm/lib/lib1funcs.S,这个文件应该就是我们找的库文件。

把他copy到项目里,然后make。

编译结果:

arm-linux-gcc -c -o lib1funcs.o lib1funcs.S

lib1funcs.S:36:27: error: linux/linkage.h: No such file or directory

lib1funcs.S:37:27: error: asm/assembler.h: No such file or directory

lib1funcs.S:38:24: error: asm/unwind.h: No such file or directory

Makefile:11: recipe for target 'lib1funcs.o' failed

make: *** [lib1funcs.o] Error 1

登录后复制

提示我们找不到这些头文件,对比以前的lib1funcs.S不需要这些头文件。

所以我们把头文件注释掉:

35 /*

36 #include <linux/linkage.h>

37 #include <asm/assembler.h>

38 #include <asm/unwind.h>

39 */

登录后复制

6、再次编译,出现如下错误:

arm-linux-gcc -c -o lib1funcs.o lib1funcs.S

lib1funcs.S: Assembler messages:

lib1funcs.S:181: Error: bad instruction `entry(__udivsi3)'

lib1funcs.S:182: Error: bad instruction `entry(__aeabi_uidiv)'

lib1funcs.S:183: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:207: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:208: Error: bad instruction `endproc(__udivsi3)'

lib1funcs.S:209: Error: bad instruction `endproc(__aeabi_uidiv)'

lib1funcs.S:211: Error: bad instruction `entry(__umodsi3)'

lib1funcs.S:212: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:226: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:227: Error: bad instruction `endproc(__umodsi3)'

lib1funcs.S:229: Error: bad instruction `entry(__divsi3)'

lib1funcs.S:230: Error: bad instruction `entry(__aeabi_idiv)'

lib1funcs.S:231: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:268: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:269: Error: bad instruction `endproc(__divsi3)'

lib1funcs.S:270: Error: bad instruction `endproc(__aeabi_idiv)'

lib1funcs.S:272: Error: bad instruction `entry(__modsi3)'

lib1funcs.S:273: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:293: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:294: Error: bad instruction `endproc(__modsi3)'

lib1funcs.S:356: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:357: Error: bad instruction `unwind(.pad #4)'

lib1funcs.S:358: Error: bad instruction `unwind(.save {lr})'

lib1funcs.S:363: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:364: Error: bad instruction `endproc(Ldiv0)'

Makefile:11: recipe for target 'lib1funcs.o' failed

make: *** [lib1funcs.o] Error 1

登录后复制

应该是去掉头文件引起的编译器对定义不理解。

对比老版本的lib1funcs开头有一些宏定义我们先加上:

#define ALIGN .align 4,0x90

#define __LINUX_ARM_ARCH__ 1

#define ENTRY(name) \

.globl name\

ALIGN\

name:

登录后复制

其中有entry的宏定义,我们可以猜想这些都是在头文件里的宏定义,其实你去linux内核里找这个头文件#include <linux/linkage.h>在这里就可以找到entry的宏定义。

7、再次编译,出现错误:

book@www.100ask.org:/work/test$ make

arm-linux-gcc -c -o lib1funcs.o lib1funcs.S

lib1funcs.S: Assembler messages:

lib1funcs.S:192: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:216: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:217: Error: bad instruction `endproc(__udivsi3)'

lib1funcs.S:218: Error: bad instruction `endproc(__aeabi_uidiv)'

lib1funcs.S:221: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:235: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:236: Error: bad instruction `endproc(__umodsi3)'

lib1funcs.S:240: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:277: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:278: Error: bad instruction `endproc(__divsi3)'

lib1funcs.S:279: Error: bad instruction `endproc(__aeabi_idiv)'

lib1funcs.S:282: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:302: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:303: Error: bad instruction `endproc(__modsi3)'

lib1funcs.S:365: Error: bad instruction `unwind(.fnstart)'

lib1funcs.S:366: Error: bad instruction `unwind(.pad #4)'

lib1funcs.S:367: Error: bad instruction `unwind(.save {lr})'

lib1funcs.S:372: Error: bad instruction `unwind(.fnend)'

lib1funcs.S:373: Error: bad instruction `endproc(Ldiv0)'

Makefile:11: recipe for target 'lib1funcs.o' failed

make: *** [lib1funcs.o] Error 1

登录后复制

unwind() 和unwind()的宏定义老版本里没有,怎么办呢?

全部注释掉:

#UNWIND(.fnend)

#ENDPROC(__modsi3)

登录后复制

8、再次编译,出现错误:

book@www.100ask.org:/work/test$ make

arm-linux-gcc -c -o lib1funcs.o lib1funcs.S

#arm-linux-ld -Ttext 0 -Tdata 0x30000000 start.o led.o uart.o init.o main.o -o sdram.elf

arm-linux-ld -T sdram.lds start.o led.o uart.o init.o main.o exception.o interrupt.o timer.o nor_flash.o my_printf.o string_utils.o lib1funcs.o -o sdram.elf

my_printf.o: In function `out_num':

my_printf.c:(.text+0x120): undefined reference to `__aeabi_uidivmod'

lib。

LPC2103

LP

貌似是缺少系统库,有些版本的linux编译qt是会出现缺少系统库而导致编译不成功的问题,不是很推荐用最新的编译器来编译,其实2.4的内核和3.4.5的编译器做qt就已经足够了,你可以去查查看那些版本的linux下可以成功的编译qt,安装的时候尽可能把开发用的库都选上,不然就只有自己再去打补丁,

仅作参考


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7318977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存