Aosp14 insmod ko fail unsupported RELA relocation

参考下文搭建起aosp14的环境,kernel选择6.1,

VIM3/VIM3L AOSP Android 14.0 Upside Down Cake - Announcements - Khadas Community

在kernel 中新加驱动编译ko,在Android自动中insmod会报错
错误log如下
[ 2963.428783][ T2964] module bcmdhd: unsupported RELA relocation: 311
insmod: failed to load /vendor/lib/modules/bcmdhd.ko: Exec format error

请问这是什么原因导致?

rebuild kernel也是按照下面方式执行,然后rebuild Android,重新烧录img过程
cd ~/src/khadas-kernel/
export DIST_DIR=~/src/khadas-aosp-14/device/amlogic/yukawa-kernel/6.1
tools/bazel run //yukawa-device:yukawa_dist – --dist_dir=$DIST_DIR

hi @huluwa

(1)KO是 整编内核得到的 还是 单编得到的 ?
(2) 使用直接编译进内核的方式,新加的驱动可以正常吗?

你好,你是在adb环境下执行的insmod嘛

系统开机init自动安装,还有adb shell 安装都有测试,一样的错误提示

KO是整编kernel得到的.直接编译到内核中.

从报错上看是ko文件并不是适合我们平台运行的文件。
可以使用file + XXX.ko 查看一下。 确认一下ko是否为可在我们平台运行的文件吗?

如下
vim3:/vendor/lib/modules # uname -a
Linux localhost 6.1.25-android14-11-maybe-dirty #1 SMP PREEMPT Thu Jan 1 00:00:00 UTC 1970 aarch64 Toybox

modinfo信息
vermagic: 6.1.25-android14-11-maybe-dirty SMP preempt mod_unload modversions aarch64

补充下,kernel原本的代码重新编译出来的ko是正常可用的,就是我单独加的这个模块驱动不可用.怀疑是不是哪里配置不对才引起的,不过没有什么方向.看网上解释,试过也没有生效
compile kpm using ndk and solve errors/kpm使用ndk编译的方法和错误解决 · Issue #27 · bmax121/KernelPatch · GitHub

error1:unsupported RELA relocation: 311
Solution:Add cflag: -fno-PIC

使用命令是是

file bcmdhd.ko 

通过这个命令可以查看出来编译的ko是使用那个工具链编译的。
你可以通过file 原本内核的ko 和 file bcmdhd.ko 进行对比。
从上面报错来看,是工具链的问题。

工具链没有问题吧,我是放到kernel里编译的,如下两个ko上面是已经安装进去的,下面就是手动添加的显示一样的

vim3:/vendor/lib/modules # file btqca.ko
btqca.ko: ELF relocatable, 64-bit LSB arm64, static, BuildID=b1eef79ccea843fe9a85538c23cf57bb56e9f2ad, not stripped
vim3:/vendor/lib/modules # file bcmdhd.ko
bcmdhd.ko: ELF relocatable, 64-bit LSB arm64, static, BuildID=fca8a199d4f385686788e6b457f7ed2d71692fb3, not stripped

@huluwa

下面是把驱动放在内核代码里编译并且可以加载安装的例子。你可以参考一下。

驱动可被加载安装注意的事项:
(1)编译工具链是否用对
(2)不放到内核里编译。检查编译时候指定的内核源代码