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.