你这个问题非常关键 ⚙️
——“生成了中间文件导致 .ko 文件冲突”,在 Android/MTK 平台编译内核模块(Kernel Module) 时是一个常见的坑。
我来帮你详细拆解原因与解决思路👇
当你执行 make 或 mmm 时,编译系统会在如下目录生成中间产物:
out/
├── target/
├── obj/
│ ├── KERNEL_OBJ/
│ ├── KERNEL_MODULES/
│ ├── ... ← 中间文件都在这里如果你:
.c、.h 或 Makefile,
out/ 文件夹,
那么旧版本编译生成的 .o(目标文件)或 .mod.c 文件就可能被复用,
导致生成的 .ko 文件冲突(符号不匹配、重复定义、版本签名不同)。
.ko。
因为 Android 的 build system (Soong + Make) 支持增量编译。
当你切换不同的系统版本(例如 u_sys 和 v_sys),
或者仅部分重新编译 vendor 代码时:
.o 文件;
执行:
make clean
make clobber或手动删除:
rm -rf out/target/product/*/obj/KERNEL_OBJ
rm -rf out/target/product/*/obj/KERNEL_MODULES然后重新:
source build/envsetup.sh
lunch <your_target>
make -j$(nproc)⚠️ 特别是从
u_sys(Android 14)切到v_sys(Android 15)时,一定要清干净。
如果你只改了一个模块,比如 drivers/misc/example,可以:
cd kernel-xxx/drivers/misc/example
make clean然后在 Android 顶层重新构建:
mmm kernel-xxx/drivers/misc/example.ko 路径冲突搜索系统中重复的 .ko 文件:
find out/ -name "*.ko" | grep your_module_name确认是否同一个模块被不同路径生成两次。
在 .config 或 Makefile 中,确保相同模块名不会在不同目录被 include 两次。
有时 MTK 设备 vendor 代码会重复定义一个模块(如 mtk_bt_drv.ko)。
操作 | 建议 |
|---|---|
切系统版本 | make clean 一次 |
改内核配置 | rm -rf out/target/product/*/obj/KERNEL_OBJ |
同名模块冲突 | 检查 vendor/ 和 device/mediatek/ 中是否同时定义 |
新增模块 | 确认 Android.mk / Android.bp 没有重复导出相同名字 |
要不你贴一下报错日志中关于 .ko 的冲突那一段?
我可以帮你 pinpoint 到是哪个中间产物或路径引起的冲突。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。