Sunday, September 3. 2006automatische MLD
Seit der MiniDVBLinux-0.6.0 (MLD) ist endlich auch das USB-Addon verfügbar. In der zweiten Auflage erlaubt es einen guten Zugriff auf den eingesteckten USB-Stick. Lediglich die Zugriffe über imgsources.conf und die mp3sources.conf muss man erst händisch anlegen. Dabei kann man es sich dank Hotplug auch einfacher und komfortabler machen. Wie das geht, dass werde ich hier mal vorführen und wenn wir schon dabei sind, passen wir die Scripte auch gleich für den automatischen Betrieb an.
Zunächst gilt es zu verstehen wie Hotplug in der MLD arbeitet. Man muss sich das so vorstellen: wird ein neues Gerät angesteckt, so wird vom Kernel die Datei /sbin/hotplug ausgeführt. Diese können wir aber bisher so lassen wie sie ist, denn diese schaut nur nach ob es für diesen Gerät-Typ ein sogenanntes Agenten-Script gibt. Diese befinden sich unterhalb von /etc/hotplug und haben die Endung agent. In dem Fall eines USB-Sticks oder auch einer USB-Festplatte würde hier das Script /etc/hotplug/block.agent aufgerufen, denn es handelt sich hierbei im “Block-Devices”. Also müssen wir uns das Script genauer anschauen, um unsere Anpassungen machen zu können. Diese Script finden wir aber nur, wenn das USB-Addon auch installiert ist, denn es ist nicht Teil der initramfs.gz.
Bei genaurer Betrachtung fällt dann auf, wie das bisherige Handling abläuft: #!/bin/sh
Es wird das Device genommen. Nun erstellt das Script ein Verzeichnis unterhalb von /mnt in das gemountet wird. Da wir aber aufgrund der dynamik nie wissen, wie dieses Verzeichnis heißt, können wir es nicht standart-mäßig in die imgsources.conf und die mp3sources.conf eintragen. Also müssen wir uns etwas anderes einigen. Da wir in unserem Script auch das automatische mounten übernehmen, müssen wir also dieses Verzeichnis selbst auch nicht über das OSD (vom jeweiligen Plugin) mounten können. Wir sagen also: wir tragen in diesen beiden Dateien ein festes Verzeichnis ein und darin werden die dann die Verzeichnisse automatisch angelegt. Wir nennen es /mnt/hotplug, damit wir wissen, wonach wir suchen. Die Zeile (in der mp3sources.conf) lautet dann: /mnt/hotplug;Hotplug-Geräte;0;*
#!/bin/sh Dank meines Scripts würde nun mein iAudio M3-AudioPlayer auch mit einem solchen Verzeichnisnamen in /mnt/hotplug/ gemountet. Also schauen wir uns das Script etwas detailliert an. Es handelt sich um den Agent für Block-Devices also Festplatten. Da wir uns aber nicht um den Chip der Festplatte scheren, sondern den Hauptchip haben wollen, also den eigentlichen Namen des iAudio M3 und nicht irgendeinen Kryptischen-Script, müssen wir erst oberhalb des echten Sys-Verzeichnis (${PHSDEVPATH}) nachschauen. Ist dort nur “<USB PRODUCT>” eingetragen, so hat unser Linux das eingetragen, weil es keinen anderen Produktnamen gefunden hat. Dies ist gerade bei kleineren USB-Sticks mit Flash-Speicher der Fall. Diese haben häufig nur einen Chip, der sich um jede Festplatte oder Partition kümmert. Hier spricht aber nicht von Produkt sondern von dem model. Bevor wir darin nach schauen können, sollten wir aber kurz warten (sleep 2), denn wir müssen ja bedenken, dass das Script sofort nach dem Anstecken ausgeführt wird und diese Daten dann nicht immer schon komplett ausgelesen und dort “gespeichert”¹ wurden. Um den Stick besser erkennen zu können, nehmen wir auch den Vendor (also den Herrsteller) mit zu dem Verzeichnisnamen. Sind diese beide zusammen länger als zwei Wörter, so werden nur die ersten zwei genommen, denn wir wollen ja keinen ewig-langen Verzeichnisnamen (z.B. “iAudio M3” reicht, es muss nicht “iAudio M3 MP3-Audioplayer” sein). Wenn wir also einen Playernamen gefunden habe, hängen wir noch den Namen des Device in Klammern hinten an. Das hat den einfachen Grund, dass es zu Problemen kommen würde, wenn wir mehrere Partitionen hätten. Angenommen es gäbe sda1 und sda2, dann würde für beide jeweils das Script ausgeführt und es würde bei beiden der Titel iAudio M3 herraus kommen. Dann würden wir beide (sda1 und sda2) nach /mnt/hotplug/iAudio M3 mounten und könnten nur auf das zu Letzt gemountete zugreifen. Durch diesen kleinen Eingriff werden die Partitionen jetzt mit /mnt/hotplug/iAudio M3(sda1) und /mnt/hotplug/iAudio M3(sda2) angelegt und eingebunden. Finden wir keinen Titel so nehmen wir nur das Device, wie es vorher auch schon war. Danach geht alles so weiter wie bisher, nur, dass wir unterhalb von /mnt/hotplug/ mounten.
Nur beim unmounten müssen wir noch beachten, dass sich ein bisschen etwas geändert hat. Den Namen nochmals zusammen zu stellen, ist auch der einen Seite nicht so einfach, weil wir die Daten nicht her haben, der Stick wurde schließlich abgezogen und zum anderen ist Pfad ja noch im System gespeichert. Wir schauen also einfach über den Befehl mount nach und extrahieren den Pfad-Titel. Dann unmounten wir den Stick und löschen das Verzeichnis. Wir wollen da ja kein Müll drinne rumliegen haben. Automatisierung Nun wollen wir aber nicht nur, dass der M3 mit einem gescheiten Verzeichnisnamen gemountet wird, wir wollen auch, dass unser VDR bei dem Einstecken eines bestimmten Sticks etwas bestimmtes tut. Dafür müssen wir das Script anpassen, welches als erstes aufgerufen wird /sbin/hotplug. Dieses Script bekommt eine Menge an Variable über die Umgebung übergeben. Wenn sich darunter die Variable PRODUCT befindet, handelt es sich um einen USB-Stick. Der Inhalt dieser Variable ist immer gleich aufgebaut: VendorID/ProductId/$serial. Genau über diese Variable lässt sich also ein Stick eindeutig indentifizieren. Aber um diese nutzen zu können, müssen wir sie erst auseinander nehmen. Ein Script (fertig für die MLD) sieht dann so aus: #!/bin/sh
Dieses Script schaut jetzt ganz einfach nach, ob die Datei /etc/hotplug/automatically/VendorID:ProductID:Serial/Action.sh existiert. Und wenn nicht, so fragt er, ob es evt. ein Script gibt, welches für alle Produkte dieser Serie gilt: /etc/hotplug/automatically/VendorID:ProductID/Action.sh. Sollte eins davon existieren, so führt er es aus. Um das Script-schreiben ein wenig zu vereinfachen habe ich noch einige Log-Ausgaben dran gehängt. So spuckt das Script immer die Daten aus, die notwendig sind, um zu wissen, wo man ein Script für dieses Produkt anlegen muss. Einfach tail -f /var/log/messages machen, dann den Stick anstecken und dort wird dann eine Meldung kommen “HOTPLUG Checking for ...”. Ein Script, welches ausgeführt werden soll, wenn der Stick angesteckt wird, muss add.sh lauten. Wenn es ausgeführt werden soll, nachdem der Stick abgenommen wurde, heißt remove.sh. Es ist zu Empfehlen, sich in einer Datei zu notieren, welches Verzeichnis zu welchem Stick gehört und auch, welche Funktion die enthaltenen Scripte habe. Sonst muss man sich immer doof suchen, wenn man etwas ändern, kopieren oder löschen will. Übrigens: Diese Scripte wurden für eine Busybox geschrieben. Das Hotplug-Script muss bis einschließlich der Version 0-3 des USB-Addons aber noch nachgetragen werden, das block.agent-Script ist allerdings schon aufgenommen worden.
¹ Das SYSFS ist wie das PROC-Filesystem nur ein virtuelles Dateisystem, dass heißt, beim Öffnen wird direkt auf die 'Innereien' des Kernel zugegriffen und der gibt etwas aus. Dem entsprechend wird auf diesem Dateisystem auch nichts im klassichen sinne 'gespeichert'.
Posted by Benjamin Kampmann
in Mein PC
at
19:47
| Comments (0)
| Trackbacks (0)
Related entries by tags: Nvidia Suspend with Gutsy (T4) Gutsy Tribe 4 for elisaDH pimp die Taube! dvd_dev=hdc I'm an Entish my Languange: Spanish That's me - in Publicons Whats your Dysfunction? perl up your name VDE Last modified on 2006-09-23 13:32 View as PDF: This entry | This month | Full blog Trackbacks
Trackback specific URI for this entry
No Trackbacks
|
Jetzt geradeQuicksearchKurzzugriffActivitiesBlog abonnierenLizenz |
