在 Linux 下“给驱动签名”通常有两种语境,取决于你指的是 内核模块(.ko)签名 还是 UEFI / 安全启动相关的驱动/二进制签名。下面分别说明。
.ko)签名CONFIG_MODULE_SIG_FORCE 后,只允许加载已签名模块内核源码中提供:
scripts/sign-file
./scripts/sign-file sha256 private_key.pem public_key.x509 module.ko
示例:
./scripts/sign-file sha256 signing_key.pem signing_cert.crt mydriver.ko
签名后:
modinfo mydriver.ko
可以看到 signature 字段。
openssl req -new -x509 -newkey rsa:2048 \
-keyout private_key.pem -out public_key.pem \
-days 3650 -nodes
然后在编译内核时:
CONFIG_MODULE_SIG_KEY)kmodsignsudo kmodsign sha512 private.key public.crt mydriver.ko
sudo mokutil --import public_key.der
如果你指的是 EFI 驱动(.efi) 或 bootloader:
sbsign 签名sbsign --key key.pem --cert cert.pem \
--output signed.efi input.efi
shim + MOK(常见方案)shim 由 Microsoft 签名mokutil --sb-state
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_FORCE=y
| 场景 | 工具 |
|---|---|
| 内核模块签名 | sign-file / kmodsign |
| UEFI 驱动签名 | sbsign |
| Secure Boot | MOK + 自签名 |
| 发行版支持 | DKMS / 官方签名 |
如果你能说明:
我可以给你更精确的步骤。