FAT auf eigener Hardware
-
Hallo,
ich hab mir eine eigene Hardware mit Multimedia-Karte gebaut. Die Speicherkapazität beträgt zwischen 16 und 512 Mb, je nach Karte. Ich habe eigentlich vor da mit einem FAT-Filesystem zu arbeiten. Das system selbst programmiere ich in GNU-C. Unterlagen zu FAT habe ich im Internet schon einiges gefunden (Whitepaper von MS).
Jetzt die Frage: Wie programmiert man ein Filesystem-Treiber so, das ich mit bekannten Befehlen wie z.B. fopen(), fwrite() usw. arbeiten kann.
Funktionen zum Blockweisen lesen und schreiben der Karte in 512 Byte-Blöcken sind kein problem.
MfG Volker
-
Für welches OS?
Eine Frage noch: Du sagst, du willst fopen() usw. benutzen. Wird die Karte nur mit deinem Programm anzusprechen sein, oder willst du, dass Benutzer über das Dateisystem frei verfügen können? Davon hängt ab, ob du fopen() *wirklich* brauchst.
[ BTW will Microsoft, jedenfalls soweit ich das verstanden habe, seit neuestem Lizenzzahlungen von Herstellern von Speichermedien, die FAT-formatiert sind. Irgendwas in der Größenordnung 25¢ pro Stück. ]
-
@Bashar, ich programmiere direkt auf dem Mikrokontroller. ein Betriebssystem in dem sinne gibt es eigentlich nicht. Die SW soll eine neue Datei auf der Karte anlegen und Messdaten einfach nur in dieser Datei abspeichern. Eine Schnittstelle für Benutzer ist nur in soweit vorgesehen, das er nachsehen kann, was auf der Karte schon drauf ist und wieviel Platz noch verbleibt. Des weiteren soll er evtl. auch Dateien löschen oder auch eine Datei auswählen können, die z.B. überschrieben oder erweitert werden soll.
Hab nur dummer weise keine ahnung, wie ich dies prgrammieren soll, da mir auf diesem Gebiet die erfahrung in bezug auf Dateisysteme und ihr handling fehlt.
-
Ich weiß nicht, aber das hier könnte dir vllt. helfen da dort auch über das Erstellen
eines eigenen Dateisystems etwas steht.
-
@Bashar, ich programmiere direkt auf dem Mikrokontroller. ein Betriebssystem in dem sinne gibt es eigentlich nicht
Achso, ich hatte es so verstanden, dass du das Gerät an den PC anschließen und darauf "rumsurfen" willst, etwa wie ein USB-Stick oder eine Digitalkamera.
Ich würde trotzdem nochmal überlegen, ob du dich nicht verrannt hast: Wenn das Dateisystem nur intern angesprochen wird ... muss es dann unbedingt fopen() usw. sein? Was sprich dagegen, eigene, aber ähnliche Funktionen zu benutzen? Und zweitens: Warum FAT, oder anders, wie genau willst du dich an die FAT-Spezifikation halten? Du hast theoretisch komplette Freiheit ... oder?
-
Theoretisch ist das richtig, jedoch wird die Karte an einem PC in einem Standard-Kartenleser ausgelesen, wenn die Messungen abgeschlossen sind. Daher muss ich mich an die FAT halten. Die Medien sind im übrigen schon vom Hersteller mit FAT formatiert, wenn also die 25ct dann hat die der Hersteller gezahlt.
-
Ah OK
Hast du schonmal gesucht, obs sowas vielleicht schon fertig gibt? Eventuell kann man sich auch Anregungen von Linux oder FreeDOS o.ä. holen. Ich denke, ein FAT zu implementieren, ist in erster Linie Arbeit (viel Arbeit), aber ansonsten relativ straight-forward ...
-
Hab mich in der tat schon mal bei Linux umgesehen, aber nicht gerade den großen durchblick erlangt, bei der riesen auswahl an Sourcecodes. Ausserdem stehen mir nur rund 2kbyte RAM und 32k Flash zur verfügung, was nicht gerade viel ist und mich vom übernehmen anderer Codes mit grosser Funktionalität abstand nehmen lässt. Ausserdem lerne ich betimmt mehr, wenn ich es selbst mal versuche. Nur einen anfang zu finden ist schwer, da ich nicht weis, wo ich anfangen soll ?
-
Bei LINUX sourcecodes wäre vor allem das FAT Modul von Interesse das ist eine einzige C datei, also relativ überschaubar. Du brauchst nur eine beliebige LINUX Distribution und im src verzeichnis irgentwo unter drivers/filesystems müsste das FAT Modul im Quelltext sein (hab grad Windoze gebootet sonst könnt ich dirs schicken).
Dann noch viel Glück.
MFG ChockoCookie
-
@ChockoCookie: Hab bei meinem Linux (SUSE 8.2) mal in den SRC's nachgesehen, aber leider nicht herausgefunden, welche Datei du genau meintest. Weis ja net, vielleicht bin ich auch nur blind ? Könntest du mir das von dir angesprochene FAT-Modul bitte bei Zeiten mal zusenden?
MfG Volker
-
OK ich sags gleich mal vorweg: es ist schlimmer. präzisiert gesagt ist es nicht nur eine C-Datei, sondern mehrere. das verzeichnis ist übrigens nicht drivers, sondern fs. war wohl beides mein fehler, sorry. wenn du willst kann ich dir die Dateien von meiner Red Hat Distro schicken. Musst mir nur deine E-mail oä geben. Sonst findest es viell jetz eh auf deiner SuSe Version. Tip: schau mal mit lsmod, welche module geladen sind, wenn du auf ein fat system zugreifst, von denen suchst du dann die sourcen.
MFG Chocko Cookie
-
Danke ChockoCookie, letzterer Tipp war echt gut. Wegen den Fehlern bin ich net böse, weiss ja selbst, dass die Distributionen alle etwas unteschiedlich sind. Bei mir sind es, soweit ich es jetzt überschauen kann, 8 Dateien mit Source-Code. Hab jetzt einfach mal die Multimediakarte als SCSI-Drive gemountet und schon war das FAT-Modul geladen. Nach einem kurezen blick in die Source-Codes muss ich nun sagen, das sie in sachen Dokumentation nicht gerade das "non plus ultra" sind. Gerade mal 3-4 Zeilen Doku zu beginn und so alle 30-40 Code-Zeilen mal ein kurzer hinweis. Würde mich mal interessieren, ob der, der den Code geschrieben hat heute noch was damit anfangen kann
. Nja, werd mal sehn, ob ich damit was anfangen kann. Werde mich die Tage mal wieder melden, wenn ich mehr weiss.
Nochmals danke.
MfG Volker
-
hi
beim 2.4.18 kernel sind es nur 2 files(usr/src/linux/fs/msdos)
hab leider keine ahnung ob es das ist was du suchst, aber mit knapp 16KB ist es noch recht überschaubar
-
@VW-elektron: Wenn du kein OS hast, kannst du nicht direkt einen Treiber schreiben. Dann musst du die fopen, etc-Funktionen in einem eigenen Modul realisieren und dann dieses Modul deinem Projekt hinzufügen...
Schau auch mal bei der LIB-C deines Compiler-Packets nach, ob fopen bereits implementiert ist und ob du dich da irgendwie dazwischen hängen kannst (ich vermute nicht)...
-junix