summaryrefslogtreecommitdiffstats
path: root/rsdos/src/main.rs
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-07-31 16:31:34 +0200
committersalmonik <salmonik@tuta.io>2026-07-31 16:31:34 +0200
commit6767d96e8ed5049af7b551b00d6320fbfb5dcd05 (patch)
tree118e6b52d75684e52f96b923e773a1100c02c5cb /rsdos/src/main.rs
parentrtc + pci: CMOS clock with date command, PCI bus enumeration (diff)
downloadrs-dos-6767d96e8ed5049af7b551b00d6320fbfb5dcd05.tar.gz
rs-dos-6767d96e8ed5049af7b551b00d6320fbfb5dcd05.zip
vfs: everything is a file — dirs, ramfs, character devices
- fs.rs: node-table VFS (root /dev /tmp /etc). Regular files are in-memory ramfs; char devices regenerate content on every read so 'cat /dev/rtc' shows the live time. Nodes are stable handles with tombstone removal; . and .. path resolution. - /dev devices: mem (raw physical RAM, offset = address), rtc, pci, version, meminfo, null, zero, console (write prints to screen+serial), serial. /etc/motd static file. - shell: ls, cat, hexdump (hexdump -C style), mkdir, touch, rm; echo gains '>' overwrite and '>>' append redirection (append bug fixed: first '>' in '>>' was parsed as overwrite) - boot: fs init + self-test (create/read/write/remove) before the shell - QEMU verified: file lifecycle, redirection, console/null writes, mkdir/touch/rm, hexdump /dev/mem and /tmp/x byte-exact
Diffstat (limited to '')
-rw-r--r--rsdos/src/main.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/rsdos/src/main.rs b/rsdos/src/main.rs
index c35d88f..8e49937 100644
--- a/rsdos/src/main.rs
+++ b/rsdos/src/main.rs
@@ -154,6 +154,14 @@ pub extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemT
154 let devices = rsnix::pci::probe(); 154 let devices = rsnix::pci::probe();
155 rsnix::serial_println!("pci: {} device(s) on all buses", devices.len()); 155 rsnix::serial_println!("pci: {} device(s) on all buses", devices.len());
156 156
157 let (dirs, files) = rsnix::fs::init();
158 rsnix::serial_println!("fs: vfs ready — {} dirs, {} files", dirs, files);
159 if rsnix::fs::self_test() {
160 rsnix::serial_println!("fs: self-test OK (create/read/write/remove)");
161 } else {
162 rsnix::serial_println!("fs: self-test FAILED");
163 }
164
157 rsnix::serial_println!("boot: entering shell"); 165 rsnix::serial_println!("boot: entering shell");
158 shell::run(); 166 shell::run();
159} 167}