14.1.1.2. ファームウェアのビルド¶
開発環境のセットアップ で説明した環境が整っていれば、ファームウェアイメージのビルドは2つの make コマンドと TARGET の選択だけです。
14.1.1.2.1. コンパイル¶
まずmpy-crossをビルドします。これは、フリーズされた .py モジュールをバイトコードにコンパイルするホストツールです(これは一度だけ行い、MicroPythonを更新するたびに再度行います):
make -j$(nproc) -C lib/micropython/mpy-cross
次に、ボード用のファームウェアをビルドします。<TARGET> は下の表の名前のいずれかです:
make -j$(nproc) TARGET=<TARGET>
-j$(nproc) はすべてのCPUコアにわたって並列にビルドします(macOSでは -j$(sysctl -n hw.ncpu) を使用します)。TARGET は必須です。ターゲットを指定せずに make を実行すると "Invalid or no TARGET specified" で中断します。
最初から最後までの完全な初回ビルド:
make sdk
make -j$(nproc) -C lib/micropython/mpy-cross
make -j$(nproc) TARGET=OPENMV4
14.1.1.2.1.1. サポートされているボード¶
TARGET の値は boards/ 配下のディレクトリ名です。カメラとそのシリコンは次のとおりです:
カメラ |
|
MCU |
ポート |
コア |
|---|---|---|---|---|
OpenMV Cam M4 |
|
STM32F427 |
stm32 |
Cortex-M4 |
OpenMV Cam M7 |
|
STM32F765 |
stm32 |
Cortex-M7 |
OpenMV Cam H7 |
|
STM32H743 |
stm32 |
Cortex-M7 |
OpenMV Cam H7 Plus |
|
STM32H743 + SDRAM |
stm32 |
Cortex-M7 |
OpenMV Pure Thermal |
|
STM32H743 + SDRAM |
stm32 |
Cortex-M7 |
OpenMV Cam N6 |
|
STM32N657 |
stm32 |
Cortex-M55 |
OpenMV Cam RT1062 |
|
MIMXRT1062 |
mimxrt |
Cortex-M7 |
OpenMV AE3 |
|
Alif Ensemble (dual M55) |
alif |
Cortex-M55 |
Arduino Portenta H7 |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Giga |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Nicla Vision |
|
STM32H747 |
stm32 |
Cortex-M7 |
Arduino Nano 33 BLE Sense |
|
nRF52840 |
nrf |
Cortex-M4 |
Arduino Nano RP2040 Connect |
|
RP2040 |
rp2 |
Cortex-M0+ |
ご使用のハードウェアに対応する正確な TARGET をビルドしてください。例えば、OpenMV Cam H7 には OPENMV4、H7 Plus には OPENMV4P、N6 には OPENMV_N6 です。
14.1.1.2.1.2. ビルド出力¶
ボードに関するすべては build/<TARGET>/bin/ に出力されます。TARGET=OPENMV4 の場合は build/OPENMV4/bin/ で、以下を含みます:
ファイル |
その内容 |
|---|---|
|
ファームウェアバイナリ -- OpenMV IDE の Tools -> Load Custom Firmware や |
|
デバッグシンボル付きのファームウェア -- デバッガに指定するファイル |
|
ブートローダー(ブートローダーが有効なボードのみ) |
|
ブートローダーとファームウェアを結合したイメージ |
|
ファームウェアと共にフラッシュされる読み取り専用ROMファイルシステムイメージ |
Alif AE3 はデュアルコアなので、firmware_M55_HP.elf / firmware_M55_HP.bin(高性能コア)と、別個の firmware_M55_HE.elf / firmware_M55_HE.bin(高効率コア)に加えて、各コアのイメージがどこにあるかをブートROMに伝える目次(TOC)イメージを生成します。
14.1.1.2.1.3. クリーンと再ビルド¶
ビルドは build/<TARGET>/ 配下でボードごとに分離されています。1つのボードのビルドを消去するには:
make TARGET=<TARGET> clean
distclean はありません。clean には常に TARGET が必要です。mpy-cross はボード間で共有されます。MicroPythonを更新した場合は、これも再ビルドしてください:
make -C lib/micropython/mpy-cross clean
make -j$(nproc) -C lib/micropython/mpy-cross
ビルドのフラッシュ/RAM使用量を報告するには:
make TARGET=<TARGET> size
14.1.1.2.1.4. Docker でのビルド(ホストツールチェーン不要)¶
ホストに何もインストールしたくない場合(またはネイティブビルドができないプラットフォームを使用している場合)は、Docker のパスを使用します:
git clone --recursive https://github.com/openmv/openmv.git
cd openmv/docker
make TARGET=<TARGET>
成果物は openmv/docker/build/<TARGET> に現れます。繰り返しビルドする場合には、リポジトリをホスト上と同じ絶対パスでコンテナ内にマウントするインクリメンタルな開発用パスがあり、リマッピングなしでデバッガのソースパスが解決されます:
make install-sdk
make build-firmware-dev TARGET=<TARGET>
TARGET を切り替える際には make clean-dev を実行してください。
14.1.1.2.2. ビルドオプション¶
ビルドの動作は、make コマンドラインで渡される変数によって制御されます。例えば:
make -j$(nproc) TARGET=OPENMV4 DEBUG=1 V=1
ファームウェア開発者が使用する変数:
変数 |
デフォルト |
効果 |
|---|---|---|
|
(必須) |
ビルドするボード。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注釈
さらに多くの変数が存在します(カメラ/センサードライバ、ワイヤレススタック、MLバックエンド、USBスタック、セキュアブートなど)が、それらはボードごとに boards/<TARGET>/board_config.mk で設定されており、通常はコマンドラインで上書きされません。それらを変更することはボードのカスタマイズであり、通常の開発者のビルドではありません。ファームウェアリポジトリの docs/boards.md を参照してください。
日常的な作業で必要なオプションは、TARGET(常に)、DEBUG=1(デバッグするつもりの場合は常に。ファームウェアのデバッグ を参照)、そして時折 V=1 だけです。