Zephyr RTOS¶
IPRO SDK は Zephyr v4.4.0 のモジュールでもあります。SDK の HAL と SoC ドライバーが Zephyr のデバイスドライバー API の背後にあるため、FreeRTOS の代わりに Zephyr でアプリケーションを作成できます。このページは Zephyr 側のリファレンスで、ボード、ワークスペース、west によるビルドと書き込み、サンプル、制限事項を扱います。FreeRTOS アプリケーションとそのビルドは変わりません。
要点
- ボード:
ipro7_evb(IPRO7 EVB)とipro7ai_evk(IPRO7AI EVK)。V2.2.1 には IPRO7AI Reef EVK 用の Zephyr ボード定義がありません。Reef では FreeRTOS アプリケーションを使用してください。 - 利用できるもの:一般的な周辺機能のドライバー、BLE(ビルド済みの IPRO BLE コントローラー上の Zephyr ホスト)、OpenThread を使う IEEE 802.15.4、MCUboot と BLE 経由の MCUmgr による更新。
- 利用できないもの:低消費電力モード、カメラ、オーディオコーデック、USB、SD ホスト、イーサネット、NPU の Zephyr ドライバー。
- コンソール:UART0、2,000,000 baud。ホストに必要なもの:venv を使える Python 3、git、GitHub へのネットワークアクセス、CMake 3.20 以降。
- 最初のビルド:ワークスペース、次にビルド、書き込み、コンソール。
概要¶
| ファイル/ディレクトリ | 役割 |
|---|---|
west.yml |
SDK は west のマニフェストリポジトリです。Zephyr v4.4.0 を固定し、許可リストにあるモジュールだけをインポートします |
zephyr/module.yml |
SDK を Zephyr モジュールとして、ボード、SoC、devicetree バインディング、west flash のランナーとともに登録します |
zephyr/boards/、soc/、dts/ |
ボード定義、SoC 定義、devicetree バインディング |
zephyr/drivers/、hal_glue/、include/ |
Zephyr ドライバーと、SDK の HAL とのグルーコード |
zephyr/patches.yml、patches/ |
SDK による Zephyr への 2 つのパッチ。ワークスペースの作成時に適用されます |
zephyr/samples/、zephyr/tests/ |
SDK のサンプルとテストスイート |
tools/zephyr/ |
ワークスペースの作成、ビルド、書き込み、コンソールを開くためのスクリプト |
Zephyr ドライバーは SDK の HAL を呼び出し、HAL は bsp/ から直接コンパイルされます。BLE は Zephyr のホストと IPRO BLE コントローラーのアーカイブを使います。IEEE 802.15.4 は Zephyr のドライバーインターフェースと OpenThread を使います。
対応ボード¶
| Zephyr ボード | ハードウェア | Flash(devicetree) | PSRAM | west flash のデフォルト |
|---|---|---|---|---|
ipro7_evb |
IPRO7 EVB | 2 MB | なし | --pt=partition_cfg_2M.toml、IPRO7 CMSIS-DAP プローブ経由でダウンロードモード |
ipro7ai_evk |
IPRO7AI EVK | 1 MB | 8 MB | --pt=partition_cfg_1M_boot2.toml、--boot=shell |
- どちらのボードも、コンソールは UART0、2,000,000 baud です。
- パーティションテーブルの名前は、IntelProCube の
chips/ipro7/partition/以下のファイルを指します。 ipro6s_evbのボードファイルは SDK に同梱されていますが、本リリースでは IPRO6S は Zephyr でサポートされていません。
IPRO7AI Reef EVK
V2.2.1 には Reef 用の Zephyr ボードも、Reef のカメラ、オーディオ、LED、microSD ソケットの devicetree もありません。本リリースでは、Reef での Zephyr イメージの動作は検証されていません。Reef で Zephyr が必要な場合は、INTELPRO にお問い合わせください。
ワークスペース¶
tools/zephyr/bootstrap.sh は SDK ルートに zephyr-workspace/ を作成します。初回の実行時に、Zephyr とそのモジュールを GitHub からダウンロードします。
tools/zephyr/bootstrap.sh # zephyr-workspace/ を作成
source zephyr-workspace/env.sh # ZEPHYR_BASE、CROSS_COMPILE を設定し、west を PATH に追加
スクリプトは次の処理を行います。
zephyr-workspace/.venvを作成し、west をインストールします。- SDK の
west.ymlから west を初期化し、west updateを実行します(デフォルトは shallow)。 zephyr/patches.ymlのパッチを適用します。- Zephyr と MCUboot の Python 依存パッケージをインストールします。
env.shを書き出します:ZEPHYR_TOOLCHAIN_VARIANT=cross-compile、CROSS_COMPILE、ZEPHYR_BASE、PATH。
| オプション/変数 | 意味 |
|---|---|
-w DIR |
別のワークスペースディレクトリを使用 |
--full |
Zephyr とモジュールを全履歴付きで取得 |
IPRO_TOOLCHAIN |
ツールチェーンのディレクトリ。デフォルトは /opt/toolchain/riscv_ipro7 |
west.yml がインポートするのは mbedtls、tf-psa-crypto、openthread、picolibc、segger、mcuboot、liblc3、zcbor だけです。
bootstrap の再実行
bootstrap は更新の前に、パッチが変更する Zephyr のファイルを固定リビジョンの状態に戻します。それらのファイルへのローカルな編集は破棄されます。
Zephyr には CMake 3.20 以降が必要です。tools/cmake/ の CMake は Linux x86-64 用の 3.15 で、FreeRTOS のビルド専用です。
ビルド、書き込み、コンソール¶
source env.sh の後、zephyr-workspace/ で次を実行します。
west build -b ipro7_evb zephyr/samples/hello_world # Zephyr のサンプル
west build -b ipro7_evb ../zephyr/samples/periph_smoke -d build/smoke # SDK のサンプル
west flash -d build/smoke
../tools/zephyr/monitor.sh --port /dev/cu.usbserial-XXXX # コンソール、2,000,000 baud
SDK ルートからは、tools/zephyr/build.sh [-b ipro7_evb|ipro7ai_evk] [-d DIR] [-p] APP [-- cmake args] が west build をラップしており、SDK のサンプルを名前で指定できます(tools/zephyr/build.sh -b ipro7ai_evk periph_smoke)。
west flash は SDK の ipro ランナー(zephyr/scripts/runners/ipro.py)を使います。ランナーはボードをダウンロードモードにし、IntelProCube のコマンドラインツールで zephyr.bin を書き込み、ボードをリセットします。
| ランナーのオプション | 意味 |
|---|---|
--boot probe / shell / manual |
ボードをダウンロードモードにする方法:IPRO7 CMSIS-DAP プローブ(デフォルト)、動作中のイメージの reboot_dl、または手動 |
--port、--probe-port |
書き込み用 UART とプローブのブリッジのポート。デフォルトは $IPRO_SERIAL_PORT、$IPRO_PROBE_PORT |
--tool |
IntelProCube の CLI バイナリ。デフォルトは $IPRO_FLASH_TOOL、または PATH 上のツール |
--pt |
パーティションテーブル:.toml のパス、またはツールの chips/<chip>/partition/ 以下のテーブル名 |
--baudrate、--console-baud |
書き込みのボーレートと、--boot shell で使うコンソールのボーレート。どちらもデフォルトは 2000000 |
--no-reset、--attempts、--tool-arg |
ダウンロードモードのままにする。再試行回数(3)。ツールへの追加引数 |
ランナーのオプションは -- の後に渡します。例:west flash -- --boot shell --port /dev/cu.usbserial-XXXX。
west flashは--chip-variantを渡しません。IntelProCube は、そのchips/ipro7/eflash_loader/eflash_loader_cfg.iniに保存されている flash pin の設定を使います。- MCUboot を含む sysbuild のイメージでは、
west flashがまずtools/zephyr/merge_mcuboot.pyで MCUboot と署名済みアプリケーションを 1 つのイメージに結合します。 tools/zephyr/flash.shはreboot_dlを 115200 baud で送信しますが、動作中の Zephyr イメージ(2,000,000 baud)はこれを受信しません。先に手動でダウンロードモードに入れるか、west flashを使用してください。
機能¶
| 分野 | Zephyr での対応 |
|---|---|
| ドライバー | GPIO、UART(非同期を含む)、SPI、I2C、PWM、ADC、DAC、counter/RTC、ウォッチドッグ、Flash、DMA、entropy、hwinfo、I2S/PDM |
| ディスプレイ | Zephyr 自身の ST7789V ドライバーによる IPRO7AI EVK の LCD |
| Bluetooth LE | components/wireless/bluetooth/ipro_ble_controller/lib/ の IPRO BLE コントローラーのアーカイブ上で動く Zephyr ホスト |
| IEEE 802.15.4 / Thread | Zephyr の IEEE 802.15.4 ドライバーと OpenThread。Thread と Matter を参照 |
| ブートと更新 | sysbuild による MCUboot。MCUmgr SMP による BLE 経由のイメージのアップロード。OTA アップデートを参照 |
Zephyr では、BLE コントローラーのアーカイブを次のキーで選択し、devicetree オーバーレイで bt_hci ノードを有効にします(zephyr/samples/bt_peripheral_hr/ipro7.overlay)。
CONFIG_IPRO7_EM_SIZE_KB=16
CONFIG_BT_IPRO_CTLR_LIB="link1_periph"
CONFIG_BT_IPRO_CTLR_FEATURE="bt52"
CONFIG_BT_MAX_CONN=1
CONFIG_ENTROPY_GENERATOR=y
ISO と LE Audio には zephyr/samples/bt_le_audio/iso.conf(link1、bt54_iso2、CONFIG_IPRO7_EM_SIZE_KB=32)を使います。アーカイブの組み合わせについては BLE 開発で説明しています。
サンプル¶
サンプル(zephyr/samples/) |
ボード | 内容 |
|---|---|---|
periph_smoke |
ipro7_evb |
各ドライバーを動かします:GPIO、UART、SPI、I2C、PWM、Flash、DMA、counter、ウォッチドッグ、TRNG |
mcuboot_app |
ipro7_evb、ipro7ai_evk |
boot2 → MCUboot → イメージのブートチェーンを確認します |
ble_ota |
ipro7_evb、ipro7ai_evk |
MCUboot + MCUmgr SMP。BLE で更新します |
bap_broadcast_source |
ipro7_evb、ipro7ai_evk |
LE Audio のブロードキャストソース(LC3) |
bap_broadcast_sink |
ipro7ai_evk |
LE Audio のブロードキャストシンク。EVK のスピーカーで再生します |
le_audio_headset |
ipro7ai_evk |
LE Audio のユニキャストヘッドセット(CAP acceptor) |
evk_demo |
ipro7ai_evk |
EVK の LCD、マイク、スピーカー、カメラプレビュー用の evk シェルコマンド |
ieee802154_shell |
ipro7_evb |
IEEE 802.15.4 シェル。OpenThread 用の ot.conf と csl.conf も含みます |
bt_peripheral_hr、bt_le_audio |
– | Zephyr 自身のサンプル用の設定フラグメント |
SDK のフラグメントを使った Zephyr 自身のサンプル(zephyr-workspace/ で実行):
west build -b ipro7_evb zephyr/samples/bluetooth/peripheral_hr -- \
-DEXTRA_CONF_FILE=$PWD/../zephyr/samples/bt_peripheral_hr/ipro7.conf \
-DEXTRA_DTC_OVERLAY_FILE=$PWD/../zephyr/samples/bt_peripheral_hr/ipro7.overlay
west build -b ipro7_evb zephyr/samples/net/openthread/shell -- \
-DEXTRA_CONF_FILE=$PWD/../zephyr/samples/ieee802154_shell/ot.conf \
-DEXTRA_DTC_OVERLAY_FILE=$PWD/../zephyr/samples/ieee802154_shell/app.overlay
zephyr/tests/ には、15 のドライバーテストスイート(zephyr/tests/drivers/)と 3 つの SoC テストスイート(camclk、psram、reboot)があり、標準の ztest スイートとして書かれています。
ビルド済みコンポーネント¶
Zephyr のビルドは、HAL を含む SDK のすべてのコードをソースからコンパイルします。例外は次のとおりです。
| コンポーネント | 場所 |
|---|---|
| IPRO BLE コントローラー | components/wireless/bluetooth/ipro_ble_controller/lib/ |
| RF ドライバー | components/wireless/rf/ipro7_rf/lib/zephyr/(libipro_rf_core.a、libipro_rf_core_short_enums.a) |
| IEEE 802.15.4 MAC | components/wireless/ieee802154/lib/zephyr/(libipro_ieee802154_core.a、libipro_ieee802154_core_short_enums.a) |
BLE コントローラーをリンクする場合、イメージ全体が -fshort-enums でコンパイルされ、ビルドは対応する RF と 802.15.4 のバリアントを選びます。
本リリースの制限事項¶
- IPRO7AI Reef EVK 用の Zephyr ボードはありません。IPRO6S は Zephyr でサポートされていません。
- 低消費電力モード:Zephyr の
pm_stateは PDS にも HBN にも入らず、BLE コントローラーはスリープしません。低消費電力が必要な場合は FreeRTOS を使用してください。低消費電力を参照してください。 - カメラ、オーディオコーデック、USB、SD ホスト、イーサネット、NPU の Zephyr ドライバーはありません。ディスプレイは IPRO7AI EVK の LCD のみです。
- Zephyr では IPRO7 で Wi-Fi を使用できません。
zephyr/drivers/wifiは IPRO6S のオンチップドライバーです。 - これらの機能が必要な製品では、FreeRTOS アプリケーションを使用します。
関連ドキュメント¶
- Thread と Matter:OpenThread の設定と最初のテスト。
- OTA アップデート:MCUboot と MCUmgr。
- BLE 開発:コントローラーのアーカイブと BLE API。
- ツールのコマンドライン:
tools/zephyr/のスクリプト。