xixitalk's snippet

Post Longer Than 140 Characters Tweets

May 3, 2018 - Comments

模块unsupported RELA relocation:275错误

ARM A53芯片有个Erratum,编号是843419,在linux内核打开修正选项后,一些模块(ko)会insmod失败,提示:

内核选项:CONFIG_ARM64_ERRATUM_843419


module xxx: unsupported RELA relocation:275
insmod: can't sinert xxx.ko: invalid module


当内核打开这个选项后,在模块的CFLAGS里增加了-mcmodel=large选项。而有些ko模块是自有编译框架,没有继承内核的编译选项,没有追加-mcmodel=large选项,所以造成insmod错误。

解决办法:就是在模块的CFLAGS里也增加-mcmodel=large选项。

检查方法1:确保ko文件进行反汇编没有adrp指令:


aarch64-linux-objdump -d xxx.ko |grep adrp


检查方法2:重定位信息没有R_AARCH64_ADR_PRE


aarch64-linux-readelf  -r xxx.ko  | grep R_AARCH64_ADR_PRE


如果仅增加-mcmodel=large选项还解决不了问题,可以试试下面的选项:


 -mcmodel=large -mfix-cortex-a53-843419


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

Tags: linux

交叉编译perf(ARM Linux) libgcc是什么

comments powered by Disqus