Erkennen USB-Massenspeicher Auswerfen/unmounten unter Linux
Ich bin mit der g_file_storage
gadget in Linux so exportieren Sie eine partition mit einem abnehmbaren USB-Massenspeicher-Gerät an den host-PC ' s (Windows, Linux, MAC).
Alle diese host-OS ist (kann) automatisch montieren Sie die abnehmbare Platte und der Zugriff ohne Probleme, und ich bin auf der Suche nach einem Weg, um zu erkennen, dass der host ausgeworfen/unmountet die Platte.
Der einzige Weg den ich bisher gefunden habe, beschränkt sich auf Windows XP. Wenn der Benutzer wählt "Hardware Sicher Entfernen", XP bringt die USB-Gerät in den Standbymodus, kann erkannt werden an dem entfernten Ende. Aus irgendeinem Grund, das funktioniert nicht in Vista.
- Diese gehören nicht auf den superuser. Die Lösung hat vermutlich zu tun mit einigen sysfs-überwachung, oder das Schlimmste, kernel hacking
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den ich getroffen habe dieses Problem auch.
Meine embedded-USB-lese-nur-mass-storage-Projekt Uhren die SCSI-Befehle vom host. Mit Mac OS X (10.5): auf plug-in-OS-X-Treiber teilt dem Gerät, ganz nett, um zu verhindern, dass entfernen des Mediums (SCSI-Befehl VERHINDERN/ERLAUBEN, MITTLERE ENTFERNUNG). Mein Gerät nimmt diesen Befehl. Später, wenn der Benutzer signalisiert, dass das Gerät ausgeworfen werden, OS X, wieder ganz schön, sendet VERHINDERN/ERLAUBEN das ENTFERNEN wieder mit der "ALLOW" - flag, dann sendet SCSI-START/STOPP Anzeige-Stopp (oder Auswerfen, kann mich nicht erinnern). Schön.
Windows XP, jedoch erscheint einfach aufhören zu senden, die der SCSI-Befehl " TEST UNIT READY. Ich habe beobachtet; "hardware sicher entfernen" sendet keine SCSI-signal auch immer, es führt genau die TEST UNIT READY-signal zum stoppen kommen, die es getan hatte, jede Sekunde oder so. Im Grunde Windows nur Muscheln bis.
Einen TEST UNIT READY timeout konnte die Arbeit mit Windows, aber es ist ein lausiger Weg zu erkennen, ein Gerät stop-Zustand. Plus es funktioniert nicht mit OS X seit OS X ist nicht anpingen von meinem Gerät jede Sekunde wie Windows ist; ich bekommen würde, eine " false-positive.
UPDATE 15. NOVEMBER 2009
Sondergaard hier zurück melde.
Sehr viel hängt davon ab, ob die Reaktion des Geräts an den USB-Mass-Storage-Class-SCSI "Anfrage" - Befehl selbst identifiziert sich als "removable" oder "fixiert".
Wenn das flag sagt, abnehmbar, nur so konnte ich sagen, wenn das Windows XP-Benutzer hat "aufgehört" mit meinem Gerät ist, dass die test-unit-ready-Befehle beenden, kommen in jeder Sekunde. Wenn das flag nicht sagen, abnehmbar, es gibt keine regelmäßigen Strom von test-unit-ready-Befehle. USB-suspend-könnte nicht gezählt werden, entweder, in etwa 1/4 meines tests "sicher entfernen" NICHT senden USB-suspend. Keine Ahnung warum, es war nicht konsistent. Also, wenn Sie sicher sein wollen, die beste Empfehlung, die ich machen kann für die Kompatibilität mit WINDOWS XP NUR Antworten auf die ANFRAGE als "removable", suchen für die regelmäßige TEST UNIT READY-Befehle, und wenn Sie dann aufhören, betrachten Sie sich sicher entfernt.
OS X (10.6) ist eine andere Geschichte. Wie ich oben schrieb, es ist viel mehr höflich. Es sendet SCSI-START/STOP-zu spin-up oder spin-down das Gerät, manchmal alles auf seine eigene mit keine Benutzereingaben. Das bedeutet aber, interpretiert man HALT, wie gesagt der user ist durch, und trennen Sie in irgendeiner Art und hässliche Art und Weise der internen auf Ihr Gerät, OS X kann man sehr verwirrt, wenn er versucht sich zu drehen die Scheibe wieder hoch. Wenn Ihr Gerät als entfernbar gekennzeichnet, OS X wird Ihnen ERLAUBEN das ENTFERNEN-Befehl vor dem BEENDEN (oder war es AUSWERFEN " in diesem Fall?), das wäre ein ziemlich gutes Zeichen, dass es durch.
Habe ich nicht ausführlich testen unterschiedlicher Konfigurationen. Meine Anwendung ist zu Lesen-nur mit zwei Partitionen, und hat zu erkennen, wie NICHT entfernbare, weil Windows XP weigert sich zu erkennen, mehr als eine partition für USB-Wechseldatenträger (OS X hat keine Probleme oder so). So sind die meisten meiner Tests war in dieser Konfiguration.
Hoffe, das hilft.
Leider kann ich nicht die Lösung, da bin ich nicht wirklich vertraut mit dem Thema, aber einige Hinweise.
Aber es gibt nur wenige Entscheidungen, wo Sie beginnen konnte, um zu Lösungen überprüfen.
Ich glaube nicht, dass es verpflichtend ist für die Host-Betriebssystem zu signalisieren, etwas, um das gadget. Mein Verständnis von der Eject-Aktion ist, dass das Host-Betriebssystem hat das nichts zu tun, mehr mit dem gadget.
EDIT: Sie sind wahrscheinlich auf der Suche nach Windows-Lösung, auch wenn Sie tagged Ihre Frage als Linux...
können Sie überprüfen dmesg Ausgabe: