Горячее подключение Thunderbolt в Ubuntu Linux
У меня Dell Precision M3800 и док-станция OWC Thunderbolt 2. Они оба прекрасно работают вместе, и кажется, что все работает. Я еще не пробовал FireWire, но Ethernet, USB3, DisplayPort и звук прекрасно работают из коробки.
Моя система не совсем довольна выдергиванием кабеля Thunderbolt и иногда зависала, когда я снимал док; В других случаях это было хорошо. Я хотел бы найти более безопасный путь и надеялся, что, возможно, появится механизм, с помощью которого я смогу сказать своей системе, что я собираюсь отключить ее и сначала аккуратно отключить интерфейсы.
Я пробовал искать пакеты и информацию о поддержке Thunderbolt в Linux и нашел только блог Грега КХ, в котором говорится, что он будет работать, но не упоминаются никакие инструменты.
Я не нашел пакетов, связанных с Thunderbolt, в репозиториях Ubuntu для моей установки 15.10.
Есть ли инструменты или узлы /proc или /sys, которые я мог бы использовать для этого?
5 ответов
Thunderbolt - это, по сути, шина PCIe, представленная в виде удобного в использовании подключаемого интерфейса. Как вы можете себе представить, горячее подключение карты PCIe к любой машине - это не то, что вы можете ожидать без проблем - если только не будут предприняты особые усилия со стороны производителей хоста и съемных устройств, а также разработчиков материнской платы прошивка, прошивка устройства, ядро ОС и драйверы устройства.
Все это означает, что существует огромная площадь потенциальных ошибок и проблем, которые могут помешать этой горячей замене работать так, как мы этого хотим. Я бы порекомендовал использовать ядро отладки и пытаться взломать отладчик, когда он зависает - если вы можете, то это, вероятно, не проблема аппаратного или микропрограммного обеспечения. Инструкции по выполнению этого, возможно, немного выходят за рамки вопроса или моего ответа здесь, но в Интернете доступны ресурсы, которые делают это немного легче.
Теперь, если вам нужно средство, с помощью которого вы можете вручную извлечь устройство до его восстановления, попробуйте следующее:
После определения адреса устройства в системе на выходе lspci
команда, где DDDD:BB:DD.F - это домен: шина: устройство. Функция рассматриваемого периферийного устройства с молнией:
05:00.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
06:00.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
06:03.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
06:04.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
06:05.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
06:06.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
07:00.0 System peripheral: Intel Corporation DSL3510 Thunderbolt Port [Cactus Ridge] (rev 03)
08:00.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Controller [Cactus Ridge]
09:00.0 PCI bridge: Intel Corporation DSL3510 Thunderbolt Controller [Cactus Ridge]
Вы можете выполнить следующее:
echo "1" | sudo tee /sys/bus/pci/devices/DDDD\:BB\:DD.F/remove > /dev/null
Который должен запускать процедуры выгрузки в ядре и драйвере (и, возможно, даже в прошивке устройства), после чего вы сможете извлечь его более безопасно. (A grep
в подоболочке, очевидно, может занять место DDDD:BB:DD.F для простоты использования в будущем).
После повторного подключения устройства может потребоваться выполнить повторное сканирование вручную:
echo "1" | sudo tee /sys/bus/pci/rescan > /dev/null
(Или это может не понадобиться.)
Я давно не пользовался Linux, так как в настоящее время я почти исключительно FreeBSD и OS X, поэтому, пожалуйста, прости меня, если я не в чём-то здесь.
Кажется , что если вы выполните команду lspci -vt, вы получите древовидную диаграмму, которая значительно упрощает обнаружение контроллера Thunderbolt.
вот мой вывод
amias@rome:~$ lspci -vt
-[0000:00]-+-00.0 Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
+-01.0-[02-03]----00.0 NVIDIA Corporation GK107GLM [Quadro K1100M]
+-02.0 Intel Corporation 4th Gen Core Processor Integrated Graphics Controller
+-03.0 Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller
+-04.0 Intel Corporation Device 0c03
+-14.0 Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI
+-16.0 Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1
+-1a.0 Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2
+-1b.0 Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller
+-1c.0-[04]--
+-1c.2-[06]----00.0 Intel Corporation Wireless 7260
+-1c.3-[07]----00.0 Realtek Semiconductor Co., Ltd. RTS5249 PCI Express Card Reader
+-1c.4-[08-40]----00.0-[09-40]--+-00.0-[0a]----00.0 Intel Corporation Device 157d
| \-01.0-[0b-40]----00.0-[0c-40]--+-00.0-[0d]----00.0 Fresco Logic FL1100 USB 3.0 Host Controller
| +-01.0-[0e]----00.0 Intel Corporation I210 Gigabit Network Connection
| +-02.0-[0f]----00.0 Fresco Logic FL1100 USB 3.0 Host Controller
| +-03.0-[10]----00.0 LSI Corporation FW643 [TrueFire] PCIe 1394b Controller
| +-04.0-[11]--
| \-05.0-[12-40]--
+-1d.0 Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1
+-1f.0 Intel Corporation HM87 Express LPC Controller
+-1f.2 Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
+-1f.3 Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller
\-1f.6 Intel Corporation 8 Series Chipset Family Thermal Management Controller
это позволило мне найти 1с.4, который, кажется, мой контроллер молнии.
Затем я воспользовался предложением Махмуда, чтобы поразить узел удаления, это, казалось, действительно отключило мой док молнии, однако, когда я снова вставил его, заблокирован сильно. Это говорит о том, что другие драйверы не очень довольны "горячей" заменой, или мне нужно было бы перезагрузить устройство Thunderbolt.
В любом случае, это было хуже, чем просто вытащить его.
Я думаю, сейчас мне просто нужно убедиться, что все сохранено перед расстыковкой. Буду рад дальнейшим предложениям, если они есть.
Вы можете попытаться приостановить работу вашей системы в ОЗУ, а затем вынуть кабель. Это единственный способ отключить док-станцию Lenovo Thunderbolt 3 без перезагрузки.
Одним из решений является приостановка работы в оперативной памяти (pm-suspend
) перед отключением/повторным подключением Thunderbolt.
Недавно я использовал ответ Махмуда Аль-Кудси выше, а также работал с ядром 5.11, чтобы найти правильное расположение шины PCIe для отключения соединения Thunderbolt2 с Ethernet.
Я разместил здесь ответ :Ubuntu 18.04 — Ethernet отключен после приостановки , связанный с таким отключением перед приостановкой/гибернацией в случае, если порт Thunderbolt вызывает проблемы с приостановкой/гибернацией.
Вот соответствующие разделы по ссылке:
Далее я работал над тем, как отключить Thunderbolt с помощью командной строки, поскольку обнаружил, что, когда компьютер был подключен только к W-Fi и кабель Thunderbolt-Ethernet не был физически подключен, я мог приостанавливать и разбудить компьютер.
После долгих поисков я нашел следующие команды, которые смогли отключить Thunderbolt, что подтверждается командами и
ifconfig
:pre-2 -> отключает Thunderbolt перед приостановкой/гибернацией
### pre-2 -> disconnects thunderbolt' echo "1" | sudo tee /sys/devices/pci0000:00/0000:00:1c.4/remove > /dev/null Note: you must find the `/sys/...` location from `boltctl list` and `boltctl info <uuid>` at the first part of `syspath`
post-2 -> подключить Thunderbolt, от сканирования шины PCI, после приостановки/гибернации
### post-2 -> connect thunderbolt, after scanning pci bus echo "1" | sudo tee /sys/bus/pci/rescan > /dev/null # tests connection before and after thunderbolt disconnect and connect boltctl list # to find the uuid of the device boltctl info <uuid> to find the 'syspath' ifconfig speedtest-cli
Это использование местоположения шины PCI
DDDD:BB:DD.F
указан в приведенной выше команде для отключения Thunderbolt, где команда для подключения и отключения устройства PCI указана в ссылке kernel.org ниже. Я также поставил ссылку на пример по ссылке суперпользователя:
- Горячее подключение Thunderbolt в Ubuntu Linux
- https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci
Вышеупомянутая концепция заключается в отключении молнии от
sysfs-bus-pci
команда, посколькуboltctl
пока нет возможности отключиться, по крайней мере, в ядре Linux 5.11