/lunatix

Primary LanguageCOtherNOASSERTION

Setup

  • 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

TODOs

Kernel

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

Userspace

  • 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

Process Conventions

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.