1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker対応】VS Code + Zephyr RTOS + micro:bit 開発環境構築ガイド

Posted at

はじめに

Windows 11 + WSL2 + Docker 環境の Visual Studio Code (以下、VS Code) で、 Zephyr RTOS を使った micro:bit v1/v2 向けのアプリケーションを開発するためのセットアップガイドです。
usbipd-win を通じて USB デバイス(micro:bit)を Docker Desktop の WSL2コンテナ に接続でき、CMSIS-DAP を使った フラッシュデバッグ にも対応しています。

過去の記事では、Windows上に開発環境を構築しましたが、今回の記事では、Docker Desktop fow Windows を用いたコンテナ化された開発環境を紹介しています。
USBデバイスの認識は、usbipd-winを利用しています。

過去の記事

Zephyr RTOS を micro:bit で学ぶ

この開発環境は、リアルタイムOSの学習に最適です。
低価格で入手可能な micro:bit を使って、RTOSの概念を実践的に体験できます:

  • スレッド管理
  • スケジューリング
  • ハードウェア抽象化レイヤー(HAL)
  • デバイスツリーと Kconfig

しかも、すべてが コンテナ化された開発環境で動作するため、ホスト環境(Windows11)に依存せず再現性も高く、初心者から上級者まで快適に使える構成です。

対象環境

コンポーネント 内容
RTOS Zephyr RTOS
対応ボード bbc_microbit(v1)、bbc_microbit_v2(v2)
OS Windows 11 + WSL2
IDE VS Code (Visual Studio Code)
コンテナランタイム Docker Desktop for Windows
USB ブリッジ usbipd-win
デバッグプローブ CMSIS-DAP(micro:bit内蔵)

micro:bitには、DAPLinkというソフトウエアがあらかじめ書き込まれています。
これをファームウェアと呼んでおり、USB接続するとUSBストレージとして認識されるようになっています。
DAPLinkには、USBストレージだけでなく、シリアル通信CMSIS-DAPWebUSBといった機能も含まれています。

DAPLinkとUSBインターフェース

セットアップ手順

1. 必要なツールのインストール(Windows側)

Windows11上で、次のツールをインストールします。

2. プロジェクトの取得方法

次の GitHub リポジトリを使って、開発環境をすぐに構築できます。

🔗 https://github.com/jp-rad/vscode-zephyr-ubit

プロジェクトを VS Code で開き、Dev Container に接続することで、すぐに開発を開始できます。

方法1:リポジトリをクローンする

git clone https://github.com/jp-rad/vscode-zephyr-ubit.git
cd vscode-zephyr-ubit

方法2:テンプレートとして新規プロジェクトを作成する

GitHubの jp-rad/vscode-zephyr-ubit 内で、「Use this template」ボタンをクリックし、自分のリポジトリとしてプロジェクトを生成し、それをクローンします。

おすすめ
方法2なら、オリジナルの履歴を持たずにクリーンな状態で始められ、自分のプロジェクトとして管理できます。

開発手順

VS Codeでコンテナを開く

VS Codeで、プロジェクトを開き、Reopen in Containerで、コンテナを開きます。
初回は、Dockerfileのビルドが実行されます。

「すぐに開発を開始できます」と書きましたが、/home/vscodeフォルダだけでも、9.1Gのファイルが構築されますので、Dockerfileのビルドが完了するのを気長にお待ちください。

コマンド
du -sh /home/vscode
確認結果
vscode ➜ ~ $ du -sh /home/vscode
9.1G    /home/vscode

サンプルプログラムのビルド

プロジェクトには、micro:bitディスプレイのデモンストレーション・サンプルコードが含まれていますので、VS Codeのメニューから次の手順で、ビルドを実行します。

Terminal → Run Build Task… → Generate micro:bit universal hex

ビルドに成功すると、3つのHEXファイルがプロジェクトのルートフォルダに生成されます。
このHEXファイルをUSB接続したmicro:bitのUSBストレージにコピーするとmicro:bit本体で実行されます。

  • microbit-v1.hex - v1専用
  • microbit-v2.hex - v2専用
  • microbit-universal.hex - v1/v2両用

デバッグ手順(CMSIS-DAP)

CMSIS-DAP経由で、フラッシュ(書き込み)やデバッグを実行することができます。

CMSIS-DAP接続に失敗する場合
CMSIS-DAP接続に失敗する場合、micro:bitへのフラッシュやデバッグができません。micro:bit firmwareのページを参照し、ファームウェアの更新を試みてください。

ファームウェア(firmware)

USB デバイスのバインド(Windows側)

  1. micro:bit を USB 接続
  2. 管理者権限でコマンドプロンプトを開く
  3. コマンドusbipd listでデバイスを確認
  4. VID:PID = 0d28:0204 の micro:bit を探し、BUSID を取得
  5. コマンドusbipd bind --busid <BUSID>でバインド

コマンドプロンプトは、「管理者として実行」で開いてください。

(管理者)
usbipd list
(管理者)
usbipd bind --busid <BUSID>

<BUSID>は、usbipd listで探したBUSIDに置き換えてください。

USB デバイスのアタッチ(Windows側)

micro:bitをUSB接続するたびに、WSL2 に対してデバイスをアタッチする必要があります。
Windows 側でバッチファイルmicrobit_attach.batを実行してください。

microbit_attach.bat

これにより、CMSIS-DAP 経由で WSL2 コンテナから micro:bit にアクセス可能となります。

開発環境(Docker) → WSL2コンテナ → Windows OS → USB接続 → micro:bit

micro:bitをUSB接続するたびにmicrobit_attach.batを実行し、USBデバイスをアタッチしてください。
尚、USBバインドは、一度実行するだけでよく、Windowsを再起動しても、バインドされたままの状態になります。

ビルドとフラッシュ

VS Codeのメニューから次の手順で、ビルド(コンパイル)とフラッシュ(書き込み)を一括実行できます。

Terminal → Run Build Task… → Build and Flash

microbit-toolchain.shが、接続されているmicro:bitのv1/v2を自動選択し、 west build / west flash を実行します。

デバッグ(GDB)

VS Code のデバッグビューから、(GDB) micro:bitを選択し、開始ボタンでデバッグを開始します。

Run and Debug(Ctrl + Shift + D)→ (GDB) micro:bit

ブレークポイントの設定やステップ実行が可能です。


構成ファイルの説明

Dockerfile の構成

このプロジェクトの Dockerfile は、Zephyr SDK と micro:bit 開発に必要なツールをすべて含んだ Dev Container を構築します。

主なポイント:

  • Python ベースの Dev Container イメージを使用
  • Zephyr SDK の依存パッケージをインストール
  • west による Zephyr プロジェクトの初期化
  • CMake のバージョン固定インストール(例:4.0.3)
  • Zephyr のマニフェスト・リビジョン固定インストール(例:v4.1.0)
  • Node.js + microbit-universal-hex の導入
  • WSL2 で USB デバイスにアクセスするための usbutils の導入
(抜粋)マニフェスト・リビジョンの固定
RUN west init --mr ${MANIFEST_REVISION} && west update && west zephyr-export

docker-compose.yml の構成

  • バージョン固定
    Python(VARIANT)、CMake(CMAKE_VERSION)、Zephyr(MANIFEST_REVISION)を引数で指定

  • USB デバイスアクセス対応
    /dev/bus/usb をマウントし、privileged: true により CMSIS-DAP 経由のフラッシュとデバッグに対応

docker-compose.yml

version: '2'
services:
  dev:
    image: "zephyr-ubit:v4.1.0"
    build:
      context: "."
      dockerfile: ./dev/Dockerfile
      args:
        VARIANT: "3.13"
        CMAKE_VERSION: "4.0.3"
        MANIFEST_REVISION: "v4.1.0"
    volumes:
      - ..:/home/vscode/zephyr/dev/zephyrproject:cached
      - ./dev/.vscode:/home/vscode/zephyr/dev/.vscode:cached
      - /dev/bus/usb:/dev/bus/usb
    devices:
      - /dev/bus/usb:/dev/bus/usb
    privileged: true
    tty: true
    command: bash

USBデバイスのマウント
/dev/bus/usb:/dev/bus/usbの指定は、volumesdevicesの両方に行います。
また、privileged: trueが必要です。

VS Code Dev Container の構成(devcontainer.json)

  • docker-compose.ymldev サービスに接続
  • Zephyr 開発に必要な拡張機能を自動インストール
  • ワークスペースは /home/vscode/zephyr/dev に固定
devcontainer.json
{
	"name": "development",
	"dockerComposeFile": [
		"docker-compose.yml"
	],
	"service": "dev",
	"workspaceFolder": "/home/vscode/zephyr/dev",
	"customizations": {
		"vscode": {
			"settings": {
			},
			"extensions": [
				"ms-vscode.cpptools-extension-pack"
			]
		}
	},
	"remoteUser": "vscode"
}

microbit-toolchain.sh の解説

コンテナ化された開発環境には、scripts/microbit-toolchain.shスクリプトが含まれており、3つの操作を統合しています:

  • build: Zephyr アプリケーションのビルド
  • flash: CMSIS-DAP 経由で micro:bit に書き込み
  • debugserver: GDB デバッグサーバーの起動

USB 権限の設定

Windows上でバインド、アタッチされたUSBデバイスにアクセスするため、開発環境のvscodeユーザーに権限を設定します。

lsusb → /dev/bus/usb → chmod 666

ボードの自動判定

USB 接続された micro:bit を pyocd で判定し、v1/v2 を自動選択します。

pyocd list | grep "nrf51" → bbc_microbit  
pyocd list | grep "nrf52" → bbc_microbit_v2

VS Code タスク定義(tasks.json)

個別ビルドタスク

v1/v2 向けに個別ビルドタスクを定義。

{
  "label": "(internal) build bbc_microbit",
  "command": "scripts/microbit-toolchain.sh",
  "args": ["build", "bbc_microbit"]
}

HEX ファイルの統合

v1/v2 の HEX を統合し、microbit-universal.hex を生成します。

{
  "label": "Generate micro:bit universal hex",
  "dependsOn": [
    "(internal) build bbc_microbit",
    "(internal) copy bbc_microbit.hex",
    "(internal) build bbc_microbit_v2",
    "(internal) copy bbc_microbit_v2.hex",
    "(internal) micro:bit universal hex"
  ]
}

ビルド・フラッシュタスク

ボードを自動判定し、ビルドとフラッシュを一括実行します。

{
  "label": "Build and Flash",
  "dependsOn": ["(internal) build", "(internal) flash"]
}

おわりに

このセットアップにより、Windows + WSL2 + Docker + VS Code というコンテナ化された開発環境で、Zephyr RTOS を使ったmicro:bitアプリケーションの開発が簡単に始められます。
CMSIS-DAP によるデバッグや universal HEX の生成もスクリプト化されており、初心者から上級者まで快適に使える構成です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?