Skip to content

Latest commit

 

History

History
48 lines (44 loc) · 1.4 KB

kernel.md

File metadata and controls

48 lines (44 loc) · 1.4 KB

overall kernel implementation notes

Testing setup

The approach I took in laos was not so good, so I'd like to reformulate it here. There, you would compile the kernel with -DRUNTEST=<test_selection_criteria, and this would only compile in the tests you want. This means that running a different set of tests means recompiling the kernel.

There's no reason this can't be done at runtime, so the new idea is to build a test runner kernel that reads the test selection at runtime (via serial port).

kernel TODO

In no definitive order. Some of these can be copied from laos.

  • quality of life
    • C++ basic runtime support (e.g., global ctors)
    • unit testing utility
    • doxygen
    • benchmarking utility
    • clang-tidy and clang-format configuration
  • basics
    • printf library
    • (circular) linked lists like Linux's LIST_HEAD
  • interrupts
  • memory allocation
    • page frame allocator
    • slub/slab allocator
    • virtual memory allocator
  • scheduling
    • kernel threads
    • setup TSS (for userspace)
    • userspace processes (after userspace)
  • enter userspace
    • syscalls
    • shell
    • ELF loader
    • try to link in a very simple libc?
  • drivers
    • serial port
    • keyboard
    • console
    • disk
    • timer
    • graphics (very simple)
  • filesystem (I have no idea how these work)