From a17261f0a7aca0d00dc96685a5c99cd643b19fe7 Mon Sep 17 00:00:00 2001 From: Lee Lup Yuen Date: Thu, 30 Jul 2020 14:41:33 +0800 Subject: [PATCH] Create DFU package --- .github/workflows/main.yml | 102 +++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cedff063..3d412d2c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,7 @@ # GitHub Actions Workflow to build FreeRTOS Firmware for PineTime Smart Watch # See https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud # Based on https://github.com/JF002/Pinetime/blob/master/doc/buildAndProgram.md +# and https://github.com/JF002/Pinetime/blob/master/bootloader/README.md # Name of this Workflow name: Build PineTime Firmware @@ -24,6 +25,10 @@ jobs: runs-on: ubuntu-latest steps: + + ######################################################################################### + # Download and Cache Dependencies + - name: Install cmake uses: lukka/get-cmake@v3.18.0 @@ -58,32 +63,107 @@ jobs: - name: Install nRF5 SDK if: steps.cache-nrf5sdk.outputs.cache-hit != 'true' # Install SDK if not found in cache - run: cd ${{ runner.temp }} && curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip && unzip nrf5_sdk.zip && mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk + run: | + cd ${{ runner.temp }} + curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip + unzip nrf5_sdk.zip + mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk + - name: Check cache for MCUBoot + id: cache-mcuboot + uses: actions/cache@v2 + env: + cache-name: cache-mcuboot + with: + path: ${{ runner.temp }}/mcuboot + key: ${{ runner.os }}-build-${{ env.cache-name }} + restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} + + - name: Install MCUBoot + if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache + run: | + cd ${{ runner.temp }} + git clone --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot + + - name: Install imgtool dependencies + run: pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt + + - name: Install adafruit-nrfutil + run: | + pip3 install --user wheel + pip3 install --user setuptools + pip3 install --user adafruit-nrfutil + + ######################################################################################### + # Checkout + - name: Checkout source files uses: actions/checkout@v2 - name: Show files run: set ; pwd ; ls -l + ######################################################################################### + # CMake + - name: CMake - run: mkdir -p build && cd build && cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 ../ + run: | + mkdir -p build + cd build + cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 ../ - - name: Make - # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. - # For Faster Builds: Add "make" option "-j" - run: cd build && make pinetime-app + ######################################################################################### + # Make and Upload DFU Package + # pinetime-mcuboot-app.img must be flashed at address 0x8000 in the internal flash memory with OpenOCD: + # program image.bin 0x8000 - - name: Find output - run: find . -name pinetime-app.out -ls + # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. + # For Faster Builds: Add "make" option "-j" - - name: Upload built firmware + - name: Make pinetime-mcuboot-app + run: | + cd build + make pinetime-mcuboot-app + + - name: Create firmware image + run: | + ${{ runner.temp }}/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header build/src/pinetime-mcuboot-app.bin build/src/pinetime-mcuboot-app-img.bin + ${{ runner.temp }}/mcuboot/scripts/imgtool.py verify build/src/pinetime-mcuboot-app-img.bin + + - name: Create DFU package + run: | + ~/.local/bin/adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/src/pinetime-mcuboot-app-img.bin build/src/pinetime-mcuboot-app-dfu.zip + unzip -v build/src/pinetime-mcuboot-app-dfu.zip + # Unzip the package because Upload Artifact will zip up the files + unzip build/src/pinetime-mcuboot-app-dfu.zip -d build/src/pinetime-mcuboot-app-dfu + + - name: Upload DFU package + uses: actions/upload-artifact@v2 + with: + name: pinetime-mcuboot-app-dfu.zip + path: build/src/pinetime-mcuboot-app-dfu/* + + ######################################################################################### + # Make and Upload Standalone Firmware + + - name: Make pinetime-app + run: | + cd build + make pinetime-app + + - name: Upload standalone firmware uses: actions/upload-artifact@v2 with: - # Artifact name (optional) name: pinetime-app.out - # A file, directory or wildcard pattern that describes what to upload path: build/src/pinetime-app.out + + ######################################################################################### + # Finish + + - name: Find output + run: | + find . -name "pinetime-app.*" -ls + find . -name "pinetime-mcuboot-app.*" -ls # Embedded Arm Toolchain and nRF5 SDK will only be cached if the build succeeds. # So make sure that the first build always succeeds, e.g. comment out the "Make" step.