[经验分享] 内核编译切换交叉编译工具链编译报错__aarch64_cas4_acq_rel处理 原创

润开鸿_闻飞 显示全部楼层 发表于 7 天前

【问题描述】

内核编译工具链gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu切换为rockchip新版本工具链gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu后内核编译报错如下:

image.png

[OHOS ERROR] WARNING: modpost: vmlinux.o(___ksymtab_gpl+rockchip_clk_register_armclk+0x0): Section mismatch in reference from the variable __ksymtab_rockchip_clk_register_armclk to the function .init.text:rockchip_clk_register_armclk()
[OHOS ERROR] The symbol rockchip_clk_register_armclk is exported and annotated __init
[OHOS ERROR] Fix this by removing the __init annotation of rockchip_clk_register_armclk or drop the export.
[OHOS ERROR]
[OHOS ERROR]   MODINFO modules.builtin.modinfo
[OHOS ERROR]   GEN     modules.builtin
[OHOS ERROR]   LD      .tmp_vmlinux.kallsyms1
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: Unexpected GOT/PLT entries detected!
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: Unexpected run-time procedure linkages detected!
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: drivers/../../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.o: in function `DropOldEventInRingBuffer':
[OHOS ERROR] /home/wen_fei/OpenHarmony/dayu210-v4.1-release/out/kernel/src_tmp/linux-5.10/drivers/hdf/khdf/manager/../../../..//framework/core/adapter/vnode/src/hdf_vnode_adapter.c:428: undefined reference to `__aarch64_cas4_acq_rel'
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: drivers/../../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.o: in function `AddEventToRingBuffer':
[OHOS ERROR] /home/wen_fei/OpenHarmony/dayu210-v4.1-release/out/kernel/src_tmp/linux-5.10/drivers/hdf/khdf/manager/../../../..//framework/core/adapter/vnode/src/hdf_vnode_adapter.c:448: undefined reference to `__aarch64_cas4_acq_rel'
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: drivers/../../../../../drivers/hdf_core/framework/core/adapter/vnode/src/hdf_vnode_adapter.o: in function `ReadDeviceEventInRingBuffer':
[OHOS ERROR] /home/wen_fei/OpenHarmony/dayu210-v4.1-release/out/kernel/src_tmp/linux-5.10/drivers/hdf/khdf/manager/../../../..//framework/core/adapter/vnode/src/hdf_vnode_adapter.c:294: undefined reference to `__aarch64_cas4_acq_rel'
[OHOS ERROR] ../../../../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld: /home/wen_fei/OpenHarmony/dayu210-v4.1-release/out/kernel/src_tmp/linux-5.10/drivers/hdf/khdf/manager/../../../..//framework/core/adapter/vnode/src/hdf_vnode_adapter.c:303: undefined reference to `__aarch64_cas4_acq_rel'
[OHOS ERROR] make[1]: *** [Makefile:1224: vmlinux] Error 1
[OHOS ERROR] make: *** [arch/arm64/Makefile:205: rk3588-bearkey-bq3588c1-linux.img] Error 2

【问题分析】

aarch64工具链在Linux系统没有__sync_val_compare_and_swap内置原子函数,可以通过将函数替换为atomic_cmpxchg来解决或者直接添加参数-mno-outline-atomics来解决。

【处理方法】

在drivers/hdf_core/adapter/khdf/linux/manager/Makefile文件中添加以下参数即可

ccflags-y += -mno-outline-atomics

【参考文档】

一个OpenHarmony rk3568编译问题

undefined reference to `__aarch64_cas4_sync' error on arm64 native build

aarch64 平台编译报错

Embedded Linux (aarch64)

rk3568 arm、arm64编译失败undefined symbol: __aarch64_cas4_acq_rel

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部