Android下linux驱动模块编译与加载 Required key not available

遇到的问题 Required key not available

在之前的linux版本,使用Makefile进行模块编译,下载到板子后使用insmod 模块.ko,就可以加载模块了
现在的安卓版本,使用这种方式会有签名问题,导致加载模块失败

insmod: failed to load ledtest.ko: Required key not available

为了解决此问题需要关闭签名配置后重新编译烧录,再添加模块.ko即可正常使用

高通平台

关闭签名

根据自己板子的kernel config配置文件进行配置
kernel/msm-4.9/arch/arm64/configs/msm8953_defconfig
kernel/msm-4.9/arch/arm64/configs/msm8953-perf_defconfig

# CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE=y
# CONFIG_MODULE_SIG_SHA512=y

此配置注释后,可以关闭签名,两个文件一起修改

尝试添加签名

参考资料:insmod: failed to load ledtest.ko: Required key not available解决签名问题

尝试过给模块添加签名后加载到板子上,一直失败.

#编译文件名修改
file = helloobj-m += $(file).o #hello.c编译成对应的二进制可			执行模块文件 hello.ko
#kernel编译生成的路径
KDIR=/home/liwl/gaotong/M1508S/LA.UM.7.6.2.r1-10800-89xx.0/out/target/product/msm8953_64
KERNEL_DIR=$(KDIR)/obj/KERNEL_OBJ #指定内核源码路径#ARM架构
ARCH_CC = arm64
#编译使用的交叉编译器,如果没有则需要在安卓源代码中source build/envsetup.sh
CROSS_COMPILE_CC = aarch64-linux-android-
#-C:到某个指定的目录下去编译,到/opt/kernel目录下去编译
#SUBDIRS:指定一个子目录,这个子目录为当前路径
#modules:采用模块化编译,将.c编译成.ko文件
all: #make all执行以下命令make -C $(KERNEL_DIR) SUBDIRS=$(PWD) ARCH=$(ARCH_CC) CROSS_COMPILE=$(CROSS_COMPILE_CC) modules
#展开:
# 	make -C /opt/kernel SUBDIRS=/opt/drivers/day01/1.0 arm64 aarch64-linux-android-gcc modules#签名 成功,加载时失败
SIGN_DIR  = $(KDIR)/obj/kernel/msm-4.9/scripts/sign-file # 签名文件
MODSECKEY = $(KDIR)/obj/kernel/msm-4.9/certs/signing_key.pem
MODPUBKEY = $(KDIR)/obj/kernel/msm-4.9/certs/signing_key.x509
mod_sign_cmd = $(SIGN_DIR) sha512  $(MODSECKEY) $(MODPUBKEY)  $(file).ko
#签名
sign:$(mod_sign_cmd)
# 展开
# scripts/sign-file  	sha512 	certs/signing_key.pem 	certs/signing_key.x509 	/home/liwl/gaotong/M1508S/kernel_driver/01model/hello.koclean:make -C $(KDIR) SUBDIRS=$(PWD) clean

此编译脚本:编译模块正常,签名正常,加载模块失败

如果觉得对你有帮助,请意思意思
点击赞助


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部