当我插入dca
模块时rcS
,使用时会看到以下错误dmesg
。我在网上看到是因为bzImage
和的版本不一致造成的dca.ko
,但是我的bzImage
和dca.ko
是同时编译的,我insmod dca.ko
在终端窗口手动执行的时候,我曾经dmesg
检查过,但是没有错误。问题是什么?是不是因为加载时间rcS
不对?
错误在dmesg
:
[ 5.889617] dca: module verification failed: signature and/or required key missing - tainting kernel
[ 5.889946] dca service started, version 1.12.1
insmod
在rcS
:
insmod /lib/modules/6.4.0-rt8/dca.ko
insmod /lib/modules/6.4.0-rt8/i2c-algo-bit.ko
insmod /lib/modules/6.4.0-rt8/pps_core.ko
insmod /lib/modules/6.4.0-rt8/ptp.ko
insmod /lib/modules/6.4.0-rt8/igb.ko
答案1
你的其他内核模块是签- 如果您没有选择其他方式,则可能使用内核构建过程自动生成的密钥。
您的dca.ko
未签名 - 或者至少未使用相同的密钥。
如果未使用安全启动,内核将仅信任构建它所用的密钥来启动,但可以选择接受不可验证的内核模块,同时在加载此类模块时将内核标记为受污染。
安全启动生效后,shimx64.efi
除了构建内核所用的公理可信密钥之外,安全启动签名密钥和由其维护的机器所有者密钥 (MOK) 通常也会添加到内核信任的密钥列表中,但随后内核应该还可以配置为拒绝加载不可验证的内核模块的尝试 - 否则它将不完全符合安全引导。
(在构建您自己的内核时,您显然可以准确地决定您想要的安全启动合规性有多严格 - 但是如果您分发可以在安全启动下运行但接受不可验证的模块的内核,则此类内核可能会被列为“安全启动”黑名单规避设备”并被未来的安全启动感知系统固件版本拒绝。)
有关更多详细信息,请参阅文档/admin-guide/module-signing.rst在内核源码包中。
要消除污点消息,您可以dca.ko
使用scripts/sign-file
内核源代码树中的工具以及CONFIG_MODULE_SIG_KEY
构建时选项指定的私钥对模块进行签名(或者如果未设置,则使用certs/signing_key.pem
内核源代码树中的默认自动生成的密钥) 。用于签署内核模块的哈希算法由CONFIG_MODULE_SIG_HASH
构建时选项指定。