gpt4 book ai didi

android - 未定义对 `cnss_get_platform_cap' 的引用

转载 作者:行者123 更新时间:2023-11-30 14:46:57 26 4
gpt4 key购买 nike

我正在编译Android Kernel 3.18。我收到此错误

drivers/built-in.o: In function `enable_extldo':
/home/vinay/customKernel/3.18/kernel_yu_msm8937/drivers/bluetooth/bluetooth-power.c:307: undefined reference to `cnss_get_platform_cap'
/home/vinay/customKernel/3.18/kernel_yu_msm8937/drivers/bluetooth/bluetooth-power.c:307:(.text+0x5c45bc): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `cnss_get_platform_cap'
Makefile:951: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

这是source code我正在使用 aarch64-linux-android-4.9 工具链

最佳答案

当我尝试为 MI 设备编译内核时,我遇到了同样的问题。

首先你可以看到函数cnss_get_platform_cap是在cnss.h中声明的,该函数位于include/net中:

enter image description here

打开这个文件你会发现这个函数被声明为外部函数:

enter image description here

所以这里只是一个声明,而不是一个实现。

然后我们挖了一下这个函数在哪里,我用find命令查找了所有cnss相关的驱动文件,发现这个函数是在./net/wireless/cnss/cnss_pci.c中实现的

enter image description here

我们可以看到,函数就在这里,编译后它将是一个导出的符号。

enter image description here

你可以记录你的编译过程,你会发现实际上成功编译了bluetooth-power.c

enter image description here

当makefile链接vmlinux时就会出现问题。所以我们到了。我查了一下日志,没有发现cnss_pci.c被编译过,只有cnss_common.c被编译了,我们打开net/wireless/cnss中的子makefile/

enter image description here

您会发现需要在 defconfig 文件中添加一项来编译 cnss_pci.c,即 'CONFIG_CNSS_PCI=y'。我将其添加到 arch/arm64/configs/xxx_defconfig 中的 defconfig 文件中,并解决了这个问题。

我只是尝试将供应商补丁合并到较新的 CAF 内核中,即使使用自动合并,也存在许多语法错误。至于逻辑错误和bug,我不知道。很多东西需要学习。希望你能找到出路。

关于android - 未定义对 `cnss_get_platform_cap' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51785531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com