Developing an operating system (OS) comes with its own set of challenges. Still, one of the most time-consuming and tedious aspects that Raspberry Pi (RPi) OS developers face is the repetitive flashing process required when iterating upon the code. In this article, we will delve into the problem at hand, explore its impact on development efficiency, and propose a solution to automate the flashing process, allowing developers to focus on problem-solving rather than manual tasks.
The problem #
The RPi boots from an SD card where the OS kernel and other boot-specific files live. At the time of writing, RPi’s bootloader lacks a mechanism that allows loading the kernel into memory or updating the SD card contents during boot. Hence, installing a new OS on the board entails the following steps:
- Removing the SD card from the board.
- Plugging it into the development machine.
- Copying the OS files to the card.
- Removing the SD card from the development machine.
- Plugging it back into the board.
- Rebooting the board by unplugging and inserting the USB cable.
While performing this process once may be acceptable, which is the case for most use cases. It becomes a nightmare for development purposes. Repeating this tedious cycle manually for each of the hundreds of iterations during development becomes exhausting. It drastically reduces the number of iterations and also wears out the SD card bringing down its lifespan.
The solution #
To overcome these challenges and boost development productivity, we’ll need automation. By leveraging machines’ ability to handle repetitive tasks, developers can shift their focus to more important tasks like problem-solving. This series aims to guide you in setting up a development workflow that streamlines the recompilation, flashing process, and board resetting.
The ultimate goal is to eliminate these small speed bumps, enabling development to happen at the speed of thought.
What’s next? #
In the upcoming article of this series, we will touch upon the code compilation aspect of development. We will explore techniques and tools to optimize and automate the compilation process, further enhancing the development workflow.
Thank you for taking the time to read this article. If you have any suggestions or questions, please feel free to share them in the comments section.