mount

Mountet einen rohen Sektorbereich einer Disk als VFS-Volume.

Shell-Übersicht · mountp · vol · diskinfo


Syntax

mount <vol-id> <disk-id> <lba-start>

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 <vol-id> 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 <disk_id> LBA <lba_start> as vol <vol_id>... 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 <disk> 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 <vol-id> 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

mountp Partition per Nummer mounten (einfacher)
vol Gemountetes Volume als aktiv setzen
partinfo LBA-Startsektor einer Partition anzeigen
mkfat32 FAT32 formatieren (inkl. Auto-Mount)
gpt GPT scannen und alle FAT-Partitionen mounten