Initramfs

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

  • March 23, 2020

對於 LUKS 卷的無密碼解密,我想將 clevis 與我的 TPM 2.0 模組一起使用。該模組在 Debian 測試 (bullseye) 中被辨識:/dev/tpm0並且/dev/tpmrm0存在(以便我能夠在 Debian 中執行必要的 clevis 命令)。

但是,U 形夾 initramfs 腳本失敗。在init=premountshell 中對此進行了調查後,我發現在 initramfs/dev/tpm*中上述設備不存在。我怎樣才能改變這個?使用 Debian,我用initramfs-tools.

確保驅動 TPM 的核心模組通過在/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*現在為您創建了設備。

引用自:https://unix.stackexchange.com/questions/574503