hiro99ma blog

何か技術的なこと

ncs: v2.7.0 対応 (2)

2024/11/22

昨日の続き。

Child Image

child_image/ をプロジェクトの中に置いているのだが、この warning を消したい。

---------------------------------------------------------------------
--- WARNING: Child and parent image functionality is deprecated   ---
--- and should be replaced with sysbuild. Child and parent image  ---
--- support remains only to allow existing customer applications  ---
--- to build and allow porting to sysbuild, it is no longer       ---
--- receiving updates or new features and it will not be possible ---
--- to build using child/parent image at all in nRF Connect SDK   ---
--- version 2.9 onwards.                                          ---
---------------------------------------------------------------------

sysbuild がデフォルトになることで child_image/ が使われなくなるなら ncs v2.8.0 からになりそうだが、そういう理由ではないということか。

デフォルトでビルドしたときのログを見比べる。

v2.7.0

-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).

v2.8.0

-- west build: generating a build system
Loading Zephyr module(s) (Zephyr base): sysbuild_default

ログの文字列だけで決めつけるのもなんだが、v2.8.0 からデフォルトで sysbuild になったと考えても良かろう。
v2.9.0 はまだリリースノートもはっきり書かれていないので忘れてしまおう。

ちなみに v2.8.0 でのビルドは sysbuild にしろそうでないにしろエラーになった。
v2.7.0 では出ていない warning なので後回しにする。

warning: Deprecated symbol SOC_DCDC_NRF53X_APP is enabled.
warning: Deprecated symbol SOC_DCDC_NRF53X_NET is enabled.
warning: Deprecated symbol SOC_DCDC_NRF53X_HV is enabled.
warning: Deprecated symbol BOARD_ENABLE_CPUNET is enabled.
warning: <choice BT_HCI_BUS_TYPE> (defined at C:/ncs/custom_boards/boards/ssci/ssci086585/Kconfig.defconfig:56) defined with type unknown
warning: <choice BT_HCI_BUS_TYPE> (defined at C:/ncs/custom_boards/boards/ssci/ssci086585/Kconfig.defconfig:56) defined without a prompt
warning: the default selection BT_HCI_IPC (defined at drivers/bluetooth/hci/Kconfig:39) of <choice BT_HCI_BUS_TYPE> (defined at C:/ncs/custom_boards/boards/ssci/ssci086585/Kconfig.defconfig:56) is not contained in the choice
error: Aborting due to Kconfig warnings

Migrating from multi-image builds to sysbuild

そういうわけで v2.7.0 で sysbuild を使いつつ child_image/ を使わない方法を調べる。
たぶんこの記事だろう。

右側の “On This Topic” に列挙されている項目からすると個別に対応していかねばならないのだろう。
そういう私も MCUboot 以外はやっていない。
“Network core” は nRF5340 だろうか?
まあいい、いま必要な箇所だけ見ていこう。

Sysbuild configuration files

ボード定義ファイルの差分

ボード定義ファイルが関係してくるので、sysbuild がデフォルトではない v2.7.0 とデフォルトな v2.8.0 を比較しておく。

image

グレーな行は v2.7.0 にしかないファイルである。

こちらは nRF5340DK の比較。
グレーな行は nrf5340dk_common.dtsi だけ v2.8.0 にしかないファイル、それ以外は v2.7.0 にしかないファイルである。 nrf5340dk_common.dtsi は cpuapp と cpunet で共通な設定だ。

image

それはともかく、sysbuild に関係したファイルがあるのかと思って見てみたけど、 本当にプロジェクトフォルダにしか置かないファイルなのだな。
MCUboot を必ず使うようなボード定義ファイルを作ることはできないということなのだろうか。

MCUbootを有効にしてみよう

MCUbootExample for MCUboot はあるものの先に実例を見たい。
サンプルがあった。

これだけである。

ただ、これだけでビルドしても MCUboot があるような感じがしない。
child_image/ にあったような MCUboot 向けのボード別の設定ファイルがいると思う。

“Example for MCUboot” では sysbuild/mcuboot/boards/*.conf のようなファイルを置くように書いているので child_image/ に置いていた conf ファイルをコピーしてみた。
が、ファイルは読まれていないようだ。
mcuboot のコンテキストではこうなっていた。

image

MCUboot から立ち上がっている場合、開発ボード上のボタンを押したまま起動すると LED が点灯して USB が有効になったはずだ。
そういうのがまったく無い。

build/mcuboot/zephyr/include/generated/autoconf.h にもボード用conf ファイルに書いた内容が反映されていない。
しかしボードの定義名などはちゃんとわかっている。

#define CONFIG_BOARD "ssci086585"
#define CONFIG_BOARD_TARGET "ssci086585/nrf5340/cpuapp"

ビルドログでも sysbuild/mcuboot/prj.confsysbuild/mcuboot.conf までは読み込むが、それまでだ。
試しに sysbuild/mcuboot/ の直下に ボード用conf ファイルを置いてみたが、変わらず。

Nordic AI に聞いてみたが、特に間違っていないようだ。

image image

ncs v2.7.0 だとまだ sysbuild の対応が不十分ということもあり得るのだろうか?
先に v2.8.0 対応を進めてみるか。

最後に、何か原因に思い当たることがないかも質問しておこう。

image

prj.conf が一番それっぽかったのだが、このファイルがないだけでエラーになるのよね。 まあ、書いてある内容も「優先される」だけで読み込まれないという話ではないし。

CMake Error at C:/ncs/v2.7.0/zephyr/cmake/modules/extensions.cmake:2802 (message):
  No prj.conf file(s) was found in the
  U:/Prog/BLE/nrf-ncs/recv_sb1602/sysbuild/mcuboot folder(s), please read the
  Zephyr documentation on application development.

v2.8.0 にしてもダメだった

ダメでした。
ビルドは通るけどボードごとの設定ファイルを読んでくれない。
しかも BLE 機能自体が使えなくなっていて初期化にすら失敗している。
なんでだー。

< Top page