You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

arm64交叉编译5.4.86内核kprobe模块insmod加载Exec format错误求解

错误原因分析
  • DEFEX安全机制拦截:dmesg日志明确返回defex: immutable write violation报错,三星设备内置的DEFEX(可执行文件动态防护)安全机制,对/vendor/lib/modules目录配置了不可执行、不可修改的强制保护规则,直接拦截了内核加载该路径下ko文件的访问请求,触发Exec format error错误。
  • 内核源码与配置不匹配:你编译模块使用的是纯主线5.4.86内核源码,而目标设备使用的是高通QGKI定制版本5.4.86内核,两者的补丁、配置参数存在大量定制修改,虽然模块vermagic前缀与内核版本一致,但实际内核符号、校验规则存在差异,会导致模块格式校验失败。
  • 路径权限限制:/vendor分区默认以只读方式挂载,自定义模块写入后也会被SELinux等安全规则限制加载权限。
解决方案
  1. 调整模块存放路径
    将模块不要放在/vendor分区,转移到无DEFEX保护的/data/local/tmp目录下,执行以下命令测试加载:
mv /vendor/lib/modules/kprobe_module.ko /data/local/tmp/
chmod 755 /data/local/tmp/kprobe_module.ko
insmod /data/local/tmp/kprobe_module.ko

如果仍有DEFEX拦截,可临时关闭DEFEX强制校验,执行setprop persist.defex.enforce 0后重启设备再尝试。

  1. 对齐内核编译配置
  • 下载目标设备对应版本的官方开源内核源码,不要使用纯主线5.4.86源码编译。
  • 从目标设备导出当前内核的配置文件,替换编译用内核的配置:
# 设备上执行
zcat /proc/config.gz > /sdcard/kernel_config

将导出的配置文件放到编译用的内核源码根目录,重命名为.config。

  • 修改内核源码Makefile的EXTRAVERSION参数,追加-qgki-22560472-userdebug-abG996USQU4ZUIH,保证编译出的模块vermagic与目标内核完全匹配。
  • 确认内核配置中已开启必要选项:CONFIG_KPROBES=y、CONFIG_MODULES=y、CONFIG_MODULE_UNLOAD=y。
  1. 临时关闭SELinux拦截
    如果是userdebug版本设备,加载前执行setenforce 0关闭SELinux强制校验,避免额外拦截。

内容的提问来源于stack exchange,提问作者shiva mahanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:57:04