Forum: PC-Programmierung linux usb gadget API


von Joachim J. (felidae)


Lesenswert?

kennt sich ihr jemand mit der Linux USB gatget aus?


Ich mache folgendes:

auf meinem Device(embedded Linux) lade ich das Modul g_mass_storage um 
das Device als Massenspeicher(USB Flash Stick) zu nutzen und so Daten an 
den PC weiter zu geben. Über eine Taster(gpio) starte ich ein Programm 
das mir die Daten erzeugt.



der Ablauf:
1
modprobe g_mass_storage file=/home/root/data/backing_file
->Device ist ein Flash Speicher
->Taster wird gedrückt und erkannt.
1
modprobe g_mass_storage -r
2
losetup -o 1048576 /dev/loop0 /home/root/data/backing_file
3
mount -t vfat /dev/loop0 /mnt/loop/
->backing_file wurde unter /mnt/loop/ gemountet
->Programm wird gestartet, welches Daten in eine Datei unter /mnt/loop/ 
schreibt.
->Programm endet
1
umount /dev/loop0
2
losetup -d /dev/loop0
3
modprobe g_mass_storage file=/home/root/data/backing_file
->wieder am Anfang



das Problem:

wenn ich "modprobe g_mass_storage -r" ausführe wird der gadget Treiber 
zwar entladen aber er meldet sich nicht am PC ab. der PC denkt immer 
noch der Massenspeicher ist noch da. wenn ich jetzt während das Programm 
auf dem Device läuft am PC den erkannten Speicher Stick anklicke, hängt 
das System eine weile und dann kommt eine Fehlermeldung und die 
Aufforderung, dass ich den Stick auf Fehler untersuchen soll.

ich vermute ich habe in meiner Befehlskette etwas vergessen oder ich 
mache da etwas falsch. Wie kann ich das Modul g_mass_storage 
ordnungsgemäß ausschalten und die Datei /home/root/data/backing_file zum 
beschreiben freigeben?

von Clemens L. (c_l)


Lesenswert?

Dazu musst du so tun, als ob das Gadget herausgezogen wurde (unplug). 
Soweit ich weiß, gibt es dafür keine API.

von Joachim J. (felidae)


Lesenswert?

So, ich habe viel hin und her gegoogelt und bin jetzt endlich auf 
folgende Lösung gestoßen.

1
modprobe g_mass_storage -r
2
modprobe g_zero
und dann später
1
modprobe g_zero -r
2
modprobe g_mass_storage file=/home/root/data/backing_file


g_zero simuliert ein USB gerät das immer mit 0 antwortet(oder so 
ähnlich). In dem Moment wo ich diese Modul lade meldet sich das Modul 
neu am PC an und der Flash Speicher ist weg.

wenn noch jemand eine bessere Idee hat raus damit. :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.