This is an early version of RPiOS kernel, which currently includes:
- A simple UART bootloader
- The kernel itself
The project is aimed at experimenting with bare-metal development on Raspberry Pi boards.
Currently supported:
- UART bootloader for loading kernel images
- Basic memory management
- Multiple address spaces
- Round-robin scheduler
- Loading multiple binaries
- Simple syscall handler
- Basic drivers, including:
- Interrupt controller
- UART
- Timer
Make sure you have the ARM EABI toolchain installed with g++ support.
In particular, we use the arm-none-eabi-* cross toolchain.
cd ./uart_bootloader
./build.shThis will produce a kernel.bin image.
Copy it to the SD card boot partition and rename it as follows:
kernel7.imgfor Raspberry Pi 2
When properly set up, the bootloader should output:
: Waiting for image data on UART
cd ./kernel
./build.shUse the send.sh script to communicate with the UART bootloader and upload the kernel:
./send.sh /dev/ttyUSB0Expected output:
: Waiting for image data on UART
: Data transfer detected, downloading the image ...
: Image size (bytes): 4324
: Data transfer finished, giving up control to kernel
- Supports basic multitasking and system calls.
- Currently only basic UART bootloading and kernel execution are supported.
- This is an early stage project
- Tested on Raspberry Pi 2B.
This project is released under the MIT License.