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 的。
我的建议:如果你刚接触 TEE,别折腾其他发行版。就用 Ubuntu 22.04 LTS Server 版,最小化安装,干净利落。

3.2 安装时的几个关键点

安装过程本身不复杂,但有几个地方,你得多留个心眼。

3.2.1 磁盘分区

我建议你用 LVM(逻辑卷管理)。为什么?因为 TEE 环境后期可能会需要扩展存储空间,LVM 可以动态调整,不用重装系统。

  • /boot:1GB,ext4 文件系统。
  • swap:跟内存大小一致即可,或者干脆不要(如果内存够大)。
  • /:剩余空间全给根分区,用 LVM。

3.2.2 网络配置

安装时记得配好静态 IP。TEE 环境通常需要固定的 IP 地址,方便后续配置远程证明和密钥管理。

注意:不要用 DHCP!我曾经在一个项目中,因为 DHCP 导致 IP 地址变化,整个远程证明链路都断了,排查了半天才发现是 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,那就得升级内核了。

核心原则:内核版本不是越新越好,而是越稳定越好。TEE 环境对稳定性要求极高,别追新内核。

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,这个参数可以强制开启。
避坑指南:我曾经在一台 Dell 服务器上,加了 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 知识体系总览

下面这张图,帮你把这一章的核心逻辑串起来:

操作系统准备核心流程 选择 Ubuntu 22.04 LTS 安装系统(LVM + 静态IP) 确认内核版本 ≥ 5.15 调整内核参数(IOMMU) 验证:dmesg | grep iommu 关键检查点 • BIOS 开启 VT-d / SVM • 内核参数与硬件匹配 • 重启后验证生效 常见错误 • IOMMU 未开启 • 内核版本过低 • BIOS 与内核参数冲突

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

如果这些命令都返回了预期的结果,恭喜你,操作系统准备这一步,你已经稳了。

一个小技巧:把上面这些检查命令写成一个脚本,每次部署新机器时跑一遍。我自己的团队就是这么干的,省了不少排查时间。