Warning
This is a PhD project, and it is still very WIP.
A Router Network Operating System. RetOS comes from retis which mean network in Latin.
Note
This Operating System is based on the great Writing an OS in Rust from @phil-opp.
Important
You will need QEMU x86_64 in order to run project in development mode
You can check the command is available by running
qemu-system-x86_64 --version
Run the project with QEMU
cargo run
Note
If further toolchain installation is needed, rust-toolchain.toml
depicts what's needed.
By running the following command, you will build the OS images and the executables that will use QEMU.
cargo build --release
Build the OS and find the image file you want to use (BIOS or UEFI), you can do it like so:
cargo build --release
find ./target/release -maxdepth 1 -name "*.img"
You can find it by using the lsblk
command. A possible selection for your device can be like /dev/sda1
.
Now you have to burn the image on the hard drive/USB stick with the following command:
dd if=<IMAGE_PATH> of=<DEVICE> bs=1M && sync
You can directly plug your device onto the PC and boot it :)
Note
If you are using the BIOS image, you may want to enable CMS
- Core
- Multi-threading
- ANSI colors (WIP)
- Log system (with goolog)
- Internal clock
- Command Line Interface (with embedded-cli-rs)
- Async/Await
- Framebuffer (print, clear, colors)
- Main x86_64 instructions, exceptions and interruptions (with x86_64)
- Bootloader (with bootloader)
- Standalone kernel
- Devices
- VirtIO? (maybe rust-osdev/virtio)
- USB (maybe rust-osdev/usb or usb-device)
- Serial port (with uart_16550)
- NIC E1000
- NIC RTL8139 (with my fork of rtl8139-rs)
- xHCI (WIP, with rust-osdev/xhci)
- APIC (with this merge request but revisited)
- PCI (WIP with pci_types)
- PS2 Keyboard (with pc_keyboard)
- Legacy PIC (with pic8259)
- Commands
- top (WIP)
- scanpci
- lspci
- ps
- shutdown (with qemu-exit)
- keyboard (change keyboard layout)
- uptime
- clear
- echo
- Network
- TCP/IP stack (maybe smol-tcp)
- Routing stack
- Memory
- More precise heap allocation
- Heap allocation (with Talc)
- Memory pagination
- Others
- multiboot2 (maybe need multiboot2, doc)
- Linux VM?
- @Julien-cpsn - Main contributor
- @i5-650 - Discussion & help
This project is licensed under the MIT license and can be found here.