我在加载我自己为安全启动编译和签名的内核模块时遇到困难。有问题的模块是ec_sys,位于drivers/acpi内核树的目录中。
我使用的是 Debian 11 stable,内核版本 5.10.0-14-amd64,内核版本 5.10.113-1。
简而言之,问题是我尝试加载模块,例如:
sudo modprobe -f ec_sys
Run Code Online (Sandbox Code Playgroud)
以错误结束
modprobe:错误:无法插入“ec_sys”:不允许操作
dmesg 产生以下结果:
锁定:modprobe:未签名模块加载受到限制;参见 man kernel_lockdown.7
如果我理解正确的话,锁定应该阻止将未签名的模块加载到内核中,但事实上我确实按照 Debian 关于该主题的官方文档对其进行了签名,并且进展顺利,没有任何问题。我不知道为什么它仍然被阻止。
只是为了实际加载模块,我什至尝试通过 SysRq+x 组合完全禁用内核锁定,但似乎此内核版本不支持它(根本无法识别“x”命令)。
对于更多背景信息,以下是我在注册机器所有者密钥并用其签署模块之前构建模块所执行的步骤。
# Get the source code
apt source linux
cd linux-5.10.113
# Generate .config
make localmodconfig
# Enable ec_sys via menuconfig (or just set CONFIG_ACPI_EC_DEBUGFS=m in .config)
make menuconfig
# Prepare modules
make modules_prepare
# Build acpi modules as they're the only ones of interest …Run Code Online (Sandbox Code Playgroud)