This repository contains the source code of PebbleOS.
Read more in the very detailed PebbleOS architecture presentation
Then read this presentation on how PebbleOS works!
Join the Rebble Discord #firmware-dev channel to discuss.
Several original PebbleOS firmware engineers recorded a podcast about the OS.
| Podcast | Gemini Summary |
|---|---|
WARNING: Codebase is being refactored/modernized, so only certain features may work right now.
-
Use Linux (tested: Ubuntu 24.04, Fedora 41) or macOS (tested: Sequoia 15.2)
-
Clone the submodules:
git submodule init git submodule update
-
Install GNU ARM Embedded toolchain from https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads. Make sure it is available on your
PATHby checkingarm-none-eabi-gcc --versionreturns the expected version. -
If using Ubuntu, install
gcc-multilibandgettext -
Install
nrfjprogfrom https://www.nordicsemi.com/Products/Development-tools/nRF-Command-Line-Tools. -
Create a Python venv:
python -m venv .venv
-
Activate the Python venv (also every time you start working):
source .venv/bin/activate -
Install dependencies:
pip install -r requirements-linux.txt
-
Install local dependencies:
pip install -e \ python_libs/pblprog \ python_libs/pebble-commander \ python_libs/pulse2 \ python_libs/pebble-loghash
First, configure the project like this:
./waf configure --board asterix_vla_dvb1 --nojs --nohashAt this moment, only asterix_vla_dvb1 board target may compile and boot.
Then build:
./waf buildPRF can be also be built:
./waf build_prfFirst make sure Nordic S140 Softdevice is flashed (only do this once):
nrfjprog --program src/fw/vendor/nrf5-sdk/components/softdevice/s140/hex/s140_nrf52_7.2.0_softdevice.hex --sectoranduicrerase --resetFlash the firmware:
nrfjprog --program build/src/fw/tintin_fw.elf --sectorerase --resetFirst time you should see a "sad watch" screen because resources are not flashed. To flash resources, run:
python tools/pulse_flash_imaging.py -t /dev/$PORT -p resources build/system_resources.pbpackpython tools/pulse_console.py -t /dev/$PORT