【问题描述】
内核编译工具链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后内核编译报错如下:

[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 |