Zephyr SDK (v2.8.0) を使って nRF52 向けファームウェア開発を進める中で、Apple Silicon Mac によるビルド停止・ハング問題に悩まされました。この記事では、その原因と対策、そして Dockerを使って安定してビルドする手順 をすべて共有します。
システム情報
- MacBook Pro M2 (Apple Silicon)
- nRF52832 / nrf52dk
- nRF Connect SDK v2.8.0
- Zephyr SDK v0.16.3
- Docker Desktop v25.0.2 (GUI バージョン)
発生した問題
west build で止まる
-- Found GnuLd: ld.bfd
このメッセージの直後で west build が停止し、プロンプトが返ってこなくなる現象が発生する。これは、Apple Silicon 環境が Zephyr SDK に正式対応していないことが原因と考えられる。
解決策: Dockerを使ってビルド
1. Dockerが使えるか確認
docker --version
# Docker version 25.0.2, build 29cf629
使えない場合は Docker Desktop を開き、Preferences > Resources > File Sharing
で /Users/<yourname>
を指定することで CLI でも利用可能になります。
2. Dockerイメージ(nordic)のダウンロード
docker pull nordicplayground/nrfconnect-sdk:v2.9-branch
3. Dockerでビルド実行
docker run --rm -it \
-v $HOME/nordic/v2.8.0:/workdir \
-w /workdir/emg_sensor_firmware \
nordicplayground/nrfconnect-sdk:v2.9-branch \
west build -b nrf52dk/nrf52832 --pristine=always -- -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
4. HEXファイルの作成を確認
ls -lh ~/nordic/v2.8.0/emg_sensor_firmware/build/emg_sensor_firmware/zephyr/zephyr.hex
実機へ書き込み
nrfjprog --eraseall
nrfjprog --program ~/nordic/v2.8.0/emg_sensor_firmware/build/emg_sensor_firmware/zephyr/zephyr.hex --chiperase --verify --reset
ビルド成功ログ一部
Memory region Used Size Region Size %age Used
FLASH: 18526 B 512 KB 3.53%
RAM: 5632 B 64 KB 8.59%
IDT_LIST: 0 GB 32 KB 0.00%
[10/10] Generating ../merged.hex
ポイント
- Apple Silicon 環境で Zephyr SDK を使うと、
ld.bfd
でビルド停止することがある - Docker の SDK イメージを使えば、依存性と対応バージョンに問題なくビルド可能
- VS Code ではなく CLI/ターミナル での実行が安定
おわりに
Apple Silicon で Zephyr SDK を利用するのは現状体験としてハードルが高く、官方Dockerイメージを利用するのが最も確実な手段でした。