2416812_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2416812_ja-JP

2416812_ja-JP

FRDM-MCXN236 mcuboot

FRDM-MCXN236上でMCUboot、Device Tree、Zephyrを別々に構築する方法

私は NXP FRDM-MCXN236 ボードを使っていて、Zephyrは比較的新しいです。

Zephyrのトレーニングの一環として、 Visual Studio Codeを使って基本的なZephyrプロジェクトを成功裏に構築・運営しました。次に、ブートとボードの起動プロセスをより低レベルで理解したいと思います。

私の目標は、以下のコンポーネントを別々に作ってみることです。

  1. MCUブート

  2. デバイスツリー

  3. 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ソース

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ビルドの試み

最初に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, in 
    sys.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の構築ができたら、ステップごとに進めて理解したいと思います:

  1. FRDM-MCXN236向けにMCUbootを個別にビルドする方法。

  2. FRDM-MCXN236デバイスツリーの選択およびコンパイル方法。

  3. デバイスツリーがZephyrアプリケーションとは別にビルド・検査できるかどうか。

  4. Zephyrカーネル/アプリケーションがどのように個別に構築されているか。

  5. これらのうち、実際にフラッシュ可能なバイナリはどれで、ビルド時の設定はどれですか。

  6. MCUbootを独立してフラッシュし、その後Zephyrアプリケーションを別々にフラッシュできるかどうか。

  7. MCUbootイメージのレイアウトやアプリケーションイメージ/スロットの定義方法。

  8. Zephyrアプリケーションに署名してMCUbootが起動できるようにする方法。

  9. 基板上のMCUboot→Zephyr起動シーケンスを観察・検証する方法。

  10. 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

Re: FRDM-MCXN236 mcuboot

こんにちは、 @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
ハビブ

Tags (1)
No ratings
Version history
Last update:
9 hours ago
Updated by: