A minimal operating system built from scratch for the Raspberry Pi, developed and tested using QEMU for ARM emulation.
Table of Contents
- Introduction
- Features
- Requirements
- Installation
- Usage
- Development
- Project Timeline
- Contributing
- License
- Acknowledgements
Introduction
Tiny-Pi-OS is a personal project aimed at creating a simple operating system for the Raspberry Pi. It includes basic functionalities such as a bootloader, a simple kernel, memory management, process scheduling, and basic I/O operations.
Features
- Basic Bootloader in Assembly
- Simple Kernel in C
- Memory Management
- Basic I/O Handling
- Process Management and Scheduling
- File System Support (FAT32)
- Interrupt Handling
Requirements
- ARM Cross-Compiler (GCC Toolchain)
- QEMU for ARM Emulation
- Make
- Git
Installation
- Install ARM Cross-Compiler:
- On Ubuntu:
sudo apt-get install gcc-arm-none-eabi
- On macOS:
brew install arm-none-eabi-gcc
- On Ubuntu:
- Install QEMU:
- On Ubuntu:
sudo apt-get install qemu-system-arm
- On macOS:
brew install qemu
- On Ubuntu:
- Clone the Repository:
git clone https://github.com/mustafa-khann/tinyos.git
Usage
- Build the OS:
make
- Run the OS in QEMU:
qemu-system-arm -M versatilepb -kernel kernel.img -serial stdio
Development
boot/
: Contains the bootloader code in Assembly.build/
: Contains build files.include/
: Contains header files.kernel/
: Contains the kernel code in C.linker.ld
: Linker script.Makefile
: Build instructions.
- Create a new branch for your feature:
git checkout -b feature-name
- Make your changes and commit them:
git add.
andgit commit -m "Description of your feature"
- Push to the branch:
git push origin feature-name
- Create a pull request on GitHub.
Project Timeline
- Day 1: Environment Setup and Basic Bootloader
- Day 2: Simple Kernel Development
- Day 3: Core Kernel Features
- Day 4: Process Management and Scheduler
- Day 5: Advanced Features
- Day 6: Comprehensive Testing and Debugging
- Day 7: Finalization and Documentation
Contributing
Contributions are welcome! Please open an issue or submit a pull request for any improvements or features you would like to see.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgements
Let's build something amazing!