Ok, das mit den Netzwerkkarten kann ich gerne aufnehmen, aber erst, wenn ich mit dem fertig bin, woran ich in den letzten Tagen sehr intensiv gearbeitet habe
Ich habe nach der optimalen Lösung gesucht, wie ich unter Linux eine unter TOS partitionierte SD/CF-Karte so einbinden kann, als wäre sie DOS kompatibel formatiert, aber ich dennoch ganz normal von dieser Karte im Milan/Falcon booten kann - und ich habe diese optimale Lösung gefunden!
Ich muss das noch fertig dokumentieren, weil es schon ziemlich kompliziert ist. Hier mal die Hürden, die man da so nehmen muss:
- Die Daten liegen im Big Endian Format vor, müssen also erst mal byte geswapped werden
- Ab Partitionsgrößen > 128MB stehen im Bootsektor Werte drin, die Linux nicht mag
- Auf keinen Fall soll jedesmal erst ein Image der Karte erstellt und am Ende zurück geschrieben werden. Viel zu lahm und belastet den Flash-Speicher
Inspiriert vom
stcard-Skript von
@kernal und von einer grandiosen Idee meines besten Kumpels (auch ein ehem. Atari-Freak
) habe ich nun was gebastelt, das alle diese Probleme genau so löst, wie ich mir das gewünscht habe:
Zuerst das Byteswapping:
Der Kernel kann das ja leider nicht, aber dank Holger (ich nenne ihn hier einfach mal
) bin ich auf xmount gestoßen. Das erstellt mit FUSE ein virtuelles Dateisystem und konvertiert Images on-the-fly und hat einen Schreibcache (Schreibzugriffe landen also nur im Cachefile und nicht auf dem eigentlichen Image). Und es hat sog. morphing Libs, mit denen man die Daten des Input-Images on-the-fly manipulieren kann.
Eine Byteswap-Morphing-Lib hat es leider nicht an Bord, aber die habe ich eben kurzerhand selbst programmiert.
Also, mit xmount mountet man nun seine SD-Karte und erhält ein on-the-fly byte geswapptes Image! Perfekt!
parted erkennt darauf nun die Partitionen und ich kann die Bootsektoren auslesen. Ich lese die nötigen Werte und berechne sie so um, dass sie DOS/Linux kompatibel sind.
Jetzt erzeuge ich mir ein sparse File der Größe der SD-Karte und partitioniere es ganz normal mit parted exakt so, wie es unter TOS partitioniert wurde. Und dann schreibe ich an die jeweiligen Bootsektoren meinen DOS-kompatibel erzeugten Bootsektor rein. Das sparse File ist jetzt absolut analog zu TOS partitioniert, aber eben mit DOS/Linux kompatiblen Bootsektoren. Ansonsten ist es leer.
So, jetzt muss man nur das xmount-Image mit dem Sparse File verheiraten. Und weil Linux einfach geil ist
, bringt es die Mittel dazu gleich mit:
Mit dmsetup erzeuge ich mir jetzt ein device, das alle Sektoren meines xmount-Images enthält, bis auf jene, die im Sparse-File nicht leer sind (das sind genau der Root-Sektor und die Bootsektoren).
Damit habe ich nun ein Device, das blitzsauber für Linux partitioniert ist, aber die Daten der SD-Karte enthält.
Die Schreibzugriffe landen alle im Cachefile und sind natürlich im little endian Format. Wenn man also fertig ist mit der Arbeit, muss man nur noch die Daten aus dem Cache file an passender Stelle auf die SD-Karte zurück schreiben und sie dabei byteswappen! Zum Glück ist das Cachefile-Format trivial (und dank Opensource ja auch einsehbar), so dass das sehr simpel war.
So, ganz schön krasse Aktion! Aber: Das Skript macht all diesen Mist vollautomatisch und am Ende erhält man Loop-Devices, die genau den TOS-Partitionen entsprechen. Diese erscheinen dann direkt im Dateiexplorer in Linux und los geht's! Wenn man den Partitionen noch mit einem ordentlichen Desktop schöne Labels gibt, erscheinen die auch so unter Linux und man weiß direkt, was was ist!
Na, also wenn das nix ist! Aber wie man schon sieht: Verflucht komplizert und man muss sich xmount leider selbst kompilieren und meinen Patch drauf anwenden. Also, die Dokuarbeit wird sicher nochmal so vie Zeit in Anspruch nehmen, wie das Skript selbst. Aber das Ergebnis finde ich total geil :-)
Mac und Windows-User bleiben hier leider außen vor. Beim Mac könnte das evtl. sogar klappen. Ein Unix-Unterbau ist Gold Wert. Ich hab nur keinen Mac. Sobald das alles fertig ist, kann sich ja ein Mac-User dran versuchen
Cheers, Ingo =;->