Ich arbeite an einem Installationsprogramm in OS X, das einen IOKit-Treiber für ein USB-Gerät installiert, und ich versuche, dafür zu sorgen, dass am Ende kein Neustart erforderlich ist. Das Installationsprogramm installiert den Treiber korrekt und baut den Kext-Cache neu auf. Wenn ich das USB-Gerät aus der Steckdose ziehe und es wieder einstecke, lädt es den neuen Treiber korrekt und alles funktioniert einwandfrei.
Ich möchte jedoch nicht verlangen, dass der Benutzer das Gerät physisch trennt, damit der neue Treiber geladen werden kann. Es muss eine Möglichkeit geben, OS X dazu zu bringen, den neuen Treiber programmatisch zu laden - im Prinzip simulieren Sie, dass das Gerät ausgesteckt und wieder angeschlossen wird, oder etwas Ähnliches. Wie würde ich das machen? Bisher haben Stunden des Googelns nichts ergeben, daher wird jede Hilfe sehr geschätzt werden!
IOUSBDeviceInterface187 :: USBDeviceReEnumerate () wird tun, was Sie wollen. Die einzige Schwierigkeit besteht darin, alle interessierenden Geräte zu finden und diese manuell mit IOServiceGetMatchingServices()
aufzurufen.
Suchen Sie in IOKit / usb / IOUSBLib.h
Sehen Sie sich diskutil
und insbesondere die Optionen mount
und unmount
an. Diese werden Geräte softwaremäßig auswerfen und bereitstellen. Sie können diskutil list
verwenden, um eine Liste aller derzeit geladenen Geräte zu erhalten. Wenn Sie weitere Informationen zu diskutil benötigen, schauen Sie sich einfach die man-Seite an.