编译自定义内核后Pixel 4触控失效,如何编译AOSP解决签名不匹配问题?
解决AOSP自定义内核与驱动KO签名不匹配的问题
核心原因
自定义编译内核时生成了新的内核签名密钥,而AOSP默认编译的驱动KO使用旧密钥(或默认测试密钥),导致签名校验不通过,驱动无法加载,进而触控失效。
具体解决步骤
1. 同步内核签名密钥到AOSP环境
- 找到你编译内核时生成的签名文件,通常位于内核源码目录的
scripts/signing/下,包含:signing_key.priv(私钥)signing_key.x509(公钥证书)
- 将这两个文件复制到AOSP源码的
build/target/product/security/目录下,替换原有testkey.priv和testkey.x509(测试环境);若为正式编译,根据AOSP配置替换对应密钥文件。
2. 重新编译驱动模块
- 进入AOSP源码根目录,初始化编译环境:
source build/envsetup.sh lunch <你的目标设备代号> - 找到触控驱动的源码目录(通常在
device/<厂商>/<设备>/kernel_modules/或hardware/<厂商>/touch/路径下),单独编译驱动:
或直接全量编译AOSP,确保驱动模块被重新编译:mmm <驱动源码目录路径>make -j$(nproc)
3. 统一内核与驱动的CONFIG配置
- 检查内核编译时的
.config文件,确认模块签名相关配置开启:CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_KEY="scripts/signing/signing_key.x509" - 将该
.config文件复制到AOSP对应设备的内核配置目录(如device/<厂商>/<设备>/kernel_config/),确保编译驱动时使用与内核一致的配置。
4. 临时禁用签名校验(仅调试用)
若仅用于临时调试,可跳过签名校验:
- 修改内核
.config关闭签名校验:
重新编译内核后替换预编译内核,再编译AOSP。CONFIG_MODULE_SIG=n - 或通过fastboot传递启动参数临时关闭:
fastboot boot <你的内核镜像> androidboot.selinux=permissive module.sig_enforce=0
内容的提问来源于stack exchange,提问作者范明毅
相关产品推荐
相关产品推荐

