IMMD Hauptseite Zurück Nach oben Weiter Hilfe BS - 12. März 1999

AKBP-II 1999: Gruppe 1



Audio Filesystem für Toshiba Laufwerke

Bearbeiter: Frank Mattern , Uwe Schirl



1. Aufgabe

Ziel war es, die Audio-Tracks einer Musik- oder Mixed-Mode CD dem Betriebssystem als Dateien anzubieten. Eine evtl. vorhandene Datenspur kann dann über ein bereits vorhandenes Loopback-Device als normales CD-Filesystem gemountet werden.
Natürlich sollte dabei die Wiedergabe mit 'cat TRACK | play' ohne Aussetzer arbeiten. Ausserdem können mehrere Tracks (auch Daten- und Audiotracks gemischt) angesprochen werden, ohne Panik im Kernel zu verbreiten.

2. Benutzerinterface

Syntax:
   mount -F audiofs [-m -r -o ro cs=size vc dc] cdrom-device mount_point

Der Mountbefehl baut das audiofs Filesystem in das bestehende Filesystem an die Stelle mount_point ein. Das Verzeichnis wird in /etc/mnttab eingetragen. Standardmäßig werden 32 Blöcke pro V-Node eines Audio-Tracks gepuffert. Datentracks werden per Default nicht gepuffert.

Die Tracks der CD erscheinen als Dateien, wobei die Audiotracks als Datei trackXX und die Datentracks als .dataXX dargestellt werden. XX ist dabei die zweistellige Nummer des Tracks. Vor einem Audiotrack befindet sich ein .snd-Header.


3. Implementierung

Die Implementierung gliedert sich in drei Teile:
Die ersten beiden Teile haben ein gemeinsames Headerfile (audiofs_info.h).

Dateien
  Interface- und SCSI-Teil :  uts/common/fs/audiofs/*
  Headerfile               :  uts/common/sys/fs/audiofs_info.h
  Mount-Befehl             :  cmd/fs.d/audiofs/*
  geänderte Makefiles      :  uts/common/Makefile.rules  und  Makefile.files
Alle Dateien wurden per RCS verwaltet.

3.1. VFS- & Vnode-Operationen

Neben den Operationen audio_mount und audio_unmount die fuer das einbauen und aushängen zuständig des Filesystems zuständig sind, braucht man noch audio_root um die RootV-Node zu finden, und audio_statvfs für die Statistik. An V-Node Operationen sind vor allem die Funktionen audio_readdir, audio_read, audio_lookup, audio_getattr, audio_access,audio_inactive notwendig.

3.2. SCSI-Operationen

Für jede benötigte SCSI-Funktion des CD-Laufwerks wurde eine Wrapper-Funktion aufgebaut, die die Datenstrukturen auffüllt wie sie vom SCSI-Controller verschickt werden können. Um den Controller anzusprechen, mußte vorher aus dem Blockdevice per makespecvp() ein Character-Device V-Node erzeugt werden, dessen IOCTL-Funktion dann die SCSI-Kommandos entgegennimmt.

Folgende Befehle wurden entsprechend dem SCSI-Interface Manual von Toshiba und den Dateien unter   uts/common/sys/scsi/*   implementiert : TEST_UNIT_READY, REQUEST_SENSE, MODE_SELECT, MODE_SENSE, PREVENT/ALLOW_MEDIUM_REMOVAL, READ(10) und READ_TOC.


4. Probleme/Bugs/Flaws

Das REQUEST_SENSE Kommando, das zur Bestimmung eines erweiterten Fehlercodes vom Laufwerk dient, wollte einfach nicht funktionieren. Es brachte jedesmal den Kernel zum Absturz.
Sobald parallel zur Audiowiedergabe auf einen beliebigen Track zugegriffen wird, kommt es zu Aussetzern in der Wiedergabe.
Unser Server | Brief an Webmaster | Navigationshinweise | Suche