ERROR: “__aeabi_uldivmod“ [***.ko] undefined!——问题解决记录

编译驱动的过程中,碰到了如下的问题:

在网上查询到,是由于编译器不支持除法运算导致的。

解决undefined reference to `__aeabi_uidivmod'和undefined reference to `__aeabi_uidiv'的错误_你见过我的柠檬包吗的博客-CSDN博客

依照上文将libgcc.a引入,在此case需要从链接脚本添加。

结果引入了更多的错误,只能寻找另外的方法。

Stack Overflow上这个问题引起了我的注意:

linux device driver - WARNING: "__aeabi_uldivmod" Undefined symbol in opendla.ko - Stack Overflow
从这里可以看到我们遇到的问题同样是出在uldiv上,是64位除法。其中一个回答给出的方法是,使用div_u64接口代替64位除法运算。

那么我们只需要找出代码里64位除法的位置,然后对其做替换就可以了。

对驱动目标文件做反汇编:

<交叉工具链前缀>-objdump -j .text -ld -C -S <目标文件>.o > <输出的文本文件>  #反汇编+显示行号

在得到的文本里查找__aeabi_uldivmod,发现只有一处:

对应到代码的位置,进行修改,使用div_u64进行除法运算。

修改之后,编译通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值