GiitHub Action에서 nRF52 펌웨어 구축

개요


GiitHub Action에서 nRF52 펌웨어(FW)를 구축하는 방법을 소개합니다.
GiitHub Actions에 공개된 동작 중 nRF52가 사용되지 않기 때문에 구축용 Docker 이미지를 만들어 GiitHub Actions에서 활용하는 방법을 사용했다.

1. Mac의 명령선에서 nRF52의 FW 구축


우선 손 옆에 있는 맥이 FW를 구축할 수 있는지 확인하세요.
nRF52 개발 환경인 Segger Embeded Studio의 emBuild 명령을 사용합니다.
$ emBuild -config "Release" nrf52_fw_app.emProject
지령으로 구축할 수 있다면 나머지는 이것을 Docker에 가져가는 것만으로도 가볍다(이럴 줄 알았는데 여기서부터 길다
참조: Building with a SEGGER Embedded Studio project file

2. Docker file을 써서 FW빌딩용 Docker 이미지 만들기


FW 구문을 확장하는 데 필요한 명령을 Docker file에 쓰려면 다음과 같이 하십시오.

FW 구축에 필요한

  • Python3
  • nRF Util
  • Nordic Command Line tools
  • GCC
  • Segger Embedded Studio
  • nRF5 SDK
  • Dockerfile

    FROM ubuntu:latest
    
    ARG GCC_ARM_VER=gcc-arm-none-eabi-8-2019-q3-update
    RUN apt-get update && \
        apt-get install -y libx11-6 libfreetype6 libxrender1 libfontconfig1 libxext6 xvfb curl bzip2 unzip python python3-pip git zip
    
    # nRF Util
    RUN pip3 install nrfutil
    
    # Nordic Command Line tools
    RUN curl https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/desktop-software/nrf-command-line-tools/sw/versions-10-x-x/10-15-1/nrf-command-line-tools-10.15.1_linux-amd64.zip -o nrf-command-line-tools.zip && \
        unzip nrf-command-line-tools.zip && \
        tar -zxvf nrf-command-line-tools-10.15.1_Linux-amd64.tar.gz && \
        rm nrf-command-line-tools.zip
    
    # GCC
    RUN curl -L https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2019q3/RC1.1/${GCC_ARM_VER}-linux.tar.bz2?revision=c34d758a-be0c-476e-a2de-af8c6e16a8a2?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,8-2019-q3-update -o ${GCC_ARM_VER}.tar.bz2 && \
        tar -xvjf ${GCC_ARM_VER}.tar.bz2 && rm ${GCC_ARM_VER}.tar.bz2 
    ENV PATH="/${GCC_ARM_VER}/bin:/nrf-command-line-tools/bin:$PATH"
    
    # Segger Embedded Studio
    RUN curl -L https://www.segger.com/downloads/embedded-studio/Setup_EmbeddedStudio_ARM_v568_linux_x64.tar.gz -o ses.tar.gz && \
        tar -zxvf ses.tar.gz && \
        $(find arm_segger_* -name "install_segger*") --copy-files-to /ses  --accept-license && \
        rm ses.tar.gz && \
        rm -rf arm_segger_embedded_studio_*
    ENV PATH=$PATH:/ses/bin
    
    # nRF5 SDK
    RUN curl https://www.nordicsemi.com/-/media/Software-and-other-downloads/SDKs/nRF5/Binaries/nRF5SDK1702d674dde.zip -o nRF5_SDK_17.0.2.zip && unzip -d nRF5_SDK_17.0.2 nRF5_SDK_17.0.2.zip && rm nRF5_SDK_17.0.2.zip
    RUN printf "GNU_INSTALL_ROOT ?= /${GCC_ARM_VER}/bin/\nGNU_VERSION ?= 8.3.1\nGNU_PREFIX ?= arm-none-eabi\n" > /nRF5_SDK_17.0.2/nRF5_SDK_17.0.2_d674dde/components/toolchain/gcc/Makefile.posix
    

    Docker build


    Docker 이미지를 만듭니다.환경에 따라 이미지를 만드는 데 시간이 걸린다.
    내 환경에서 20~30분 정도 걸렸다.
    $ docker build ./ -t nrf52
    

    3. Docker 컨테이너에서 동작 확인


    구문된 Docker 이미지를 시작하고 시작할 수 있습니다.
    컨테이너의 의도대로 Docker 이미지를 만들지 여부를 확인합니다.
    # Dockerコンテナを起動して中に入ってみる
    $ docker run -it nrf52 bin/bash
    
    # Dockerコンテナ上にemBuildコマンドが入っていることを確認
    $ which emBuild
    /ses/bin/emBuild
    
    # ビルドコマンドが使えることを確認
    $ emBuild 
    SEGGER Embedded Studio for ARM emBuild - Release 5.68
    Copyright (c) 2014-2021 SEGGER Microcontroller GmbH
    Copyright (c) 1997-2021 Rowley Associates Ltd.
    

    4. Docker 이미지를 Docker Hub로 밀기


    GiitHub Actions에서 Docker 이미지를 사용할 수 있도록 이미지를 Docker Hub로 밀어냅니다.
    # Dockerにログインする
    $ docker login
    
    # Docker Hubにイメージをプッシュする
    $ docker push acctoun_name/repository_name:latest
    
    ※ Docker Hub은 호스트 Docker 이미지의 서비스입니다.
    ※ 사전에 Docker Hub에 계정을 만들고 창고에 등록해야 합니다.

    5. GiitHub Action 을 쓴 YAML


    드디어 GiitHub Actions입니다.원본이 확장 가능한 위치로 밀어붙일 때 자동으로 구축을 실행할 수 있습니다.포인트는 Docker Hub로 밀린 컨테이너를 사용하는 곳이다.
    name: emBuild
    
    on:
      pull_request:
        types: [opened, synchronize]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        timeout-minutes: 10
        # Docker Hubにプッシュしたコンテナを使用する
        container:
          image: account_name/nrf52:latest
        steps:
          # ビルド対象のソースコードをチェックアウトする
          - uses: actions/checkout@v2
    
          # FWのビルドを実行
          - name: emBuild
            run: emBuild -config "Release" nrf52_app.emProject
            working-directory: ./nrf52_app/ble_peripheral/project/pca10040/s132/ses
    
          # ビルドの成果物(HEX)をアップロードする
          - name: Upload HEX file
            uses: actions/upload-artifact@v2
            with:
              name: nrf52_app.hex
              path: nrf52_app/ble_peripheral/project/pca10040/s132/ses/Output/Release/Exe/nrf52_app.hex
              retention-days: 90
    

    실행 결과


    GiitHub Action에 FW 구축

    컨디션

  • Macbook pro Big Sur 11.5.2
  • Nordic Semiconductor nRF52 시리즈
  • nRF5 SDK ver 17.0.2
  • Segger Embedded Studio V5.68
  • Docker Desktop for Mac 4.3.2
  • Docker Hub
  • GitHub Actions
  • 좋은 웹페이지 즐겨찾기