如何在 initramfs 中获取 /dev/tpm*?

如何在 initramfs 中获取 /dev/tpm*?

对于 LUKS 卷的无密码解密,我想将 U 形夹与我的 TPM 2.0 模块结合使用。该模块在 Debian 测试(牛眼)中得到认可:/dev/tpm0并且/dev/tpmrm0存在(以便我能够在 Debian 中运行必要的 U 形命令)。

但是,U 形夹 initramfs 脚本失败。在 shell 中对此进行了调查后init=premount,我发现 initramfs 中的/dev/tpm*上述设备不存在。我怎样才能改变这个?使用 Debian,我使用initramfs-tools.

答案1

确保驱动 TPM 的内核模块已加载到 initramfs 中,方法是将它们列在/etc/initramfs-tools/modules.然后 initramfsudev应该为您创建设备。

首先,运行lsmod | grep tpm查找您的 TPM 驱动程序模块。对我来说,输出如下所示:

# lsmod |grep tpm
tpm_tis                16384  0
tpm_tis_core           20480  1 tpm_tis
tpm                    61440  2 tpm_tis,tpm_tis_core
rng_core               16384  2 tpm

tpm_tis是 x86 硬件上最常见的 TPM 实现的驱动程序。从输出中,我们可以看到它依赖于其他模块:tpm_tis_coretpmrng_core。该lsmod列表是自下而上构建的,因此最佳加载顺序是加载第一个rng_core

因此,为了确保这些模块加载到 initramfs 中,您需要向该/etc/initramfs-tools/modules文件添加四行:

rng_core
tpm
tpm_tis_core
tpm_tis

(这可能有点矫枉过正。我认为initramfs-tools现在可以自动处理模块依赖关系,因此仅提及tpm_tis可能就足够了。但我喜欢显式指定模块以最大程度地减少重试的需要...)

编辑该/etc/initramfs-tools/modules文件后,您需要重新创建 initramfs 文件。在 Debian 中,使用update-initramfs -u.

下一步是重新启动并init=premount再次使用 shell 来确认/dev/tpm*现在已为您创建设备。

相关内容