3. 操作系统准备:Ubuntu 22.04 LTS 安装与内核调优
操作系统准备这一步,说简单也简单,说坑也真坑。我见过不少团队,TEE 环境搭不起来,最后发现是内核版本不对,或者 IOMMU 没开。白白浪费一两天。
这一章,咱们就把 Ubuntu 22.04 LTS 的安装、内核版本选择、以及那几个关键的内核参数,一次性说清楚。
3.1 为什么是 Ubuntu 22.04 LTS?
你可能要问,CentOS 不行吗?Debian 不行吗?
行,当然行。但我个人习惯用 Ubuntu 22.04 LTS 作为 TEE 开发的基础系统。原因有三:
- 内核版本新:默认 5.15 内核,对 Intel SGX 和 AMD SEV 的支持都比较成熟。
- 驱动生态好:Intel 和 AMD 的官方 SDK 和驱动,优先测试的就是 Ubuntu LTS 版本。
- 社区活跃:遇到问题,网上搜到的解决方案,十有八九是基于 Ubuntu 的。
3.2 安装时的几个关键点
安装过程本身不复杂,但有几个地方,你得多留个心眼。
3.2.1 磁盘分区
我建议你用 LVM(逻辑卷管理)。为什么?因为 TEE 环境后期可能会需要扩展存储空间,LVM 可以动态调整,不用重装系统。
- /boot:1GB,ext4 文件系统。
- swap:跟内存大小一致即可,或者干脆不要(如果内存够大)。
- /:剩余空间全给根分区,用 LVM。
3.2.2 网络配置
安装时记得配好静态 IP。TEE 环境通常需要固定的 IP 地址,方便后续配置远程证明和密钥管理。
3.3 内核版本要求
这是个大坑。不同 TEE 技术对内核版本的要求不一样。
| TEE 技术 | 最低内核版本 | 推荐内核版本 | 备注 |
|---|---|---|---|
| Intel SGX | 5.11 | 5.15+ | 需要开启 SGX 驱动和 FSGSBASE 特性 |
| AMD SEV | 5.14 | 5.19+ | 需要开启 SEV-ES 和 SEV-SNP 支持 |
| Intel TDX | 6.0 | 6.2+ | 需要特定内核补丁,建议使用官方内核 |
Ubuntu 22.04 LTS 默认内核是 5.15,对 SGX 和 SEV 都够用。但如果你要用 TDX,那就得升级内核了。
3.4 内核参数调整(IOMMU 相关)
好了,系统装好了,内核版本也对了。接下来就是最关键的一步——调整内核参数。
说白了,就是告诉内核:你要把 IOMMU 打开,把硬件隔离能力交出来。
3.4.1 什么是 IOMMU?
IOMMU(Input-Output Memory Management Unit)是一种硬件技术,它可以让操作系统控制设备对内存的访问。在 TEE 场景下,IOMMU 可以防止恶意设备直接读取受保护的内存区域。
你想想看,如果没有 IOMMU,一个恶意的 PCIe 设备可以直接 DMA(直接内存访问)到你的安全内存里,那 TEE 还有什么意义?
3.4.2 关键内核参数
这些参数需要在 GRUB 配置里添加。编辑 /etc/default/grub 文件,找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行。
# Intel 平台
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt"
# AMD 平台
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt"
# 如果同时需要 SGX
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt sgx_enable=1"
解释一下这几个参数:
- intel_iommu=on / amd_iommu=on:开启硬件 IOMMU 功能。
- iommu=pt:开启 pass-through 模式。这个模式可以减少 IOMMU 的性能开销,对虚拟化场景特别有用。
- sgx_enable=1:显式开启 SGX 支持。有些 BIOS 默认关闭 SGX,这个参数可以强制开启。
intel_iommu=on 之后,网卡驱动死活加载不上。后来发现是 BIOS 里的 VT-d 没开。记住,内核参数和 BIOS 设置要配合好。BIOS 里没开 VT-d,内核里加再多参数也没用。
3.4.3 应用配置
修改完 GRUB 配置后,执行以下命令使其生效:
sudo update-grub
sudo reboot
重启后,检查 IOMMU 是否成功开启:
dmesg | grep -i iommu
如果看到类似 IOMMU enabled 或 Intel(R) Virtualization Technology for Directed I/O 的信息,说明配置成功了。
3.5 知识体系总览
下面这张图,帮你把这一章的核心逻辑串起来:
3.6 验证环境是否就绪
最后,咱们跑几个命令,确认环境真的准备好了。
# 检查内核版本
uname -r
# 检查 IOMMU 状态
dmesg | grep -i "iommu enabled"
# 检查 SGX 是否可用(Intel 平台)
ls /dev/sgx_enclave
ls /dev/sgx_provision
# 检查 SEV 是否可用(AMD 平台)
dmesg | grep -i sev
如果这些命令都返回了预期的结果,恭喜你,操作系统准备这一步,你已经稳了。