Introduction #

Pi-kachULM OS is a OS (moslty a kernel) written in C++ (around 10 000 lines of code) and assembly (around a hundred) for Raspberry Pi 3 and 4. It was tested on hardware on the following boards:
- Raspberry Pi 3B+ (4GB of RAM)
- Raspberry Pi 4B (1GB of RAM)
- Raspberry Pi Compute Module 4
This project was originally written as part of the OS course at the Ecole Normale Normale Superieure de Paris. The work was carried out in a group, whose members are listed below:
- Gabriel Desfrene ,
- Hubert Gruniaux (myself), and,
- Emile Sauvat.
Some photos #





Some features #
You can download and run the OS directly on QEMU or your own hardware (not recommended even if there is probably no risks as the system is only read-only).
Keyboard hardware #
Our OS supports keyboards (but not mice). However, the support is very limited. Notably, we don’t have any USB drivers, and instead we use a custom-made PS/2 driver for the keyboard. Because the Raspberry boards do not have a PS/2 plug, you need to connect the keyboard using the GPIO pins of the board manually.
In particular, you cannot use keyboards on QEMU as it doesn’t support PS/2 emulation on Raspberry Pi boards.
As the user interface mostly depends on the keyboard, most of the features of our OS and window manager are not accessible (the project was rushed at the end for the final presentation where we had a keyboard).
Window manager #
As you can see from the images, our OS supports a form of graphical interface. Applications can create windows and display them on screen. Users can also interact with these windows via keyboard shortcuts or the mouse.
Internally, the window manager is a compositor. Each window has its own allocated framebuffer, and applications can only design in that framebuffer. The kernel then takes care of compositing (copying) the framebuffers of each window onto the screen.
The system tries to minimize the number of pixels to be updated as much as possible, since memory copies are expensive.
We tried to use DMA (Direct Memory Access hardware) to speed up copies, but many bugs persisted. We also implemented a driver for HVS (Hardware Video Scaler, a composent of the VideoCore GPU), but it didn’t work on QEMU so it was not included in the source code.