Find a file
2020-01-10 09:28:31 +01:00
bootloader Read all ELF program headers 2020-01-10 09:28:31 +01:00
docs Add getgdt, struggle a bit, give up, cry... 2020-01-10 02:23:59 +01:00
filesystem make_bin makes full filesystem 2020-01-05 22:47:40 +01:00
helpers Add a bit of logging 2020-01-05 22:54:14 +01:00
kernel Read all ELF program headers 2020-01-10 09:28:31 +01:00
.gdbinit so close yet so far 2020-01-08 22:36:49 +01:00
.gitignore Add demo kernel 2019-12-28 13:47:10 +01:00
Makefile Interrupt and keyboard support 2020-01-09 12:06:45 +01:00
README.md Add minimal shell, find out that stuff is broken :'( 2020-01-09 18:32:12 +01:00

RoBoot

My attempt at making a bootloader and kernel.

How to use

To compile, you need:

  • i686-elf-gcc for cross-compiling the kernel
  • A system gcc for compiling the host-helpers
  • nasm for compiling the bootloader
  • qemu-system-i386 for emulating (qemu-system-x86_64 will probably work too, but that is not directly supported)

If you run make bin, it will generate target/boot.bin, this is a binary file layed out as described in the docs. To burn it on a USB drive, simply dd if=target/boot.bin of=/dev/sdb and the drive is bootable and contains an SFS filesystem with the files in filesystem/.

Bootloader

The bootloader is self-written, based on articles on the OSDev wiki. It's a single stage, ELF-loading bootloader in the most basic way possible.

More info in the docs

Kernel

The kernel is based on the bare bones kernel from the OSDev wiki.

Features

  • Terminal output (with newlines!)
  • Very basic (and probably broken) memory management
  • Interrupt handling
  • Keyboard input
  • Exception handling
  • Minimal shell
  • Filesystem interaction
    • Show files in directory
    • Read files in directory
    • Write files in directory
  • Tests
  • Running executables from filesystem
  • Better memory management
  • Better shell

As a test, I've implemented day 1 of advent of code on the AoC branch.