私は NXP FRDM-MCXN236 ボードを使っていて、Zephyrは比較的新しいです。
Zephyrのトレーニングの一環として、 Visual Studio Codeを使って基本的なZephyrプロジェクトを成功裏に構築・運営しました。次に、ブートとボードの起動プロセスをより低レベルで理解したいと思います。
私の目標は、以下のコンポーネントを別々に作ってみることです。
MCUブート
デバイスツリー
Zephyr アプリケーション/カーネル
次に、実際に基板に書き込まれる部分を理解し、可能な場合はそれらを個別に書き込んで、起動シーケンスを観察したい。
これは 、ボードブリングアップ、ブートローダー、デバイスツリー、Kconfig、リンカースクリプト、そしてMCUbootとZephyrアプリケーションの関係を理解するのに役立つと思います。
また、ZephyrがLinuxカーネルのmenuconfigワークフローのようにカスタマイズできるかどうかも知りたいです。
ボード: NXP FRDM-MCXN236
ホストOS: Windows 11
ビルド環境: WSL2上のUbuntu 22.04
ゼファー: 1999年4月4日
Python: 現在インストールされているバージョンは3.10.12です。
西: 1.5.0
CMake: 4.4.3
ニンジャ: 1.10.1
Zephyr SDK: 1.0.1
私の作業スペースは:
~/zephyr-training/ ├── zephyr/ ├── mcuboot/ ├── my-zephyr-app/ └── workspace/
MCUbootを別々にクローンしました。
~/zephyr-training/mcuboot/
Zephyr専用のMCUbootアプリケーションは以下の場所にあります:
~/zephyr-training/mcuboot/boot/zephyr/
関連するCMakeファイルとして、以下のものが見つかりました。
mcuboot/boot/zephyr/CMakeLists.txt mcuboot/boot/zephyr/sysbuild/CMakeLists.txt mcuboot/boot/bootutil/CMakeLists.txt mcuboot/boot/bootutil/zephyr/CMakeLists.txt
最初にMCUboot Zephyrアプリケーションを以下のようにビルドしようとしました:
cd ~/zephyr-training west build \ -b frdm_mcxn236 \ -s ~/zephyr-training/mcuboot/boot/zephyr \ -d ~/zephyr-training/build-mcuboot
ここでの意図は、ウエスト氏に伝えることである。
-b frdm_mcxn236 → FRDM-MCXN236ボード向けにビルドします
-s .../mcuboot/boot/zephyr → Zephyr MCUbootアプリケーションをソースとして使用します
-d .../build-mcuboot → MCUbootのビルド出力を通常のZephyrアプリケーションから分離しています
しかし、ビルドは実際のCMakeコンパイル段階には到達しませんでした。
次のようなエラーが発生しました。
Traceback (most recent call last): File "/usr/local/bin/west", line 8, insys.exit(main()) File "/usr/local/lib/python3.10/dist-packages/west/app/main.py", line 1199, in main app.run(argv or sys.argv[1:]) File "/usr/local/lib/python3.10/dist-packages/west/app/main.py", line 278, in run self.run_command(argv, early_args) File "/usr/local/lib/python3.10/dist-packages/west/app/main.py", line 584, in run_command self.run_extension(args.command, argv, self.topdir, manifest=self.manifest, File "/usr/local/lib/python3.10/dist-packages/west/app/main.py", line 739, in run_extension self.cmd.run(args, unknown, self.topdir, manifest=self.manifest, File "/home/umesh/zephyr-training/zephyr/scripts/west_commands/build.py", line 263, in do_run self._sanity_check() File "/home/umesh/zephyr-training/zephyr/scripts/west_commands/build.py", line 589, in _sanity_check_source_dir srcrel = pathlib.Path(self.source_dir).relative_to( TypeError: PurePath.relative_to() got an unexpected keyword argument 'walk_up'
私のPythonのバージョンは:
python3 --version Python 3.10.12
そして:
west --version West version: v1.5.0 which python3 /usr/bin/python3 which west /usr/local/bin/west
現在のZephyr Westのビルドコードは以下の通りのようです:
Path.relative_to(..., walk_up=True)
より新しいバージョンのPythonが必要です。
私も確認しました:
python3.12 --version
しかし、Python 3.12は現在インストールされていません。
直接インストールを試してみました。
sudo apt update sudo apt install python3.12 python3.12-venv
しかし、Ubuntu 22.04 では次の結果が返されました。
E: Unable to locate package python3.12 E: Couldn't find any package by glob 'python3.12' E: Unable to locate package python3.12-venv E: Couldn't find any package by glob 'python3.12-venv'
現在、MCUbootビルドを続ける前にPython/Westの互換性問題を解決しようとしています。
MCUbootの構築ができたら、ステップごとに進めて理解したいと思います:
FRDM-MCXN236向けにMCUbootを個別にビルドする方法。
FRDM-MCXN236デバイスツリーの選択およびコンパイル方法。
デバイスツリーがZephyrアプリケーションとは別にビルド・検査できるかどうか。
Zephyrカーネル/アプリケーションがどのように個別に構築されているか。
これらのうち、実際にフラッシュ可能なバイナリはどれで、ビルド時の設定はどれですか。
MCUbootを独立してフラッシュし、その後Zephyrアプリケーションを別々にフラッシュできるかどうか。
MCUbootイメージのレイアウトやアプリケーションイメージ/スロットの定義方法。
Zephyrアプリケーションに署名してMCUbootが起動できるようにする方法。
基板上のMCUboot→Zephyr起動シーケンスを観察・検証する方法。
Linuxカーネルのmenuconfigワークフローに似た方法でZephyrカーネル/設定をカスタマイズする方法。
私の意図は単にアプリケーションを動かすことだけでなく、ブートフロー全体を理解することです:
FRDM-MCXN236
|
v
MCUboot
|
v
Zephyr application
|
v
Zephyr kernel / drivers
|
v
Device Tree + Kconfig configuration手動でこれをやることで 、MCU/SoCの起動、ブートローダーの操作、フラッシュレイアウト、デバイスツリー、Kconfig、リンカースクリプト、ボードのブリングアップをよりよく理解できると思います。
FRDM-MCXN236でこの操作を行う際の正しい手順についてご教示いただければ幸いです。
MCUBOOT ゼファー・オス・エッジ @frdmuser
こんにちは、 @bottleneck さん、
まずはZephyrとMCUbootの基礎から始めることをお勧めします。今の学習段階はそちらのようです。
MCUbootの動作をよりよく理解するために、まずはZephyrなしでSDKの例をテストすることをお勧めします。これにより、イメージ暗号化やパーティションマネジメントの仕組みを学ぶことができます。MCUXpressoセキュアプロビジョニングツールは画像暗号化にも役立ち、このテーマを補完する専用のMCUbootワークフローを含んでいます。
当社のSDKでMCUbootの例を実行するには、 mcuboot_opensource と ota_mcuboot_basic プロジェクトを使用する必要があります。両方の例のREADMEファイルと、Secure Provisioning Toolのユーザーガイドをよく確認することを強くおすすめします。
また、公式の MCUbootドキュメント で機能のより詳細な説明を読むこともできます。
さらに、デバイスツリーの設定やKconfigの使い方をよりよく理解するために、各トピックのZephyrドキュメントへの直接リンクが掲載されている このガイドを参照してください。また、 Zephyrナレッジハブ では、NXPプラットフォーム上でZephyrを使って学習・開発を行う開発者が頻繁に参照する有用なリソースも提供しています。
興味があれば、公式NXPサイトのZephyrページの トレーニング セクションで、あなたの成長に役立ついくつかの動画があります。あなたの場合は「Accelerate Development with Zephyr™ OS Features and Modules」をぜひご覧ください。これはZephyrの基本原理や他のZephyr OS機能、さらにMCUbootのような外部モジュールについて説明しています。
最後に、ZephyrのMCUboot実装を参照し、その READMEファイルを 確認して動作をよりよく理解してください。
このコミュニティ投稿は、MCUboot 用のアプリを構築する方法を理解する上でも役立つかもしれません。MCXN947のために作られたものの、MCXN236の全体的な流れは理解できます。
BR
ハビブ