🚀 Getting Started#

Follow this guide to:

  • Set up a command-line PebbleOS development environment

  • Get the source code

  • Build, flash, and run PebbleOS on a watch with programming port access

Pre-requisites#

First download the Arm GNU toolchain arm-none-eabi 14.2.Rel1 from here. Make sure to make it available on your path PATH and then check GCC version is reported correctly:

$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)) 14.2.1 20241119
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

A series of system-level dependencies are required. Follow the next steps to install them.

  1. Update package list:

sudo apt update
  1. Install required dependencies

sudo apt install clang gcc gcc-multilib git gettext python3-dev python3-venv openocd
  1. Install brew.

  2. Install dependencies:

brew install python openocd
  1. Link brew Python:

brew link python@3

If building with Javascript support enabled (default), install Emscripten:

  1. Install Emscripten SDK as detailed here. Pick version 4.0.7 instead of latest when running ./emsdk install or ./emsdk activate. To conveniently access Emscripten SDK tools, the activate command will offer some suggestions. It is recommended to follow them.

  1. Install Emscripten using brew:

brew install emscripten

Note that brew does not seem to offer all Emscripten versions. Versions 4.0.x should work fine. If brew versions cause issues, consider using Emscripten SDK instead.

Get the source code#

You can clone the PebbleOS repository by running:

git clone --recurse-submodules https://github.com/coredevices/pebbleos

Once cloned, enter the pebbleos directory before continuing:

cd pebbleos

Python dependencies#

A series of additional Python dependencies are also required. Follow the next steps to install them in a Python virtual environment.

  1. Create a new virtual environment:

python3 -m venv .venv
  1. Activate the virtual environment:

source .venv/bin/activate

Tip

Remember to activate the virtual environment before every time you start working!

  1. Install dependencies

pip install -r requirements.txt

Building#

  1. Configure the project:

./waf configure --board $BOARD

where $BOARD is any of the supported boards, e.g. asterix (Core 2 Duo), snowy_bb2 (Pebble Time), …

  1. Build:

./waf build

Flashing#

Before attempting to flash, check the documentation for each board on how to prepare and connect your watch for programming.

You can flash the built firmware (including pre-compiled bootloader) by running:

./waf flash

If flashing for the first time, your watch will reboot into PRF or a sad watch state if PRF is missing, indicating that resources need to be flashed:

./waf image_resources --tty $SERIAL_ADAPTER

where $SERIAL_ADAPTER is the path for your serial adapter, e.g. /dev/ttyACM0, /dev/tty.usbmodem1102, etc. If using a board with a built-in FTDI programmer, the --tty argument can be removed.

At this point you should observe the watch booting into the main application. You can also see the logs by opening the console:

./waf console --tty $SERIAL_ADAPTER

Try sending help to get a list of available console commands.