Skip to content

abs0luty/felix

 
 

Repository files navigation

Felix OS

x86 operating system

Description

Felix is my attempt at writing an x86 operating system.

It's written completely from scratch in Rust and doesn't use any external dependecies.

Pictures

Felix running in QEMU:
felix_qemu

Felix running on real hardware:
felix_real

Features

Bootloader

  • boots (you don't say!)
  • BIOS compatible (also works on UEFI with CSM enabled)
  • Global Descriptor Table loading
  • Unreal Mode switching (to use 32bit addresses in 16bit Real Mode)
  • kernel copying from disk to protected memory
  • 32bit Protected Mode switching
  • kernel jumping

Kernel

  • print! macro able to write formatted text to VGA text buffer
  • Interrupt Descriptor Table loading
  • CPU exceptions handler
  • Programmable Interrupt Controller driver
  • keyboard driver
  • shell
  • ATA disk driver
  • FAT16 filesystem file read

Building

You can download a pre-built image or you can build it by yourself using Docker.

Download pre-built image

build

A build is made for every commit.

To download the latest build click on the badge above, then click on the most recent build and download the artifact.

Build using Docker

First make sure you have Docker installed. Then:

  1. Clone the repo git clone https://github.com/mrgian/felix
  2. Change dir to repo cd felix
  3. Build the image docker build -t felix-image .
  4. Run the container docker run --name felix-container felix-image
  5. Copy build from container to host docker cp felix-container:/root/felix/build .

Running

The final disk image is build/disk.img

You can run it in QEMU using this command: qemu-system-i386 -drive file=build/disk.img,index=0,media=disk,format=raw,if=ide

Or you can run it on a real x86 computer by copying the disk image to a USB drive using this command: sudo dd if=build/disk.img of=/dev/sdX status=progress and then booting from USB.

Progress

  • 22/10/22 - Project start
  • 27/01/23 - Bootloader can print to screen
  • 31/01/23 - Bootloader can read data from disk to memory
  • 01/02/23 - Bootloader can load kernel to memory
  • 27/02/23 - Moved to Rust environment using inline assembly
  • 01/03/23 - Rewritten kernel loading code in Rust
  • 08/03/23 - Implemented println macro
  • 20/03/23 - Switch to 32bit protected mode
  • 29/03/23 - Basic CPU exception handler
  • 30/03/23 - PIC driver
  • 06/04/23 - keyboard driver
  • 07/04/23 - start working on shell
  • 08/04/23 - ATA disk driver
  • 09/04/23 - FAT filesystem file read

Credits

This project is entirely developed by Gianmatteo Palmieri (mrgian).

About

🐱 x86 operating system

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 94.7%
  • Shell 3.6%
  • Assembly 1.4%
  • Dockerfile 0.3%