在 Linux 下“驱动签名”通常指 内核模块(Kernel Module, .ko 文件)的签名,用于满足 Secure Boot / 内核模块签名校验 的要求。下面按常见场景系统说明。
启用以下任一机制时,未签名或被篡改的驱动无法加载:
CONFIG_MODULE_SIG常见报错:
module verification failed: signature and/or required key missing
| 方式 | 适用场景 |
|---|---|
| 内核自带签名(推荐) | 自己编译内核或使用发行版工具 |
| 第三方 / MOK 签名 | NVIDIA、VMware、自定义闭源驱动 |
openssl req -new -x509 \
-newkey rsa:2048 \
-keyout signing_key.priv \
-out signing_key.x509 \
-nodes -days 36500 \
-subj "/CN=My Kernel Module Signing Key/"
scripts/sign-file内核源码中自带:
./scripts/sign-file sha256 \
signing_key.priv \
signing_key.x509 \
mydriver.ko
验证:
modinfo mydriver.ko | grep signer
适用于 已启用 Secure Boot 的发行版。
openssl req -new -x509 \
-newkey rsa:2048 \
-keyout MOK.priv \
-out MOK.der \
-nodes -days 36500 \
-subj "/CN=My MOK Key/"
sudo mokutil --import MOK.der
重启 → 进入 MOK Management → Enroll MOK
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file \
sha256 MOK.priv MOK.der mydriver.ko
以 Ubuntu 为例:
sudo apt install dkms
在 DKMS 配置中启用签名(示例):
/sbin/sign-file sha256 /path/MOK.priv /path/MOK.der $module.ko
很多驱动(如 NVIDIA)支持:
sudo apt install nvidia-dkms-*
mokutil.run 需手动签名kmodsignsudo yum install kmod
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file ...
sign-file + mokutil# 生成密钥
openssl req -new -x509 -newkey rsa:2048 \
-keyout key.priv -out key.der -nodes \
-subj "/CN=test/"
# 签名
./scripts/sign-file sha256 key.priv key.der test.ko
# 加载
sudo insmod test.ko
如果你能告诉我:
.run我可以给你 精确的一步一步命令。