====== mount ======
Mountet einen rohen Sektorbereich einer Disk als VFS-Volume.
→ [[lyxos:shell|Shell-Übersicht]] · [[lyxos:cmd:mountp|mountp]] · [[lyxos:cmd:vol|vol]] · [[lyxos:cmd:diskinfo|diskinfo]]
----
===== Syntax =====
mount
^ Parameter ^ Typ ^ Beschreibung ^
| ''vol-id'' | int | Volume-ID, unter der die Disk angesprochen wird |
| ''disk-id'' | int | Laufwerksnummer (0-basiert, aus ''diskinfo'') |
| ''lba-start'' | int | LBA-Sektor, ab dem das FAT32-Dateisystem beginnt |
----
===== Beschreibung =====
''mount'' registriert einen FAT32-Bereich auf einer Disk als VFS-Volume. Ab diesem Zeitpunkt ist das Volume unter der angegebenen ''vol-id'' ansprechbar. Um es als aktives Arbeits-Volume zu setzen, ist anschließend ''vol '' nötig.
Im Gegensatz zu ''mountp'' arbeitet ''mount'' direkt mit dem LBA-Startsektor — es wird keine Partitionstabelle konsultiert. Das ist nützlich, wenn der genaue LBA-Bereich bekannt ist oder kein MBR/GPT existiert.
**Ausgabe:**
Mount disk LBA as vol ... OK
Schlägt das Mounten fehl (z.B. kein FAT32-Bootsektors an ''lba_start''), erscheint ''FAIL''.
**Beispiel:**
lyx> mount 1 1 2048
Mount disk 1 LBA 2048 as vol 1... OK
lyx> vol 1
Switch to vol 1... OK
lyx> ls
(Dateien auf Disk 1 ab LBA 2048)
----
===== Syscall-Details =====
^ Feld ^ Wert ^
| Syscall nr | 85 |
| Kernel-Funktion | ''VfsMountDisk(vol_id, disk_id, lba_start)'' |
| a0 | vol_id |
| a1 | disk_id |
| a2 | lba_start |
| Rückgabe | 0 = Erfolg, −1 = Fehler |
**Shell-Implementierung** (''shell/shell.lyx''):
fn lyx_mount(vol_id: int64, disk_id: int64, lba_start: int64): int64 {
poke64(g_r3sc + R3_OFF_NR, 85);
poke64(g_r3sc + R3_OFF_A0, vol_id);
poke64(g_r3sc + R3_OFF_A1, disk_id);
poke64(g_r3sc + R3_OFF_A2, lba_start);
return lyx_trigger();
}
fn cmd_mount(b: int64, offset: int64): void {
var vol_id: int64 := token_int(b, offset, 1);
var disk_id: int64 := token_int(b, offset, 2);
var lba_start: int64 := token_int(b, offset, 3);
r3_puts("Mount disk "); r3_puti(disk_id);
r3_puts(" LBA "); r3_puti(lba_start);
r3_puts(" as vol "); r3_puti(vol_id); r3_puts("... ");
var res: int64 := lyx_mount(vol_id, disk_id, lba_start);
if (res == 0) { r3_puts("OK\n"); } else { r3_puts("FAIL\n"); }
}
----
===== mount vs. mountp =====
^ ^ ''mount'' ^ ''mountp'' ^
| Adressierung | LBA-Sektor direkt | Partitionsnummer (1-basiert) |
| Partitionstabelle | wird nicht gelesen | wird via ''DiskmapFindPart'' konsultiert |
| Flexibilität | mehr Kontrolle | einfacher bei bekannten Partitionen |
| Syscall | 85 | 90 |
**Empfehlung**: ''mountp'' verwenden, wenn die Partitionstabelle bekannt und korrekt ist. ''mount'' ist nützlich bei manuell partitionierten Disks oder wenn ''partinfo'' noch nicht aufgerufen wurde.
----
===== Warum ist der LBA-Startsektor Pflicht? =====
LBA 0 ist der MBR (Master Boot Record) — 512 Bytes Partitionstabelle und Bootcode, kein FAT32-Header. Der Kernel liest die FAT32-BPB (BIOS Parameter Block) genau an ''lba_start''. Gibt man ''lba_start = 0'' an, liest der Kernel den MBR als FAT32-Header — kein gültiges FAT32, der Mount schlägt fehl.
// Falsch: LBA 0 ist der MBR, kein FAT32-Header
lyx> mount 1 1 0
Mount disk 1 LBA 0 as vol 1... FAIL
// Richtig: FAT32 beginnt nach dem MBR, z.B. LBA 2048
lyx> mount 1 1 2048
Mount disk 1 LBA 2048 as vol 1... OK
Den korrekten LBA-Startsektor zeigt ''partinfo '' in der ''Start''-Spalte. Um das Hardcoding zu vermeiden, ist ''mountp'' die bequemere Alternative:
// Äquivalent, ohne LBA kennen zu müssen:
lyx> mountp 1 1 1
Mount disk 1 part 1 as vol 1... OK
===== Superfloppy: FAT32 ohne Partitionstabelle =====
Auf einer Superfloppy-Disk sitzt die FAT32-BPB direkt bei LBA 0 — keine MBR-Partitionstabelle davor. USB-Sticks unter Windows werden oft so formatiert. In Lyx OS:
lyx> mkfat32 1 0 131072 // FAT32 direkt ab LBA 0 (kein part davor)
Format disk 1 LBA 0 sz=131072... OK
lyx> mount 1 1 0 // lba_start = 0 ist hier korrekt
Mount disk 1 LBA 0 as vol 1... OK
Einschränkung: ''partinfo'' erkennt keine MBR-Partition und zeigt die Disk ohne Partitionseinträge. ''mountp'' ist nicht möglich, da kein MBR-Eintrag vorhanden ist, aus dem der LBA-Start abgelesen werden könnte — ''mount 1 1 0'' muss bei jedem Start manuell eingegeben werden.
===== Hinweise =====
* ''mount'' liest den FAT32-Bootsektor an ''lba_start'' und initialisiert die VFS-Strukturen. Liegt dort kein gültiger FAT32-Bootsektor, schlägt der Befehl fehl.
* Die ''vol-id'' muss nicht mit der ''disk-id'' übereinstimmen — es können mehrere Partitionen einer Disk unter verschiedenen Volume-IDs gemountet werden.
* Das Mount macht das Volume nicht automatisch aktiv. ''vol '' ist danach nötig.
* ''mkfat32'' und ''gpt'' mounten automatisch — ''mount'' explizit zu verwenden ist nur nötig, wenn die Partition bereits existiert und formatiert ist.
----
===== Verwandte Befehle =====
| [[lyxos:cmd:mountp|mountp]] | Partition per Nummer mounten (einfacher) |
| [[lyxos:cmd:vol|vol]] | Gemountetes Volume als aktiv setzen |
| [[lyxos:cmd:partinfo|partinfo]] | LBA-Startsektor einer Partition anzeigen |
| [[lyxos:cmd:mkfat32|mkfat32]] | FAT32 formatieren (inkl. Auto-Mount) |
| [[lyxos:cmd:gpt|gpt]] | GPT scannen und alle FAT-Partitionen mounten |