硬件准备:Intel SGX 的 CPU 要求与 BIOS 配置
做 TEE 环境部署,第一步不是装系统,而是确认你的 CPU 到底行不行。我见过不少团队,软件栈搭好了,一跑发现 SGX 压根没启用——回头一查,CPU 不支持。嗯,这种返工最浪费时间。
这一章,咱们就把硬件底子打牢。说白了,就是三件事:选对 CPU、进 BIOS 开 SGX、验证它到底开了没。
支持 SGX 的 CPU 型号清单
Intel SGX 不是所有酷睿都有的。它从第六代 Skylake 开始引入,但早期只有部分高端型号才支持。我个人习惯直接查 ark.intel.com,但为了方便,我把常见可用的系列整理了一下。
| 代际 | 架构代号 | 支持 SGX 的系列 | 注意事项 |
|---|---|---|---|
| 6th Gen | Skylake | Core i5/i7 6xxx(部分) | 仅限高端 SKU,i3 不支持 |
| 7th Gen | Kaby Lake | Core i5/i7 7xxx | 移动端部分型号被砍掉 SGX |
| 8th/9th Gen | Coffee Lake | Core i5/i7/i9 8xxx/9xxx | 桌面端基本全覆盖 |
| 10th Gen | Comet Lake / Ice Lake | Core i5/i7/i9 10xxx | Ice Lake 的 SGX 版本升级到 2.0 |
| 11th Gen | Tiger Lake | Core i5/i7/i9 11xxx | 支持 SGX 2.0,EPC 容量更大 |
| 12th/13th Gen | Alder Lake / Raptor Lake | Core i5/i7/i9 12xxx/13xxx | P-core + E-core 混合架构,SGX 兼容性需确认 |
| Xeon 系列 | Skylake-SP 起 | Xeon E3/E5/E7(部分) | 服务器端首选,EPC 容量大 |
BIOS 中开启 SGX 的步骤
确认 CPU 支持之后,下一步就是进 BIOS。不同厂商的 BIOS 界面长得不一样,但核心选项就那么几个。我一般按这个顺序找:
- 重启机器,按 Del / F2 / F10 进 BIOS(具体看开机画面提示)
- 找到 Advanced 或 Security 菜单——有些主板把它藏在 Overclocking 或 Chipset 下面
- 定位到 SGX 相关选项,常见名称有:
Intel SGXSGX EnableSoftware Guard Extensions
- 设置为 Enabled(部分 BIOS 提供 Auto / Disabled / Enabled 三档,选 Enabled)
- 保存并退出(F10 保存重启)
有些 BIOS 还会多出一个叫 SGX PRMRR Size 或 EPC Size 的选项。这个控制分配给 SGX 的内存大小。默认值通常是 128MB 或 256MB。如果你要跑大 enclave,建议手动调到最大。
检查 SGX 是否开启的方法
BIOS 设置完了,别急着往下走。先确认 SGX 真的在工作。我习惯用三种方法交叉验证:
方法一:通过 CPU 指令集检测
最简单的方式,用 cpuid 工具看 SGX 特性位。Linux 下直接跑:
# 安装 cpuid(如果没装)
sudo apt install cpuid
# 检查 SGX 支持
cpuid -1 | grep -i sgx
如果输出里有 SGX: Software Guard Extensions supported = true,说明 CPU 支持。但注意,这只能证明硬件支持,不代表 BIOS 已经开启了。
方法二:通过内核模块检测
Linux 内核从 4.12 开始原生支持 SGX。我一般用这个命令看驱动是否加载:
# 检查 SGX 驱动
ls /dev/sgx*
# 如果输出类似 /dev/sgx_enclave /dev/sgx_provision
# 说明 SGX 驱动已加载,BIOS 配置正确
如果 /dev/sgx* 不存在,可能是内核没编入 SGX 支持,也可能是 BIOS 没开。先确认内核版本:
uname -r
# 建议 5.11 以上,对 SGX 2.0 支持更好
方法三:通过 Intel SGX 软件包检测
Intel 官方提供了 sgx_enable 工具,可以一键检测并启用 SGX:
# 下载并运行 sgx_enable
wget https://download.01.org/intel-sgx/sgx-linux/2.18/distro/ubuntu20.04-server/sgx_enable
chmod +x sgx_enable
sudo ./sgx_enable
它会输出类似 sgx already enabled 或 sgx enabled successfully。如果提示 sgx not supported,那基本可以断定是硬件或 BIOS 的问题了。
cpuid 显示 SGX 支持,/dev/sgx 也存在,但跑 enclave 就报错。折腾了半天,发现是 BIOS 里把 SGX 的 Flexible Launch Control 设成了 Disabled。这个选项必须开启,否则 enclave 无法正常启动。
SGX 硬件准备核心流程
下面这张图把整个流程串起来了。你照着走一遍,基本不会漏掉什么。
常见问题与排查思路
硬件准备阶段,我遇到最多的问题就三个。这里直接列出来,省得你走弯路。
- BIOS 里找不到 SGX 选项——先升级 BIOS 到最新版。如果还找不到,去 Intel 官网查 CPU 的 SKU 编号,确认它真的支持 SGX。有些 i5-8400 和 i5-8500 就差一个数字,SGX 支持情况完全不同。
- SGX 开启后系统无法启动——可能是 EPC 大小设置不合理。试着把 PRMRR Size 调小一点,或者先设成 Auto。我遇到过一台机器,手动设 256MB 就黑屏,改成 Auto 反而正常了。
- Linux 下 /dev/sgx 设备不存在——先确认内核版本,低于 5.11 的建议升级。另外检查内核启动参数,确保没有加
nosgx或sgx_disable=1这类禁用参数。