linux-kernel - 如何使用 Yocto 为 Raspberry Pi 构建有效的 TPM2 映像?
问题描述
我想为启用 IMA 和 TPM2.0 支持的 Raspberry Pi 构建一个带有 Yocto 的 Linux 系统。因此,我想用 IMA/EVM 和 TPM 配置和配方编译内核。
IMA 支持应该通过 meta-secure-core/meta-integrity 层启用,并为工具添加 DISTRO_FEATURE “ima”,以及 IMAGE_INSTALL_append “packagegroup-ima”。应该通过 meta-security/meta-tpm 层启用 TPM2 支持,并通过添加 MACHINE_FEATURES “tpm2”并通过 IMAGE_INSTALL_append 安装“packagegroup-security-tpm2”。
此外,如果我理解正确,我需要 systemd 作为 init_manager。
Yocto 版本 (Thud/2.6.3)。我尝试了 Warrior,但遇到了构建错误。这将创建一个 4.14.X Linux 内核。
bblayers.conf:
BBLAYERS ?= " \
/<working-dir>/poky/meta \
/<working-dir>/poky/meta-poky \
/<working-dir>/poky/meta-yocto-bsp \
/<working-dir>/meta-openembedded/meta-oe \
/<working-dir>/meta-openembedded/meta-python \
/<working-dir>/meta-openembedded/meta-networking \
/<working-dir>/meta-openembedded/meta-perl \
/<working-dir>/meta-security \
/<working-dir>/meta-security/meta-tpm \
/<working-dir>/meta-secure-core/meta-integrity \
/<working-dir>/meta-raspberrypi \
"
本地配置文件:
MACHINE = "raspberrypi3"
...
DISTRO_FEATURES_append += "systemd ima"
VIRTUAL-RUNTIME_init_manager = "systemd"
MACHINE_FEATURES += "tpm2"
IMAGE_INSTALL_append += "packagegroup-security-tpm2 packagegroup-ima"
ENABLE_SPI_BUS = "1"
RPI_EXTRA_CONFIG = "\n \
dtoverlay=tpm-slb9670 \n"
构建:
/<working-dir>/build/$ bitbake core-image-minimal
我期望 /proc/config.gz 中有以下条目
对于 TPM:
CONFIG_HW_RANDOM_TPM=y
CONFIG_TCG_TPM=y
CONFIG_TCG_TIS_CORE=y
CONFIG_TCG_TIS=y
CONFIG_TCG_CRB=y
CONFIG_SECURITYFS=y
对于 IMA:
CONFIG_IMA=y
# CONFIG_IMA_KEXEC is not set
# CONFIG_IMA_LSM_RULES is not set
CONFIG_IMA_WRITE_POLICY=y
CONFIG_IMA_READ_POLICY=y
CONFIG_IMA_MEASURE_PCR_IDX=10
# CONFIG_IMA_TEMPLATE is not set
# CONFIG_IMA_NG_TEMPLATE=y is not set
CONFIG_IMA_SIG_TEMPLATE=y
CONFIG_IMA_DEFAULT_TEMPLATE="ima-sig"
# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set
CONFIG_IMA_DEFAULT_HASH_SHA256=y
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
CONFIG_IMA_DEFAULT_HASH="sha256"
CONFIG_IMA_APPRAISE=y
CONFIG_IMA_LOAD_X509=y
CONFIG_IMA_APPRAISE_BOOTPARAM=y
CONFIG_IMA_TRUSTED_KEYRING=y
CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY=y
CONFIG_IMA_BLACKLIST_KEYRING=y
CONFIG_IMA_X509_PATH="/etc/keys/x509_ima.der"
# CONFIG_IMA_APPRAISE_SIGNED_INIT is not set
但是,在 Raspberry Pi 上构建的 Linux 上搜索这些设置都没有启用。
# modprobe configs
# cat /proc/config.gz | gunzip > running.conf
# cat running.conf | grep IMA
当我之前为 qemu 构建时,我没有遇到这些问题,并且我能够确认我的设置已在内核中启用。只安装了像 evmctl 这样的工具。
另外,我对 Raspi 的 /boot/config.txt 的设置似乎没有效果。事实上,根本没有 /boot/config.txt 可供我打开。
最终,TPM2 abrmd 在引导期间没有启动(错误消息),我显然无法通过 SPI 在 /dev/tpm* 访问 TPM。我做错了什么?一般来说,我是 Yocto 和系统构建/Linux 内核的新手。
如果它与内核版本有关,我尝试为 4.19 构建,但出现构建错误。我还弄乱了 jumpnowtek 的 meta-rpi 层,但它没有解决我的问题。还有一个 meta-intel-iot-security/meta-integrity 层,但没有维护。
解决方案
您错过了修改 DTS。
我创建了一个指南和一个 github 项目来在 Raspberry 上插入 TPM。请参阅以下内容:
https://github.com/simonetolotti/meta-raspberrypi-web/tree/tpm
推荐阅读
- roblox - NPC 跟随该部分,但是当我靠近 NPC 时,他们离开该部分并开始向随机方向前进
- kubernetes - Prometheus - 路由中使用的未定义接收器“null”
- database - 多个时间实例可以由同一个数据库支持吗?
- javascript - 是否可以在 JS 中将 Body 和 Files 添加到单个 Axios 请求中?
- java - 如何获取在`EditText`中输入的最后一个单词?
- c - HASH_ADD 方法不会将新元素添加到哈希表中。使用 utash.h
- vim - Vim 解析长宏定义时太慢
- firebase - 编辑实时数据库规则时出错
- python - discord.py "error.retry_after" 返回一个浮点数;我想要时:分:秒格式
- c# - 当您不能使用泛型时,如何根据另一个对象的类型获取一个对象类型的列表?