Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrgian/felix
🐱 Experimental operating system written in Rust
https://github.com/mrgian/felix
bootloader kernel operating-system os rust
Last synced: about 1 month ago
JSON representation
🐱 Experimental operating system written in Rust
- Host: GitHub
- URL: https://github.com/mrgian/felix
- Owner: mrgian
- License: mit
- Created: 2022-10-22T11:30:57.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-01-08T20:59:32.000Z (12 months ago)
- Last Synced: 2024-08-02T07:02:19.221Z (5 months ago)
- Topics: bootloader, kernel, operating-system, os, rust
- Language: Rust
- Homepage:
- Size: 845 KB
- Stars: 384
- Watchers: 8
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust-list - Felix OS
- awesome-rust-list - Felix OS
README
Felix OS
x86 operating system## Description
Felix is an experimental operating system for the Intel IA-32 architecture (x86).
It's **written completely from scratch** in Rust and doesn't use any external dependencies.
This project is part of the work for my bachelor thesis in computer engineering. You can read it [here](https://github.com/mrgian/felix/blob/main/thesis.pdf).
## Pictures
Felix running in QEMU:![felix_qemu](https://github.com/mrgian/felix/assets/10211171/b371934e-0ac7-40e6-a965-e42bf9e24e86)
![felix_qemu](https://github.com/mrgian/felix/assets/10211171/a01652f4-f199-4544-9f15-b2cd1962df1d)
Felix running on real hardware:
![felix_real](https://user-images.githubusercontent.com/10211171/230796141-b2c62d63-5c4e-4d8b-a9ee-3669bdee48b0.jpg)## 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
- Interrupt Descriptor Table loading
- CPU exceptions handler
- Programmable Interrupt Controller driver
- keyboard driver
- ATA disk driver
- FAT16 filesystem file read
- timer interrupt driven CPU scheduler
- prints system call that writes to VGA text buffer
- task manager
- round robin CPU scheduler### Shell
Available commands:
- **help** shows available commands
- **ls** lists root directory entries
- **cat ** displays content of a file
- **test ** runs a dummy task
- **run ** loads file as task and adds it to the task list
- **ps** lists running tasks
- **rt ** removes specified task### libfelix (standard library)
- print! macro able to print formatted text to screen## Building
You can download a pre-built image or you can build it by yourself using Docker.
### Download pre-built image
[![build](https://github.com/mrgian/felix/actions/workflows/docker.yml/badge.svg)](https://github.com/mrgian/felix/actions)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 .`### Build on MacOS/Linux
Make sure you have `rustup`,`mtools`,`dosfstools` and `fdisk` installed on your system, in any case makefile script
will try to install them for you.```zsh
git clone https://github.com/mrgian/felix
cd felix
make all
```## Running
The final disk image is `build/disk.img````zsh
make run
```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
- *26/04/23* - CPU scheduler
- *13/05/23* - prints system call
- *13/05/23* - println! macro in standard library
- *30/06/23* - multitasking finally working## Roadmap
The following features are planned to be added sooner or later:
- paging
- memory allocator
- VESA video driver
- networking
- SATA AHCI disk driver
- graphical user interface## Credits
This project is entirely developed by [**Gianmatteo Palmieri**](https://gian.im)
Logo design by [**Veronica Grana**](https://www.instagram.com/_.veronica_grana._)