-
Install rust. Use whichever method you like; it is well documented.
-
Install qemu:
pacman -S qemu-emulators-full
-
Compile our code:
make all
-
Run the OS:
cargo run
General Stuff:
- update syscall_abi cap variants to include all caps
- implement copy for more caps
- BUG: fix kernel allocator. Somehow, we have a huge range in kernel loader (0x80040000 .. 0xc0000000), but in kernel there's not much left: (0x80040000..0x80099000)
- implement destroy for more caps (maybe add a simple drop to CapCounted?)
- Change Memory Allocator to use Page Alloc. Currently, we use the bump allocator, so creating and destroying a single page repeatedly will consume all memory.
- Don't map intermediate page tables automatically.
- Refactor cursors so that we don't need to keep all the intermediate objects
- Implement IPC calls, i.e. Endpoints (with cap transfer)
- add some TLS and save the hart/context id.
- figure out which context we should enable in PLIC for interrupts
- improve booting, pass init as boot arg
- change kernel device tree lib?
- add PCI to dev memory
- cleanup documentation of syscalls
- use unique syscall labels for capabilities (maybe add some simple name hashing?)
- recursive caddr lookup
- BUG: kernel should refuse to map addresses that have the 39th vaddress bit set to 1
- BUG: kernel loader can't load debug kernel: panicked at 'range end index 8636784 out of range for slice of length 8388608', /3/xmas-elf-0.8.0/src/sections.rs:38:57
- move device tree to top of init virtual memory
- Refactor Allocators crate to use alloc api once that is in rust stable
Destroy related tasks:
- implement destroy for more caps (maybe add a simple drop to CapCounted?)
- cspace: destroy slots
- devmem: destroy state correctly. (destroy child pages on drop? leave state global?)
- irqControl: destroy state correctly. (maybe don't allocate state, but keep as global?)
- irq: destroy state (Notification) on Irq destroy
- memory: destroy children
- vspace: cleanup asid stuff on destroy
- notification: signal waitset on destroy
- task: signal waitset on destroy
- add simple virtio file system driver
- BUG: virtio: free descriptors after usage
- add global alloc
- load binaries from files
- render to screen (virtio)
- add allocation logic for address mapping (welche addresse hardcode ich heute?)
- read from virtio human input device
- better keyboard layouts
- read keyboard layout from file
- flesh out scheduler so that a process is executed multiple times
- document (and maybe reorganize) address space layout
- VirtIO from device tree
These are the conventions that apply to processes started within the system. They describe which capabilities a process can expect to be present at which CAddr.
- Binary files have a special elf section named
.lunatix_manifest
. It contains metadata about the task to load including at which CAddrs it expects which capabilities. The loading task tries to fulfill these requests or rejects the binary.