Есть ли команда, которая может показать, есть ли на оборудовании порт Thunderbolt?

Вопрос или проблема

Я думаю, что lspci — это инструмент для этого, но я не могу найти никакой определяющий вывод. Есть ли способ узнать из командной строки, есть ли порт Thunderbolt на машине?

У меня есть один компьютер, который, как я знаю, имеет порт Thunderbolt, и lspci показывает следующее:

00:00.0 Хост-ресивер: Intel Corporation Device 3ec2 (rev 07)
00:01.0 PCI-ресивер: Intel Corporation Skylake PCIe Controller (x16) (rev 07)
00:02.0 VGA совместимый контроллер: Intel Corporation Device 3e92
00:08.0 Системный периферийный: Intel Corporation Skylake Gaussian Mixture Model
00:12.0 Контроллер обработки сигналов: Intel Corporation Device a379 (rev 10)
00:14.0 USB контроллер: Intel Corporation Device a36d (rev 10)
00:14.2 Оперативная память: Intel Corporation Device a36f (rev 10)
00:15.0 Контроллер последовательной шины [0c80]: Intel Corporation Device a368 (rev 10)
00:16.0 Контроллер связи: Intel Corporation Device a360 (rev 10)
00:17.0 SATA контроллер: Intel Corporation Device a352 (rev 10)
00:1d.0 PCI-ресивер: Intel Corporation Device a330 (rev f0)
00:1f.0 ISA-ресивер: Intel Corporation Device a306 (rev 10)
00:1f.3 Аудиоустройство: Intel Corporation Device a348 (rev 10)
00:1f.4 SMBus: Intel Corporation Device a323 (rev 10)
00:1f.5 Контроллер последовательной шины [0c80]: Intel Corporation Device a324 (rev 10)
00:1f.6 Ethernet контроллер: Intel Corporation Ethernet Connection (7) I219-LM (rev 10)
01:00.0 Мультимедийный видеоконтроллер: Blackmagic Design DeckLink Mini Recorder
02:00.0 Ethernet контроллер: Intel Corporation I210 Gigabit Network Connection (rev 03)

Я удаленно вошел в другую машину и хотел бы знать, есть ли у нее порт Thunderbolt, и lspci показывает следующее:

00:00.0 Хост-ресивер: Intel Corporation Device 191f (rev 07)
00:01.0 PCI-ресивер: Intel Corporation Device 1901 (rev 07)
00:02.0 VGA совместимый контроллер: Intel Corporation Device 1912 (rev 06)
00:14.0 USB контроллер: Intel Corporation Device a12f (rev 31)
00:14.2 Контроллер обработки сигналов: Intel Corporation Device a131 (rev 31)
00:16.0 Контроллер связи: Intel Corporation Device a13a (rev 31)
00:16.3 Последовательный контроллер: Intel Corporation Device a13d (rev 31)
00:17.0 RAID контроллер шины: Intel Corporation 82801 SATA Controller [RAID mode] (rev 31)
00:1d.0 PCI-ресивер: Intel Corporation Device a118 (rev f1)
00:1f.0 ISA-ресивер: Intel Corporation Device a146 (rev 31)
00:1f.2 Контроллер памяти: Intel Corporation Device a121 (rev 31)
00:1f.3 Аудиоустройство: Intel Corporation Device a170 (rev 31)
00:1f.4 SMBus: Intel Corporation Device a123 (rev 31)
00:1f.6 Ethernet контроллер: Intel Corporation Ethernet Connection (2) I219-LM (rev 31)
01:00.0 Мультимедийный видеоконтроллер: Blackmagic Design DeckLink Mini Recorder
02:00.0 Ethernet контроллер: Broadcom Corporation NetXtreme BCM5722 Gigabit Ethernet PCI Express

В моей системе, по крайней мере, с Thunderbolt 3 он невиден для lshw и lsusb, если ничего не подключено (я вижу порт USB3). У меня есть ноутбук Clevo N131WU, который можно купить у таких продавцов, как System76 и Tuxedo.

Тем не менее, модули загружены:

[tara@tuxmonster ~]$ lsmod | grep thund
intel_wmi_thunderbolt    16384  0
wmi                    28672  1 intel_wmi_thunderbolt
[tara@tuxmonster ~]$

И я дважды проверил на своем настольном компьютере, который не имеет thunderbolt, но работает под той же дистрибуцией и ядром (Arch, на 4.18), и драйвер thunderbolt не загружен на рабочем столе.

На аппарате Mac управление горячей заменой Thunderbolt в основном осуществляется ОС, и поэтому контроллер Thunderbolt всегда виден.

Но на аппаратном обеспечении x86 ПК Thunderbolt (по крайней мере, Thunderbolt 1) обычно управляется ПЛК ACPI, и горячая замена обрабатывается как стандартное событие горячей замены PCIe. В результате шина Thunderbolt может быть полностью невидима для ОС, если к ней ничего не подключено. Но когда вы что-то подключаете, несколько устройств мостов, с точки зрения Linux, просто появляются: вы увидите много вывода в dmesg по мере распределения ресурсов для шины Thunderbolt и устройств внутри нее.

Thunderbolt 3, возможно, можно обнаружить, так как он сосуществует с разъемами USB Type-C и, возможно, будет виден в данных конфигурации Type-C. Однако у меня сейчас нет доступа к системе с Thunderbolt 3, так что я не могу это проверить прямо сейчас.

Контроллер Thunderbolt может быть не совсем скрыт. lspci не перечисляет контроллер Thunderbolt, потому что его идентификатор производителя и устройства FFFF:FFFF. Мой форк pciutils обнаруживает такие скрытые устройства PCI, проверяя другие регистры.

Чтобы определить, что устройство является контроллером Thunderbolt, ищите специфическую для производителя расширенную возможность PCIe с ID=1234. Я не уверен, будут ли у неконтроллеров Thunderbolt или USB4 ID=1234.

sudo lspci -nnvvv | perl -0777 -nE 'while (/^([^\t\n].*\n)(\t.*\n)*?(\tCapabilities.* Express .*\n)(\t.*\n)*?(\t.*ID=1234.*\n)/mg) { print $1 . $3 }'
03:00.0 PCI bridge [0604]: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] [8086:15ea] (rev 06) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Upstream Port, MSI 00
04:00.0 PCI bridge [0604]: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] [8086:15ea] (rev 06) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
04:01.0 PCI bridge [0604]: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] [8086:15ea] (rev 06) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
04:02.0 PCI bridge [0604]: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] [8086:15ea] (rev 06) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
04:04.0 PCI bridge [0604]: Intel Corporation JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] [8086:15ea] (rev 06) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
05:00.0 Системный периферийный [0880]: Intel Corporation JHL7540 Thunderbolt 3 NHI [Titan Ridge 4C 2018] [8086:15eb] (rev 06)    Возможности: [c0] Express (v2) Endpoint, MSI 00
07:00.0 USB контроллер [0c03]: Intel Corporation JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018] [8086:15ec] (rev 06) (prog-if 30 [XHCI])    Возможности: [c0] Express (v2) Endpoint, MSI 00
09:00.0 PCI bridge [0604]: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] [8086:1136] (rev 02) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Upstream Port, MSI 00
0a:00.0 PCI bridge [0604]: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] [8086:1136] (rev 02) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
0a:01.0 PCI bridge [0604]: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] [8086:1136] (rev 02) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
0a:02.0 PCI bridge [0604]: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] [8086:1136] (rev 02) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
0a:03.0 PCI bridge [0604]: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] [8086:1136] (rev 02) (prog-if 00 [Normal decode])   Возможности: [c0] Express (v2) Downstream Port (Slot+), MSI 00
0b:00.0 USB контроллер [0c03]: Intel Corporation Thunderbolt 4 NHI [Maple Ridge 4C 2020] [8086:1137] (prog-if 40 [USB4 Host Interface])     Возможности: [c0] Express (v2) Endpoint, MSI 00
10:00.0 PCI bridge [0604]: Неверный идентификатор производителя устройства [ffff:ffff] (prog-if 00 [Normal decode])    Возможности: [c0] Express (v2) Upstream Port, MSI 00

Вы можете изменить команду, чтобы убрать устройства downstream и endpoint. Последнее устройство, перечисленное в приведенных выше результатах, из скрытого GC-ALPINE RIDGE. Для карты расширения Thunderbolt 3 на базе Alpine Ridge в ПК, у которого нет никакой поддержки Thunderbolt в прошивке, следующие команды в UEFI Shell могут раскрыть контроллер USB контроллера Thunderbolt. Команды предполагают, что контроллер Thunderbolt имеет PCI шину 0x10.

mm 0010000054C 00 -w 1 -PCIE -n
mm 0010000054C 0D -w 1 -PCIE -n
mm 00100000548 -w 1 -PCIE -n

Конечно, ОС необходимо повторно перечислить устройства PCI, так как скрытые устройства не были перечислены UEFI. Для карт расширения Thunderbolt 3 на базе Titan Ridge контроллер USB по умолчанию не скрыт. Обычно контроллер Thunderbolt должен раскрывать себя, если устройство USB-C подключено.

Я думаю, что другим будет полезно boltctl list -a, если вы на Ubuntu (или Debian в моем случае)

meFramework16:/sys/bus/thunderbolt/devices$ boltctl list -a
 ● Framework Laptop 16 (AMD Ryzen 7040 Series)
   ├─ тип:          хост
   ├─ имя:          Ноутбук 16 (AMD Ryzen 7040 Series)
   ├─ производитель:        Framework
   ├─ uuid:          6f123804-e0bd-59c0-ffff-ffffffffffff
   ├─ поколение:    USB4
   ├─ статус:        авторизованный
   │  ├─ домен:     6f123804-e0bd-59c0-ffff-ffffffffffff
   │  └─ authflags:  нет
   ├─ авторизованный:    Пн 23 декабря 2024 06:07:30
   ├─ подключенный:     Пн 23 декабря 2024 06:07:30
   └─ сохраненный:        нет

 ● Framework Laptop 16 (AMD Ryzen 7040 Series)
   ├─ тип:          хост
   ├─ имя:          Ноутбук 16 (AMD Ryzen 7040 Series)
   ├─ производитель:        Framework
   ├─ uuid:          6f123804-e1bd-59c0-ffff-ffffffffffff
   ├─ поколение:    USB4
   ├─ статус:        авторизованный
   │  ├─ домен:     6f123804-e1bd-59c0-ffff-ffffffffffff
   │  └─ authflags:  нет
   ├─ авторизованный:    Пн 23 декабря 2024 06:07:30
   ├─ подключенный:     Пн 23 декабря 2024 06:07:30
   └─ сохраненный:        нет

https://manpages.ubuntu.com/manpages/focal/man1/boltctl.1.html

Ответ или решение

Для определения наличия порта Thunderbolt на аппаратном уровне с помощью командной строки в Linux преимущественно применяются утилиты lspci и boltc. Однако, важно понимать, что отображение информации о контроллерах Thunderbolt может варьироваться в зависимости от конкретной конфигурации аппаратного обеспечения и драйверов.

Как использовать lspci

Утилита lspci может быть первой попыткой для поиска информации о контроллерах. Тем не менее, в случае с Thunderbolt, если ничего не подключено к порту, он может не отображаться. Это связано с тем, что контроллер Thunderbolt может управляться на уровне ACPI, и при отсутствии подключенных устройств он остаётся невидимым для операционной системы.

Проверка с помощью команды:

lspci -nnvvv

может показать вам различные устройства, но если в выводе отсутствуют упоминания о Thunderbolt, это не обязательно означает, что его нет — возможно, он управляется по-другому.

Определение наличия контроллера Thunderbolt

Если вы хотите определить наличие контроллера Thunderbolt, выполните следующий скрипт:

sudo lspci -nnvvv | grep -i -A5 'Thunderbolt'

Если контроллер Thunderbolt установлен, вы можете увидеть его информацию с подробными идентификаторами. И ещё более надежный метод — использование идентификатора возможностей PCI, что может потребовать более специального подхода, например:

sudo lspci -nnvvv | perl -0777 -nE 'while (/^([^\t\n].*\n)(\t.*\n)*?(\tCapabilities.* Express .*\n)(\t.*\n)*?(\t.*ID=1234.*\n)/mg) { print $1 . $3 }'

Этот код поможет выявить специфический контроллер Thunderbolt на уровне возможностей PCI.

Использование boltctl

Если вы работаете на дистрибутивах, таких как Ubuntu или Debian, вы можете воспользоваться утилитой boltctl, которая предоставляет более удобный интерфейс для управления устройствами Thunderbolt. Выполнив команду:

boltctl list -a

вы получите информацию о подключенных устройствах Thunderbolt, включая статус авторизации и подключения. Это особенно полезно, если устройство подключено, так как boltctl идентифицирует доступные Thunderbolt устройства.

Выводы

Таким образом, для определения наличия Thunderbolt порта на вашем оборудовании в Linux, стоит комбинировать результаты утилит lspci и boltctl. Если контроллер Thunderbolt не известен системе (не подключены устройства), используйте специальные команды для идентификации управляющих возможностей Thunderbolt.

Постарайтесь также обновлять системные драйверы и ядро, так как поддержка Thunderbolt может улучшаться с новыми версиями.

Оцените материал
Добавить комментарий

Капча загружается...