Вопрос или проблема
Я думаю, что 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 может улучшаться с новыми версиями.