rust-kernel
Rustbelt: a hobby x86_64 kernel written in Rust
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | [package]
name = "rust_kernel"
version = "0.1.0"
edition = "2024"
[dependencies]
# Bootloader 0.9.x: the version used by the 2nd edition of "Writing an OS in Rust".
# `cargo bootimage` links it with our kernel into a bootable BIOS disk image.
bootloader = "0.9"
volatile = "0.2.6" # stops the compiler optimising away VGA buffer writes
spin = "0.5.2" # spinlock Mutex (no OS = no std::sync::Mutex)
x86_64 = "0.15" # safe wrappers for x86 instructions/ports (hlt, outb, ...)
uart_16550 = "0.3" # driver for the serial port (COM1)
pic8259 = "0.11" # driver for the two chained 8259 interrupt controllers
pc-keyboard = "0.7" # turns PS/2 scancodes into key events / characters
[dependencies.lazy_static]
version = "1.0"
features = ["spin_no_std"]
[features]
# Build with `--features headless` to make the kernel shut QEMU down after
# printing its greeting (used by scripts/run-headless.sh). Without it the
# kernel just halts forever so you can look at the QEMU window.
headless = []
# Build with `--features stack-overflow` to deliberately overflow the kernel
# stack after boot, to check the double-fault handler (GDT/TSS/IST) catches it.
stack-overflow = []
# No unwinding in a kernel: just abort on panic.
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"
# Extra QEMU arguments used by `cargo run` (via `bootimage runner`).
[package.metadata.bootimage]
run-args = [
"-device", "isa-debug-exit,iobase=0xf4,iosize=0x04", # lets the kernel exit QEMU
"-serial", "stdio", # serial port -> your terminal
]
|