====== 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 |