我正在编译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 工具链
答案 0 :(得分:0)
当我尝试为MI设备编译内核时,遇到了相同的问题。
首先,您可以看到函数cnss_get_platform_cap
是在包含/网络中的cnss.h
中声明的:
打开此文件,您会发现此函数被声明为外部函数:
所以这里只是一个声明,不是一个实现。
然后我们在函数的位置进行了挖掘,我使用find命令查找了所有与cnss相关的驱动程序文件,并且我发现此函数是在./net/wireless/cnss/cnss_pci.c
中实现的
如我们所见,该函数在此处,编译后将成为导出的符号。
您可以记录您的编译过程,并且发现实际上可以成功编译bluetooth-power.c
仅当makefile链接vmlinux时,就会出现问题。所以我们到了。我搜索了日志,但没有发现cnss_pci.c
曾经被编译过,只有cnss_common.c
被编译了,让我们在net / wireless / cnss /
您会发现需要在defconfig文件中添加一个项目来编译cnss_pci.c
的{{1}}。我将其添加到'CONFIG_CNSS_PCI=y'
中的defconfig文件中,并且解决了这个问题。
我只是试图将供应商补丁合并到较新的CAF内核中,即使使用自动合并也存在许多语法错误。 至于逻辑错误和错误,我不知道。很多事情需要学习。 希望你找到出路。