Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

d4ilyrun/kernel

Repository files navigation

Kernel

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.

Dependencies

  • Make
  • mtools (to generate an iso file)
  • QEMU

Nix

If you're using a the Nix package manager, a development environment is ready for you to use inside the flake.

$ nix develop .#kernel

Warning

This requires flakes support

Building

$ # 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 file

Toolchain

If 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=

Testing

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.sym

You can also run unit-tests on our libraries:

$ make tests

Documentation

I 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

Things I'd like to learn

  • 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

About

A mere hobby kernel for 32-bit x86 to learn about OS/Kernel development

Topics

Resources

Stars

Watchers

Forks