Find a file
2020-02-01 23:34:48 +01:00
bootloader Made getgdt more descriptive 2020-01-10 10:05:19 +01:00
docs Add E1000 network driver 2020-01-31 06:26:23 +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 Ringbuffer: add null checks and more const 2020-02-01 23:34:48 +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
create_tap.sh Add E1000 network driver 2020-01-31 06:26:23 +01:00
Makefile Add E1000 network driver 2020-01-31 06:26:23 +01:00
README.md Add E1000 network driver 2020-01-31 06:26:23 +01:00

TABS

Totaal Arbitrair BesturingsSysteem, Zeus maakt een besturingssysteem!

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)

More information about installing a cross compiler can be found here.

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

In case there are errors in the bootloader you can use make compile_kernel to only compile the kernel.

To run TABS in the qemu simulator run make run. To test the operating system in QEMU, first set up a tap interface with the create_tap.sh script, then run make run or make run_kernelonly.

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
  • A driver for E1000-type network cards
    • sending packets
    • receiving packets

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