Libpi

What is Libpi?

Libpi is a baremetal library for Raspberry Pi. It's my passion project for embedded systems--the goal of it is to write a robust, extendable but comprehensive library for the Raspberry Pi A+ (and also the Raspberry Pi zero, since both use the BCM2835 chip). The powerful part about libpi is that no code is hidden (everything libpi needs is written in libpi--no external libraries), and everything is written from first principles (i.e. you can find a doc or datasheet that justifies every decision). Another goal I have for libpi is to have a comprehensive and explanatory documentation for every part of the project, formulated in a way which a new comer could understand everything. Perhaps one day, I will make a video series introducing the new comer to libpi. The purpose of this documentation is also to empower the reader to extend libpi, thus marking a deep understanding of libpi.

Libpi can be leveraged by other baremetal Raspberry Pi projects. For example, I plan to use libpi as a piece of a Raspberry Pi OS. This OS is broken down into 4 sections: libpi (device drivers; raspberry pi specific code), middleware (an interface between libpi and kernel code to abstract away libpi), the kernel (independent kernel code that assumes the abstraction which middleware has created) and applications (useful tools built upon libpi and the kernel, like a shell).

Another cool project that will leverage libpi is the Embedded Pi-Plane, which could alternatively be built as an application on Raspberry Pi OS.

I know this documentation is very sparse and perhaps unclear--libpi is a work in progress.