Горячее подключение 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 

Это использование местоположения шины PCIDDDD:BB:DD.Fуказан в приведенной выше команде для отключения Thunderbolt, где команда для подключения и отключения устройства PCI указана в ссылке kernel.org ниже. Я также поставил ссылку на пример по ссылке суперпользователя:

Вышеупомянутая концепция заключается в отключении молнии отsysfs-bus-pciкоманда, посколькуboltctlпока нет возможности отключиться, по крайней мере, в ядре Linux 5.11

Другие вопросы по тегам