Thunderbolt hotplugging no Ubuntu Linux

4

Eu tenho um Dell D38 Precision M3800 e um owc thunderbolt 2 dock, ambos trabalham juntos lindamente e tudo parece funcionar. Eu não tentei o firewire ainda, mas a ethernet, usb3, displayport e som funcionam muito bem.

Meu sistema não está totalmente satisfeito em apenas arrancar o cabo do raio e, ocasionalmente, suspendeu quando eu removi o encaixe e outras vezes foi bom. Eu gostaria de encontrar uma maneira mais segura e estava esperando que houvesse um mecanismo onde eu poderia dizer que meu sistema ia desconectar e, de forma elegante, derrubar as interfaces primeiro.

Eu tentei procurar por pacotes e informações sobre suporte a thunderbolt no linux e encontrei apenas o blog de Greg KH dizendo que ele simplesmente funcionaria. mas não mencionando nenhuma ferramenta.

Eu não encontrei nenhum pacote relacionado a thunderbolt nos repositórios do ubuntu para minha instalação do 15.10.

Existem ferramentas ou nós / proc ou / sys que eu poderia usar para isso?

    
por Amias 29.02.2016 / 19:01

2 respostas

3

O Thunderbolt é basicamente um barramento PCIe exposto na forma de uma interface conectável fácil de usar. Como você pode imaginar, conectar uma placa PCIe em qualquer máquina não é algo que você pode fazer consistentemente sem problemas - a menos que tenham sido tomados cuidados extremos pelos fabricantes dos dispositivos host e removíveis, bem como pelos desenvolvedores da placa-mãe. firmware, firmware do dispositivo, kernel do SO e drivers de dispositivo.

Tudo isso quer dizer que há uma área de superfície enorme de possíveis bugs e problemas que impediriam que esse hot-plug funcionasse da maneira que gostaríamos. Minha recomendação seria usar um kernel de depuração e tentar invadir o depurador quando ele congelar - se você puder, provavelmente não é um problema de hardware ou firmware. As instruções sobre como fazer isso provavelmente estão um pouco além do escopo da questão ou da minha resposta aqui, mas os recursos estão disponíveis on-line, o que torna isso um pouco mais fácil.

Agora, se você quiser um meio pelo qual você possa manualmente ejetar o dispositivo antes de puxá-lo, tente o seguinte:

Depois de identificar o endereço do dispositivo no sistema na saída do comando lspci , em que DDDD: BB: DD.F é o Domain:Bus:Device.Function do periférico do raio em questão:

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]

você pode executar o seguinte:

echo "1" | sudo tee /sys/bus/pci/devices/DDDD\:BB\:DD.F/remove > /dev/null

Que deve acionar as rotinas de descarregamento no kernel e no driver (e possivelmente até mesmo no firmware do dispositivo), após o qual você poderá ejetá-lo com mais segurança. (Um grep em um subshell pode obviamente tomar o lugar do DDDD: BB: DD.F para facilidade de uso no futuro).

Após a replicação do dispositivo, pode ser necessário verificar manualmente novamente:

echo "1" | sudo tee /sys/bus/pci/rescan > /dev/null

(Ou pode não ser necessário.)

Eu não uso Linux há algum tempo já que eu sou quase exclusivamente FreeBSD e OS X atualmente, então, por favor, me perdoe se eu estiver fora do alvo em qualquer coisa aqui.

    
por 29.02.2016 / 19:45
2

parece que se você lspci -vt você obtém um diagrama de árvore que torna muito mais fácil identificar o controlador thunderbolt.

heres minha saída

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

isso me permitiu encontrar 1c.4, que parece ser meu controlador de raio.

Eu então usei a sugestão do mahmoud para acertar o nó de remoção, isso pareceu desconectar meu dock de raio de forma limpa, mas quando eu o reinseri, ele travou com força. Isso sugere que outros motoristas não estão tão satisfeitos com o hotplug ou precisaria reiniciar o dispositivo de raio.

De qualquer forma, foi pior do que apenas retirá-lo.

Eu acho que por enquanto eu só preciso garantir que tudo seja salvo antes de desancorar. Eu gostaria de receber mais sugestões, se houver alguma.

    
por 03.03.2016 / 11:01