This is a mere hobby kernel for 32-bit x86, to learn about OS/Kernel development.
I'm adding features in no particular order, just implementing stuff I want to learn more about and what seems more fun at the moment.
- Make
- mtools (to generate an iso file)
- QEMU
If you're using a the Nix package manager, a development environment is ready for you to use inside the flake.
$ nix develop .#kernelWarning
This requires flakes support
$ # Use our custom toolchain for building
$ export CROSS_COMPILE=toolchain/opt/i686-dailyrun/bin/i686-dailyrun-
$ export ARCH=i686 # The architecture's name
$ make iso # builds the kernel.iso file
$ make qemu # boots up qemu using the iso fileIf you do not already have an available i686-elf toolchain, a custom GCC target for this kernel (i686-dailyrun)
is available for you to build inside the toolchain directory. Note that using this toolchain is required when
building userland executables destined to be used with this kernel.
$ make gcc TARGET=i686-dailyrun ARCH= CROSS_COMPILE= GCC_CONFIGURE_FLAGS='--with-newlib'
$ make libc ARCH=i686 CROSS_COMPILE=I don't know how I can test kernel code, so all tests are performed manually for the time being ...
$ make qemu-server # boots up a qemu server open for GDB connections
$ gdb -x .gdbinit build/kernel/kernel.symYou can also run unit-tests on our libraries:
$ make testsI try to keep the codebase well-documented. You can generate the full doc using doxygen:
$ make docs # Requires you to also pull the git submodules- Memory management
- Paging
- Copy-on-Write
- Guard pages
- Shared pages
- Page cache
- Drivers
- Timer
- Mouse
- Loadable kernel modules
- Scheduling
- Multitasking
- Semaphores
- Priority
- Multiprocessor
- Networking
- Ethernet
- IP
- ARP
- IP segmentation
- Berkley sockets
- TCP
- UDP
- NTP
- NAT
- Filesystems
- VFS
- ext2
- NFS
- Porting
- Load/Execute ELF programs
- Porting an already existing program (Can it run DOOM?)
- Dynamic ELF relocation
- Misc
- IPC
- SMP
- POSIX syscalls compatibility