Quando il mio MacBook Air è caduto a terra mentre era connessa una chiavetta USB micro, il connettore USB sul lato destro è stato danneggiato. La porta ha smesso di funzionare e da quel momento apparentemente ha un cortocircuito secondario. In effetti, l'area vicina si scalda e la batteria del portatile viene scaricata entro un'ora. Probabilmente una riparazione hardware richiederà la sostituzione della scheda logica principale, poiché sfortunatamente questo connettore USB fa parte di quella scheda. Una parte di ricambio costerebbe US $ 300 e circa 2 ore di lavoro per un HW Gugy esperto, quindi ho deciso che non ne valeva la pena per me.
Non ho riscontrato problemi con il software fino a quando non ho aggiornato il mio sistema da Mac OS X 10.8.6 Mountain Lion a 10.12.6 Sierra. Più tardi ho imparato che con 10.11 El Capitan il modo in cui sono incluse le porte USB ha cambiato .
Quando il sistema (qualsiasi Mac OS X 10.11 o successivo) si avvia, richiede 2-3 volte più del solito mentre emette costantemente messaggi di dmesg
come il seguente:
XHC1@14000000: AppleUSBXHCI::hardwareException: kUSBCommandReset did not clear
XHC1@14000000: AppleUSBHostController::setPowerStateGated: going to state 2 failed with 0xe00002e9
Dopo la correzione menzionata di seguito, di tanto in tanto viene visualizzato il seguente messaggio, che è sopportabile e una buona indicazione della causa principale:
AppleUSBHostPort::interruptOccurred: overcurrent detected with port status 0x4000, localSimulatedInterrupts = 0x0
Da allora ho faticato a trovare un modo per disattivare quella porta USB in modo che l'avvio del sistema non sia bloccato e che l'altra porta USB sul lato sinistro sia ancora utilizzabile (almeno in USB 2.0 High) Modalità velocità). Finalmente ci sono riuscito e sto condividendo la mia soluzione qui per altri che potrebbero affrontare un problema simile:
cd /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns
Modifica AppleUSBEHCIPCI.kext/Contents/Info.plist
per rimuovere o commentare (utilizzando il commento XML iniziale <!--
e fine -->
) la voce per AppleUSBXHCIPPT
:
<!--<key>AppleUSBXHCIPPT</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.usb.AppleUSBXHCIPCI</string>
<key>IOClass</key>
<string>AppleUSBXHCIPPT</string>
<key>IOPCIPauseCompatible</key>
<true/>
<key>IOPCIPrimaryMatch</key>
<string>0x1e318086</string>
<key>IOPCITunnelCompatible</key>
<true/>
<key>IOProbeScore</key>
<integer>1000</integer>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
</dict>-->
In alternativa, e più semplicemente, disabilita AppleUSBXHCIPCI
del tutto:
sudo mv AppleUSBXHCIPCI.kext{,.disabled}
In entrambi i casi, infine
sudo touch /System/Library/Extensions && sudo kextcache -u /
e riavvia.
Nota che disabilita il driver al volo:
kextunload -b com.apple.driver.usb.AppleUSBXHCIPCI
non funziona perché è in uso da qualche altra estensione del kernel.