Thunderbolt
Thunderbolt 3 在最新的 Linux 内核版本中开箱即用 [1]。从 4.13 版本开始,Linux 内核也支持 Thunderbolt 安全性。
获取固件更新
制造商经常发布 Thunderbolt 端口和设备的固件更新以确保正常运行,请访问 https://thunderbolttechnology.net/updates 以获取更多关于如何为特定供应商获取更新的详细信息。
用户设备授权
现代 Thunderbolt 设备实现了安全模式,连接设备时需要用户授权 - 这是为了防止恶意设备执行 DMA 攻击 或以其他方式干扰硬件(参见 Thunderstrike 2)。
Linux 当前支持的模式有
none
- 无安全保护,默认连接和初始化所有设备。在 BIOS 设置中,这通常称为Legacy mode(传统模式)。user
- 每次连接设备时都需要用户授权。在 BIOS 设置中,这通常称为Unique ID(唯一 ID)。secure
- 需要用户授权,但设备随后会被记住,无需重新授权。在 BIOS 设置中,这通常称为One time saved key(一次性保存密钥)。dponly
- 仅限 DisplayPort 功能,不允许其他设备。在 BIOS 设置中,这通常称为Display Port Only(仅显示端口)。
安全级别通常在固件级别配置;建议至少设置为 secure
。可以使用以下命令查询此设置的状态
$ cat /sys/bus/thunderbolt/devices/domain0/security
图形前端
- GNOME 从 3.30 版本开始,在 UI 中原生支持授权设备
- Plasma 集成可从此 git 仓库 和 plasma-thunderbolt 软件包获得
自动连接任何设备
只想连接任何设备而无需任何手动操作的用户可以创建一个 udev 规则,如 99-removable.rules
中所示
/etc/udev/rules.d/99-removable.rules
ACTION=="add", SUBSYSTEM=="thunderbolt", ATTR{authorized}=="0", ATTR{authorized}="1"
强制供电
许多 OEM 包含一种方法,可用于强制 Thunderbolt 控制器的电源处于开启状态。如果机器支持,这将通过 WMI 总线和一个名为 force_power 的 sysfs 属性暴露出来 [2]。
当连接的设备失去连接或控制器自行关闭时,强制供电可能特别有用。
要强制电源开启/关闭,请将 1 或 0 写入此属性,例如强制供电
# echo 1 > /sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341/force_power
force_power
状态。故障排除
PCI 总线未注册
有时,当连接 Thunderbolt 设备时,PCI 总线可能未注册。这表现为屏幕工作正常,而 USB 设备无法在您的计算机上注册。这可以通过发出 PCI 重新扫描来解决
# echo 1 > /sys/bus/pci/rescan
自动 PCI 总线重新扫描
对于 PCI 总线未注册的持续问题,可以使用 udev 规则配置自动重新扫描。这将每当连接 Thunderbolt 设备时触发重新扫描。
创建 PCI 重新扫描 bash 脚本
/usr/local/bin/thunderbolt-rescan.sh
#!/bin/bash echo 1 > /sys/bus/pci/rescan
使其可执行
# chmod +x /usr/local/bin/thunderbolt-rescan.sh
接下来创建一个 udev 规则,该规则在 thunderbolt 连接时触发
/etc/udev/rules.d/98-thunderbolt-rescan.rules
ACTION=="add", SUBSYSTEM=="thunderbolt", RUN+="/usr/local/bin/thunderbolt-rescan.sh"
增加热插拔总线大小和内存
某些主板的固件没有向内核报告足够的总线和内存大小,导致驱动程序加载失败。将以下内容添加到内核命令行以手动设置大小。
pci=hpbussize=0x33,hpmemsize=256M