如何编写内核模块的Android.bp配置并保留安装后的.ko后缀
问题原因
你当前使用的cc_prebuilt_library_shared是专门用于预编译共享库的模块类型,默认会强制给输出文件添加lib前缀和.so后缀,所以按你现有配置确实会生成libwlan.so文件,不符合内核模块的命名要求。
解决方案
方案1:使用prebuilt_file模块类型(推荐,适配Android 10及以上版本)
直接用通用预编译文件规则,完全保留原文件名,配置示例如下:
prebuilt_file { name: "wlan.ko", src: "lib/wlan.ko", relative_install_path: "modules", vendor: true, // 不需要编译/剥离处理,内核模块strip后会无法加载 strip: { none: true } }
该配置会直接把文件安装到/vendor/lib/modules/wlan.ko,完全保留后缀。
方案2:沿用cc_prebuilt_library_shared,修改默认命名规则
如果必须使用cc类预编译配置,可以添加三个属性禁用前缀、自定义后缀,修改后的配置如下:
cc_prebuilt_library_shared { name: "wlan", relative_install_path: "modules", // 禁用默认的lib前缀 no_lib_prefix: true, // 自定义后缀为.ko,替换默认的.so suffix: ".ko", // 禁用strip,避免内核模块损坏 strip: { none: true }, target: { android_arm: { srcs: "lib/wlan.ko" } }, vendor: true }
注意事项
内核模块禁止执行strip操作,两种方案都必须配置strip: none,否则模块加载时会出现invalid module format错误。
内容的提问来源于stack exchange,提问作者Bret Joseph
相关产品推荐
相关产品推荐

