Linux下驱动文件make编译后make load显示Key was rejected by service(需要签名)解决方法

1、查看签名情况

使用语句hexdump -C xxx.ko | tail以查询.ko驱动文件的签名状况
只有在驱动签名中出现~Module signature appended~的字样,才说明该驱动已经具有了正确的签名,否则则需要配置签名

  0007b620  00 00 00 00 00 00 00 01  ad 7e 4d 6f 64 75 6c 65  |.........~Module|
  0007b630  20 73 69 67 6e 61 74 75  72 65 20 61 70 70 65 6e  | signature appen|
  0007b640  64 65 64 7e 0a                                    |ded~.|
  0007b645

2、配置驱动签名

驱动签名配置依赖mokutil和shim-signed
进行安装

sudo apt install mokutil
sudo apt install shim-signed

安装好这两个依赖后就可以生成一个新的签名证书

sudo update-secureboot-policy --new-key

生成的证书(MOK.der)和私钥(MOK.priv)位于 /var/lib/shim-signed/mok/ 目录下,将证书进行导入

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der

导入完证书后我们要更改安全设置
Perform MOK management中选择Enroll MOK

3、将签名写入驱动

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-signed/mok/MOK.der xxx.ko

再次使用hexdump -C xxx.ko | tail查看驱动签名情况,看看是否有~Module signature appended~语句
再次sudo make load
如果显示insmod xxx.ko则载入成功,问题解决。

posted @ 2023-10-16 17:37  不想要名字  阅读(353)  评论(0编辑  收藏  举报