vol
Wechselt das aktive VFS-Volume und setzt das Arbeitsverzeichnis auf /.
→ Shell-Übersicht · mount · mountp · diskinfo
Syntax
vol <vol-id>
| Parameter | Typ | Beschreibung |
|---|---|---|
vol-id | int | ID des Volumes, das aktiv werden soll |
Beschreibung
Alle VFS-Operationen (ls, cat, cd, pwd, Datei-Öffnen) beziehen sich immer auf das aktive Volume. vol wechselt dieses Volume und setzt gleichzeitig das aktuelle Arbeitsverzeichnis auf / zurück.
Das VFS unterstützt mehrere Volumes gleichzeitig (Multi-Volume-Unterstützung ab WP9). Jedes Volume entspricht einer gemounteten FAT32-Partition. vol wechselt nur, welches davon gerade aktiv ist — alle anderen bleiben gemountet.
Ausgabe:
Switch to vol <vol_id>... OK
Wenn das Volume nicht gemountet ist, erscheint FAIL.
Beispiel:
lyx> vol 0
Switch to vol 0... OK
lyx> ls
[FILE] kernel.elf
[FILE] shell.elf
lyx> vol 1
Switch to vol 1... OK
lyx> ls
(Dateien auf Volume 1)
lyx> pwd
/
Syscall-Details
| Feld | Wert |
|---|---|
| Syscall nr | 86 |
| Kernel-Funktion | VfsSwitchVolume(vol_id) |
| a0 | vol_id |
| Rückgabe | 0 = Erfolg, −1 = Fehler |
| Nebeneffekt | CWD wird auf / zurückgesetzt |
Shell-Implementierung (shell/shell.lyx):
fn lyx_vol(vol_id: int64): int64 {
poke64(g_r3sc + R3_OFF_NR, 86);
poke64(g_r3sc + R3_OFF_A0, vol_id);
return lyx_trigger();
}
fn cmd_vol(b: int64, offset: int64): void {
var vol_id: int64 := token_int(b, offset, 1);
r3_puts("Switch to vol "); r3_puti(vol_id); r3_puts("... ");
var res: int64 := lyx_vol(vol_id);
if (res == 0) { r3_puts("OK\n"); } else { r3_puts("FAIL\n"); }
}
CWD-Reset
Der CWD-Reset auf / ist ein bewusstes Design-Entscheid: Beim Volume-Wechsel würde ein gespeicherter Pfad aus dem alten Volume auf dem neuen Volume ins Leere zeigen. VfsSwitchVolume vermeidet dieses Problem, indem es den CWD immer zurücksetzt.
lyx> cd testdir
lyx> pwd
/testdir
lyx> vol 1
Switch to vol 1... OK
lyx> pwd
/ ← CWD wurde zurückgesetzt
Hinweise
- Volume-ID 0 ist typischerweise das Boot-Volume (Disk 0, ab dem der Kernel geladen wurde).
gpt <disk> <vol-start>mountet mehrere Partitionen automatisch und startet die IDs beivol-start.volmuss danach explizit aufgerufen werden.mkfat32undmountpmounten ein Volume, machen es aber noch nicht aktiv.
