Was passiert genau auf niedriger Ebene, wenn ein USB-Gerät über die GUI im Finder ausgeworfen wird? Werden bestimmte Signale an das Gerät gesendet?
Der Grund, den ich frage, ist, dass ich versuche, das manuelle Auswerfen eines Geräts zu emulieren, indem ich das Dateispeichermodul über die Konsole eines Geräts mit eingebettetem Linux hinzufüge und entferne. Nur das Entfernen des Moduls funktioniert auf einem PC einwandfrei, aber ein Mac gibt mir den Fehler "nicht richtig ausgeworfen" und der Linux-Kernel "gerät in Panik" und bekommt einen Kernel-Nullzeiger-Fehler.
Hier sind einige zusätzliche Informationen:
Ich verwende ein USB-Gumstix-COM-Gerät, auf dem Embedded Linux ausgeführt wird. Das Gerät ist an einen Host (Windows oder Mac) angeschlossen, und ich emuliere das physische Entfernen, indem ich das Massenspeichermodul im Linux-Kernel des Geräts entferne, sodass der Host es nicht mehr als Speichergerät ansieht. Das schaffe ich mit modprobe -r g_file_storage
.
Dies funktioniert problemlos unter Windows. Es funktioniert nicht auf einem Mac, da ich auf dem Mac-Host eine Fehlermeldung erhalte, dass das Gerät nicht richtig ausgeworfen wurde. Dies verursacht einen Nullzeigerfehler im Linux-Kernel des Geräts und es kommt zu einer Panik.
Dies lässt mich glauben, dass es etwas gibt, das NUR der Mac tut, wenn er ein USB-Gerät ordnungsgemäß auswirft, das ich in meinem Skript auf dem Gerät emulieren muss.
Grundsätzlich möchte ich wissen, ob ich eine Signalverarbeitung oder etwas auf dem Gerät ausführen muss, um den Auswurf auf Mac-Hosts ordnungsgemäß zu emulieren.
if ((device.LogicalDrive == null) || (device.LogicalDrive.Length == 0)) continue; device.Eject(true);
daher denke ich, dass Sie nur den PnP-Manager für Ihren jeweiligen Host herausfinden müssen.