Summary
English
AI-Assisted Zephyr RTOS Development Environment Setup
Successfully set up a Zephyr development environment for STM32 Nucleo-L433RC-P board on Linux ARM64 (Ubuntu on Parallels) with Kiro CLI assistance. Despite working in an officially unsupported environment, multiple technical challenges were efficiently resolved through Kiro's support.
Key challenges and solutions:
- Kiro IDE incompatible with ARM64 → Used VSCode + Kiro CLI alternative
- Workspace initialization trust error with Zephyr IDE → Kiro identified root causes and suggested manual venv creation
- Flash runner compatibility issue (openocd-stm32 unsupported) → Kiro recommended switching to standard openocd runner and automatically modified configuration files
The environment setup, which typically requires advanced technical knowledge, was completed quickly thanks to Kiro's accurate error analysis and command execution support. Future enhancement through Steering/Specs/Skills features to provide IoT/hardware domain knowledge is expected to expand Kiro's utility further.
日本語
Zephyr RTOS開発環境構築におけるAI支援の実践
Linux ARM64環境(Parallels上のUbuntu)でSTM32 Nucleo-L433RC-PボードのZephyr開発環境を構築する過程で、Kiro CLIを活用した。公式サポート外の環境であったため、複数の技術的課題に直面したが、Kiroの支援により効率的に解決できた。
主な課題と解決:
- Kiro IDEがARM64非対応のため、VSCode + Kiro CLIで代替
- Zephyr IDEによるワークスペース初期化時の信頼設定エラー → Kiroが原因を特定し、手動での仮想環境作成を提案
- フラッシュランナーの互換性問題(openocd-stm32非対応)→ Kiroが標準のopenocdランナーへの切り替えを提案し、設定ファイルも自動修正
結果として、通常は高度な知識が必要な環境構築を、Kiroの的確なエラー解析とコマンド実行支援により短時間で完了。今後、Steering/Specs/Skills等の機能でIoT/ハード
ウェア知識を追加することで、さらなる活用が期待できる。
はじめに
生成AIは我々(ハード寄りの開発者)の味方か?
世は空前の生成AIブームです。キラキラしたWebアプリとかだと「素人が生成AIでアプリを半日で開発!」のような記事が溢れかえっていますが、ことIoT分野、特にハードウェアが絡む部分の開発で生成AIが活躍しているという話はとんと耳にしません。
そこで、お堅いハードウェア寄りのIoT開発に生成AI、中でもkiroがどこまで使えるか試してみました。
Part 1. Nucleo-L433RC-PをZephyrで動かしてみる
準備
kiro IDE
うちでは様々な理由から開発マシンにMacを使っており、事実上CPUはARM64系となっています。これまた様々な理由から実際の開発環境はできるかぎり仮想環境上に構築するようにしており、実務的にはParallels上でubuntu for arm64を走らせています。
ここで問題になるのが互換性です。Apple Silicom Macでは多くのアプリが動作するのですが、これはRosetta 2(AMD64エミュレータ)のサポートにより実現されており、仮想ubuntu環境ではこの恩恵にあずかることができません。Parallelsの機能としてはRosetta 2サポート付きの仮想環境も構築できるようですが、充分に評価できていないので実戦投入はできていません。
kiro IDEの場合、ドキュメントには
System Requirements
Kiro is available for macOS, Windows, and Linux.
On macOS, Kiro runs on both Intel and Apple silicon with the latest security updates.
On Windows, Kiro supports Windows 10 and 11 (64-bit only). ARM is not currently supported.
On Linux, Kiro requires glibc 2.39 or higher. For example Ubuntu 24+, Debian 13+, Fedora 40+, Arch Linux, and Linux Mint 22+.
と書かれており、Linux環境におけるCPUアーキテクチャの指定はありません。そこで淡い期待を胸にインストーラをダウンロードすると kiro-ide-0.10.32-stable-linux-x64.tar.gz というファイル名になっています。とてもarm64で動作するとは思えません。無理矢理インストールしてみましたが、もちろん動作しませんでした。
kiro CLI
そこで、原点(?)に立ち返ってVSCode + kiro-cliで環境構築を行いました。kiro-cli、VSCodeはいずれもLinux on ARM64をサポートしており、通常のルートからダウンロード、インストールが可能です。
kiro cli
VSCode docs for Arm64
本項の執筆時点では、それぞれ下記のバージョンがインストールされました。
$ kiro-cli --version
kiro-cli 1.26.2
$ code --version
1.109.5
072586267e68ece9a47aa43f8c108e0dcbf44622
arm64
macosのRosetta 2サポートも近々終了することがアナウンスされていますので、近い将来にはLinux on ARM64環境でも様々なツールが利用可能になるものと思われます。その場合でも、kiro-cli + VSCodeの環境はkiro IDEに容易に移行が可能と思われますので、先々問題になることはないだろうと予想しています。
Zephyr IDE
続いてZephyr IDEをインストールしていきます。VSCodeのExtension Menuから
をインストールします。完了後、左側のメニューからZephyr IDE Extensionのメニューを開きます。Zephyrに限らず、ハードウェアの開発環境は多くのツールに依存していることが多いですが、このExtensionはこれらのインストールを(おおむね)自動で行ってくれます。
Zephyr IDE Configuration ボタンを押すと
- Host Tools
- Workspace
- Zephyr SDK Management
が選択できるようになります。まずは Host Tools から必要なツールをインストールしていきます。
Host Tools
Host Tools を選択すると Required Development Tools の一覧が表示されます。ここには必要なツールとその準備状況が表示されている他、ツールごとのインストール、一括インストールなどをおこなうことができます。特に理由がなければ一括インストール Install All Missing Packages を選択するとよいでしょう。
これで自動的にツールがインストールされますが、今回の環境ではツールのインストールごとにrootパスワードを入力する必要がありました。結構時間が掛かるので辛いですが、うまく設定するとよいのかもしれません。
全てのツールがインストールされ、ステータスが Installed に変わったら作業終了のはずなのですが、今回の環境では Mark Tools as Installed を押して明示的にインストールを完了する必要がありました。
追加の作業
本来ならこれでツールのインストールは完了するはずなのですが、今回の環境では手動で追加する必要がありました。
$ sudo apt update
$ sudo apt install python3-pip python3.12-venv
Zephyrワークスペース作成
Zephyrでは開発規模などの要件に合わせていろいろな構成で開発を進めることができますが、ここでは新規の標準的なワークスペースを自動で作成することにします。Zephyr IDEのメニューから WEST WORKSPACES -> + を選択し、作成先のフォルダを選択します。ここでは ~/zephyr としましょう。
次にインストールするZephyrを選択します。ここでは Minimal Zephyr (Select Desired HALs) を選び、特定のハードウェア(本記事では STM32)向けのファイルのみをインストールすることにします。
最後にインストールするZephyrのバージョンを選択します。ここでは特に指定せず、 Default を選んで先に進めましょう。初期化の際の引数を指定することもできますが、ここでは特に必要ありません。
障害発生
ところがここで問題が発生します。
Executing task: python3 -m venv "~/zephyr/.venv"
* The terminal process failed to launch: Cannot launch a terminal process in an untrusted workspace with cwd ~/zephyr and userHome ~.
* Executing task: west init -l "~/zephyr/west-manifest"
/usr/bin/bash: 行 1: west: コマンドが見つかりません
* The terminal process "/usr/bin/bash '-c', 'west init -l "~/zephyr/west-manifest" '" failed to launch (exit code: 127).
早速kiroの力試しと行きましょう。このエラーメッセージをコピーし、kiro-cliのチャットに入力します。
> zephyr IDEのwest install時に下記のエラーが出ます。
... 上記エラーを貼り付け
> このエラーは2つの問題が発生しています:
## 1. ワークスペースの信頼設定
Cannot launch a terminal process in an untrusted workspace
VS Codeがワークスペースを信頼していないため、ターミナルプロセスを起動できません。
解決方法:
- VS Codeで Ctrl+Shift+P → "Workspace: Manage Workspace Trust" を選択
- "Trust" をクリックしてワークスペースを信頼する
## 2. westコマンドが見つからない
west: コマンドが見つかりません
仮想環境が作成される前に west コマンドが実行されようとしています。
解決方法:
bash
# 1. 仮想環境を手動で作成
cd ~/zephyr
python3 -m venv .venv
# 2. 仮想環境を有効化
source .venv/bin/activate
# 3. westをインストール
pip install west
# 4. west初期化
west init -l west-manifest
# 5. west update
west update
その後、VS Codeでワークスペースを再読み込みすれば、IDEのwest統合が正常に動作するはずです。
▸ Time: 7s
素晴らしい。適切に問題が検出されているようですね。ここではコマンドでTrustするのではなく、ワークスペース用のフォルダをVS Codeで開いてTrustする方法を選択します。ただしwestのインストールはZephyr IDEが行ってくれるため、#2の仮想環境有効化まで実行すればよいです。
Zephyr IDEのメニューから WEST WORKSPACES -> + を選択すると、今度は開いているフォルダをそのまま使用するかどうかを訊ねられますので、Use Current Folder を選択して先に進めましょう。同様に選択していくとZephyr SDKのインストールが始まりますが、すこし時間が掛かりますのでゆっくり待ちましょう。
Zephyr SDK Management
Zephyr IDE Configuration ボタンを押すと、最後に Zephyr SDK Management が選択できるようになっています。しかし上記の手順に従って進めた場合には、SDKは自動でインストールされますので、ここでの作業は特に必要ありません。実際、Zephyr SDK Management の画面でも状態が Installed になっているはずです。
プロジェクト作成
Zephyrの準備が終わりましたので、実際のハードウェアを動作させるためのプロジェクトを作成していきます。メニューの PROJECTS -> Create Project from Template に進み、定番の Blinky sample (Lチカ)を選択しましょう。
続いてビルド設定を行います。Add Build を選択し、ボードとビルド設定の指定を行います。ここではボードとして nucleo_l433rc_p、ビルド設定として Debug を選択します。ビルド引数、CMake引数は特に指定する必要はないのでEnterキーで先に進みます。
最後にランナーの設定です。ランナーとは、ビルドによって得られた実行形式ファイルをマイコンボードにアップロードし、実行するまでの手順を表すものです。Add Runnerをおして設定を行いましょう。選択肢としてこのようなものが表示されます。
- default
- stm32cubeprogrammer
- openocd-stm32
- jlink
stm32cubeprogrammer が良さそうです。
ビルド & フラッシュ
続いてビルドを行います。メニューから Build Pristine を選択します。ここまでの作業に問題がなければすぐにビルドが終了するはずです。成功したことを確認したらFlash を選択してNucleoへのアップロードを行いますが、ここで問題が発生します。
Executing task: west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r stm32cubeprogrammer
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner stm32cubeprogrammer
FATAL ERROR: required program ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32_Programmer_CLI not found; install it or add its location to PATH
* The terminal process "/usr/bin/bash '-c', 'west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r stm32cubeprogrammer '" terminated with exit code: 1.
となります。STM32CubeProgrammerがインストールされていないという問題ですね。しかし、STM32CubeProgrammerはLinux on ARM64環境ではサポートされていません。openocdなら使えるはずなので、openocd-stm32 を選択して先に進みましょう。
Executing task: west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd-stm32
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner openocd-stm32
FATAL ERROR: board nucleo_l433rc_p/stm32l433xx does not support runner openocd-stm32
To fix, configure this runner in ~/zephyr/external/zephyr/boards/st/nucleo_l433rc_p/board.cmake and rebuild.
* The terminal process "/usr/bin/bash '-c', 'west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd-stm32 '" terminated with exit code: 1.
今度は違うエラーが発生してしまいました。kiroに聞いてみます。
> 下記のエラーメッセージを解説してください。
Executing task: west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd-stm32
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner openocd-stm32
FATAL ERROR: board nucleo_l433rc_p/stm32l433xx does not support runner openocd-stm32
To fix, configure this runner in ~/zephyr/external/zephyr/boards/st/nucleo_l433rc_p/board.cmake and rebuild.
* The terminal process "/usr/bin/bash '-c', 'west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd-stm32 '" failed to launch (exit code: 1).
> このエラーは、Zephyr RTOSでnucleo_l433rc_pボードに対してopenocd-stm32ランナーを使ってフラッシュしようとしたが、そのボードがこのランナーをサポートしていな
いことを示しています。
エラーの意味:
- nucleo_l433rc_p/stm32l433xxボードの設定ファイル(board.cmake)にopenocd-stm32ランナーが定義されていない
- そのため、west flash -r openocd-stm32コマンドが実行できない
解決方法:
1. サポートされているランナーを確認:
bash
west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" --help
2. デフォルトランナーを使用:
bash
west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p"
3. 別のランナーを指定:
- STM32ボードでは通常openocd、jlink、pyocd、stm32cubeprogrammerなどが使えます
bash
west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd
openocd-stm32とopenocdの違い:
- openocd-stm32は特定のカスタム設定を持つランナー
- 標準のopenocdランナーで十分な場合が多い
まずはデフォルトランナー(オプション無し)か-r openocdを試してみてください。
▸ Time: 8s
openocd-stm32の代わりにopenocdを使えばいいようです。
> -r openocdを試してみてください。
> Zephyr環境のパスを確認させてください:
I will run the following command: find ~ -name "zephyr-env.sh" -o -name ".venv" -type d 2>/dev/null | head -5 (using tool: shell)
Purpose: Search for Zephyr environment setup files
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
6% > t
~/.venv
~/zephyr/.venv
~/zephyr/external/zephyr/zephyr-env.sh
~/Documents/zephyrproject/.venv
~/Documents/zephyrproject/external/zephyr/zephyr-env.sh
- Completed in 2.197s
I will run the following command: source ~/zephyr/.venv/bin/activate && west flash --build-dir "~/zephyr/blinky/build/nucleo_l433rc_p" -r openocd (using tool: shell)
Purpose: Activate z2 venv and run west flash with openocd runner
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner openocd
-- runners.openocd: Flashing file: ~/zephyr/blinky/build/nucleo_l433rc_p/zephyr/zephyr.hex
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : clock speed 500 kHz
Info : STLINK V2J28M18 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.260972
Info : [stm32l4x.cpu] Cortex-M4 r0p1 processor detected
Info : [stm32l4x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32l4x.cpu on 3333
Info : Listening on port 3333 for gdb connections
TargetName Type Endian TapName State
-- ------------------ ---------- ------ ------------------ ------------
0* stm32l4x.cpu hla_target little stm32l4x.cpu running
Info : Unable to match requested speed 500 kHz, using 480 kHz
Info : Unable to match requested speed 500 kHz, using 480 kHz
[stm32l4x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08000ba4 msp: 0x200011c0
Info : device idcode = 0x10016435 (STM32L43/L44xx - Rev Z : 0x1001)
Info : RDP level 0 (0xAA)
Info : flash size = 256 KiB
Info : flash mode : single-bank
Warn : Adding extra erase range, 0x080053d8 .. 0x080057ff
auto erase enabled
wrote 21464 bytes from file ~/zephyr/blinky/build/nucleo_l433rc_p/zephyr/zephyr.hex in 0.641442s (32.678 KiB/s)
Info : Unable to match requested speed 500 kHz, using 480 kHz
Info : Unable to match requested speed 500 kHz, using 480 kHz
shutdown command invoked
- Completed in 1.409s
> 成功しました!-r openocdでフラッシュが完了しました。
結果:
- STM32L433RCマイコンが検出されました
- 21,464バイトのファームウェアが書き込まれました
- フラッシュ速度: 32.678 KiB/s
ボードでblinkyアプリケーションが動作しているはずです。
▸ Time: 20s
正常にフラッシュが実行されました。次回以降もフラッシュが成功するよう、設定ファイルも修正しておきます。
> zephyr ideの設定を変更し、openocd-stm32の代わりにopenocdが使用されるようにしてください
> Zephyr IDEの設定ファイルを探します:
Reading directory: ~/zephyr/.vscode (using tool: read, max depth: 0, max entries: 1000, excluding: defaults)
✓ Successfully read directory ~/zephyr/.vscode (4 entries)
- Completed in 0.2s
Reading file: ~/zephyr/.vscode/zephyr-ide.json, all lines (using tool: read)
✓ Successfully read 1103 bytes from ~/zephyr/.vscode/zephyr-ide.json
- Completed in 0.0s
I'll modify the following file: .vscode/zephyr-ide.json (using tool: write)
Purpose: Replace openocd-stm32 runner with openocd in Zephyr IDE config
- 25 : "openocd-stm32": {
- 26 : "runner": "openocd-stm32",
- 27 : "name": "openocd-stm32",
+ 25: "openocd": {
+ 26: "runner": "openocd",
+ 27: "name": "openocd",
28, 28: "args": ""
29, 29: }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
7% > t
Updating: .vscode/zephyr-ide.json
- Completed in 0.0s
> 完了しました。.vscode/zephyr-ide.jsonの設定を変更し、openocd-stm32をopenocdに置き換えました。
これでZephyr IDE拡張機能から実行するフラッシュコマンドがopenocdランナーを使用するようになります。
▸ Time: 17s
最後に、Zephyr IDEのフラッシュボタンで正常に書き込みができることを確認して作業完了となりました。
まとめ
今回、公式にはサポートされていないLinux on ARM64でZephyrの開発環境を立ち上げるという作業をkiroの支援のもと実施しました。かなり難易度の高いタスクであり、自力で行おうとするとそれなりの実力が要求されるものかと思いますが、kiroの的確なサポートにより大きな苦労なく環境構築することができました。
今回使用したkiroは特別な設定を行っていない、いわば素の状態です。kiroにはSteering、Specs、SkillsやPowersといった強力なサポート機能がありますので、これらを上手く利用してIoT、ハードウェアなどに関する知識を与えてやることで活躍の場が大きく広がるという実感が得られました。
次回以降は、この環境を利用して実際のIoT開発を行っていきます。
Top comments (0)