___ ___
_____ _____ / /\ / /\
/ /::\ / /::\ / /::\ / /:/_
/ /:/\:\ / /:/\:\ / /:/\:\ / /:/ /\
/ /:/~/::\ / /:/~/::\ / /:/ \:\ / /:/ /::\
/__/:/ /:/\:/__/:/ /:/\:/__/:/ \__\:\/__/:/ /:/\:\
\ \:\/:/~/:| \:\/:/~/:| \:\ / /:/\ \:\/:/~/:/
\ \::/ /:/ \ \::/ /:/ \ \:\ /:/ \ \::/ /:/
\ \:\/:/ \ \:\/:/ \ \:\/:/ \__\/ /:/
\ \::/ \ \::/ \ \::/ /__/:/
\__\/ \__\/ \__\/ \__\/
BreadboardOS (BBOS, if you like) - as its namesake implies - is a firmware platform aimed at quick prototyping. BBOS was built around the following principles:
BreadboardOS is built on top of FreeRTOS, enabling fast integration of new functional blocks and allowing for task concurrency without breaking the base system. Existing knowledge of RTOS is not necessarily required.
The central component of BBOS is the fantastic microshell project, which provides CLI functionality. Currently, a fork of microshell is used, which includes some additional customization. The CLI implementation is organized into POSIX-style folders/files providing a recognizable user-interface for interacting with MCU hardware.
As of the v0.3 release, BBOS is implemented on a single MCU family - the Raspberry Pi RP2xxx (Pico, Pico W, Pico2, etc). However, the project has been structured such that all hardware-specific code resides in a single directory, with a header file providing HAL functionality. The platform was built with porting in mind.
ps top free df
As they say, a Youtube video is worth 10^6 words.
https://www.youtube.com/watch?v=fQiYE_wlPt0
The following build instructions for BreadboardOS assume a GNU/Linux environment, or alternatively WSL under Windows. Building in other environments may be possible but is not covered here.
build-essential gcc-arm-none-eabi newlib-arm-none-eabi cmake
Ensure that the environment variables $FREERTOS_KERNEL_PATH
and $PICO_SDK_PATH
are set and contain the absolute paths to those projects:
export FREERTOS_KERNEL_PATH=/path/to/freertos/kernel
export PICO_SDK_PATH=/path/to/pico/sdk
It is suggested to add these commands to the user's ~/.profile
, ~/.bashrc
, etc depending on the system.
NOTE for RP2350: As of 10/2024, official FreeRTOS has not yet merged in support for RP2350. Rasberry Pi's fork must be used. Further, there is a bug in the Pico SDK, use the develop
branch to incorporate the fix. Hopefully these changes will be merged upstream soon.
git clone https://github.com/mcknly/breadboard-os.git
cd breadboard-os
git submodule update --init
Open project.cmake
and edit the following parameters:
# PROJECT NAME - in quotes, no spaces
set(PROJ_NAME "my-bbos-proj")
# PROJECT VERSION - in quotes, no spaces, can contain alphanumeric if necessary
set(PROJ_VER "0.0")
# CLI INTERFACE - 0: use UART for CLI (default), 1: use USB for CLI
set(CLI_IFACE 0)
# MCU PLATFORM - set the MCU platform being used (i.e. the subdir in 'hardware/')
set(PLATFORM rp2xxx)
# BOARD - set the board being used (platform-specific prebuild.cmake contains more information about boards)
set(BOARD pico2)
Using CLI over USB requires no additional hardware; using CLI over UART will require a USB-UART adapter (i.e. FTDI FT232 or SiLabs CP2102). Using CLI/UART enables some additional early boot status prints.
mkdir build && cd build
cmake ..
(note: this will default to a 'Release' build)make -j4
(# cores can be altered)This should generate firmware image formats .bin
, .hex
, .uf2
, to be programmed to flash via your preferred method.
For a full debugging-enabled IDE-like experience (recommended), using MS VS Code plus the C/C++
, CMake
, and Cortex-Debug
extensions with your debug probe of choice (Pi Debug Probe, J-Link, etc) is the widely preferred method. See this great tutorial by DigiKey.
Creating your own application on the BreadboardOS platform entails adding one or more new "services" - which are essentially standalone FreeRTOS tasks. An example of this is given in the services/heartbeat_service.c
file, the structure of which can be used as a basis for your new service/application. See services/services.h
which includes extensive documentation on how services/tasks are implemented on BBOS.
To understand how your new service can interact with the system, refer to the function implementations in the file nodes within the cli
directory - these have been provided as a test bed for the underlying system functionality, and the intention is for any new services/tasks to also have their functions mapped into new CLI folders & files - think of this as a test menu system for your project. The CLI could also be leveraged as an automated production test interface!
Project directory structure:
cli/
- directory/file structure for the CLI, and interface to the microshell submoduledriver_lib/
- drivers for external peripheral hardware - library to grow over timehardware/
- all hardware-specific (HAL) functional implementation, each MCU platform has its own subdirectorylittlefs/
- contains the 'littlefs' submodule and CMake wrapperrtos/
- FreeRTOS interface & configuration filesservices/
- where the main application elements (FreeRTOS tasks) residegit_version/
- submodule for adding GIT repo metadata into the binarymicroshell/
- submodule for microshellContributions to the project are welcome! Here are some specific ways to contribute:
driver_lib
To contribute - fork the project, make enhancements, submit a PR.
BreadboardOS is built in no small part upon the substantial work of others:
microshell
littlefs
cmake-git-version-tracking
freertos
pico-sdk
This project is released under the MIT License.
In lieu of including the full license text in every source file, the following tag is used:
// SPDX-License-Identifier: MIT