ncs: sysbuild対応 (3)
2024/11/29
前回 で ncs v2.8.0 での sysbuild は成功した。
ログを見ながら warning をなるべく取り除こう。
WSL2での使い勝手
そういえば ncs を Windows ネイティブから WSL2 に移行して数日経ったので経過報告をしておく。
今のところ問題なし。
J-Link を使うときには USBIPD での attach がいる(PCを起動して初回だけ)のは変わらんが vscode の extension があったので手軽になった。
管理者権限もいらないし、あれはデバイスを共有するときだけなんだろうか?
vscode が WSL2 として使用しているときに使える extension だったので切替が不要なところもよろしい。
ファイルシステムは WSL2 側にあるが Windows 側でもアクセスできるので特に困っていない。
ファイル操作を GUI で行いたいときはなるべく Files(Nautilus) を使っている。
気付かない制約はあるのかもしれないが、今のところは特にない。
Windows 側の ncs を削除したので /mnt/c/ncs
を見に行くこともなくなったようだ。
見に行くフォルダや見に行かないフォルダを指定できればよいのだが、ぱっと見はそういうのがなかった。
warning 除去
No SOURCES
MCUboot のビルドログである。
CMake Warning at /home/ユーザ/ncs/v2.8.0/zephyr/CMakeLists.txt:952 (message):
No SOURCES given to Zephyr library: drivers__console
条件はこんな感じか?
- app の static library にない
- source_list にも lib_imported にもない
- 空であることが許容されない
あれこれ試したところ MCUboot 側の Kconfig に CONFIG_CONSOLE=n
を追加すると良かった。
ブートローダを UART なり USB なりで更新するならコンソール機能は使えないだろう。
ログを出せないなら CONFIG_LOG=n
でよいのでは?
やってみたのだが、デフォルトではログが出る状態になっているのでそれらの warning が出た。
LOG_DEFAULT_LEVEL
MCUBOOT_LOG_LEVEL_INF
LOG_MODE_MINIMAL
「君以外はログを出す気があるようだけど大丈夫か?」という感じで dependency チェックによって出力されているだけだから無視すれば良いのだが、うっとうしい。
これはコピーしてきた MCUboot の prj.conf
を変更することで対応できた。
読み込む順番がこうなっていたので mcuboot.conf
に prj.conf
を打ち消すように書けば済むかと思ったが、なぜかそれではダメだった。
- ボード定義の defconfig ファイル
sysbuild/mcuboot/prj.conf
sysbuild/mcuboot/boards/
の conf ファイルsysbuild/mcuboot.conf
UPDATEABLE_IMAGE_NUMBER
アプリのビルドログである。
warning: UPDATEABLE_IMAGE_NUMBER (defined at
/home/ユーザ/ncs/v2.8.0/nrf/samples/common/mcumgr_bt_ota_dfu/Kconfig:89, subsys/dfu/Kconfig:95) was
assigned the value '1' but got the value ''. Check these unsatisfied dependencies:
(((BOARD_THINGY53_NRF5340_CPUAPP || BOARD_THINGY53_NRF5340_CPUAPP_NS) && SOC_SERIES_NRF53X &&
NCS_SAMPLE_MCUMGR_BT_OTA_DFU) || (!MCUBOOT && IMG_MANAGER)) (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_UPDATEABLE_IMAGE_NUMBER and/or look up
UPDATEABLE_IMAGE_NUMBER in the menuconfig/guiconfig interface. The Application Development Primer,
Setting Configuration Values, and Kconfig - Tips and Best Practices sections of the manual might be
helpful too.
ログに載っていた URL を見ると、Zephyr オリジナルの依存関係は !MCUBOOT && IMG_MANAGER
だけだった。
しかしログには Thingy:53 のことが載っているので、追加されているのかもっと別の設定があるのか。
取りあえず、未定義だから ''
だけどデフォルト値が 1
だから 1
にするよ、というだけのことだろう。
これは sysbuild.conf に設定する内容である。
が、設定しても warning が取れない。
サンプルでは sysbuild/mcuboot/boards/
とアプリ直下の boards/
両方の conf ファイルに設定してある。
- sdk-nrf/samples/bluetooth/peripheral_status/sysbuild/mcuboot/boards/thingy53_nrf5340_cpuapp.conf at v2.8.0 · nrfconnect/sdk-nrf
- sdk-nrf/samples/bluetooth/peripheral_status/boards/thingy53_nrf5340_cpuapp.conf at v2.8.0 · nrfconnect/sdk-nrf
そもそもなんでアプリの方に DFU のビルドログが出るのだろうか?
BLE での OTA だと MCUboot だけでなくアプリにも関係するのか。
よくわかっていないので今回はスキップ。
MCUBOOT_UPDATE_FOOTER_SIZE
こちらもアプリログだが、UPDATEABLE_IMAGE_NUMBER
をスキップしたのでこちらもスキップ。
warning: MCUBOOT_UPDATE_FOOTER_SIZE (defined at subsys/dfu/Kconfig:54) was assigned the value
'0x2000' but got the value ''. Check these unsatisfied dependencies: MCUBOOT_IMG_MANAGER (=n),
IMG_MANAGER (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_MCUBOOT_UPDATE_FOOTER_SIZE and/or look up
MCUBOOT_UPDATE_FOOTER_SIZE in the menuconfig/guiconfig interface. The Application Development
Primer, Setting Configuration Values, and Kconfig - Tips and Best Practices sections of the manual
might be helpful too.
CONFIG_USB_DEVICE_VID と CONFIG_USB_DEVICE_PID
USB の VID/PID なので無視
globally ENABLED
アプリのビルドログ。
CMake Warning at /home/ユーザ/ncs/v2.8.0/zephyr/CMakeLists.txt:2134 (message):
__ASSERT() statements are globally ENABLED
prj.conf
に CONFIG_ASSERT=y
を設定していたため。
消し忘れないよう warning が出るようになっている。
without pm_static.yml
これは Partition Manager 関係か。
---------------------------------------------------------------------
--- WARNING: Using a bootloader without pm_static.yml. ---
--- There are cases where a deployed product can consist of ---
--- multiple images, and only a subset of these images can be ---
--- upgraded through a firmware update mechanism. In such cases, ---
--- the upgradable images must have partitions that are static ---
--- and are matching the partition map used by the bootloader ---
--- programmed onto the device. ---
---------------------------------------------------------------------
cmake ファイルはここ。
条件はこう(全部のAND)なのだが、sysbuild しているんじゃないの?
- ! static_configuration
- CONFIG_BOOTLOADER_MCUBOOT OR CONFIG_SECURE_BOOT
- ! SYSBUILD
LBSサンプルをビルドしても出なかったので、これも MCUboot か DFU 関係だろう。
スキップ!
USB_CDC_ACM_LOG_LEVEL
最後はこちら。
/home/ユーザ/ncs/v2.8.0/zephyr/subsys/usb/device/class/cdc_acm.c:64:2: warning: #warning "USB_CDC_ACM_LOG_LEVEL forced to LOG_LEVEL_NONE" [-Wcpp]
64 | #warning "USB_CDC_ACM_LOG_LEVEL forced to LOG_LEVEL_NONE"
| ^~~~~~~
これはソースコード中の #warning
である。
これは局所的な warning だ。
/* Prevent endless recursive logging loop and warn user about it */
ログ出力を USB CDC ACM にしているときに CDC ACM からログ出力するとそれによってさらにログ出力が生じて・・・というループが発生するのを避けるためだろう。
これは仕方ない。
MCUboot サンプル
ncs v2.8.0 のサンプルコードを nRF5340DK の設定でビルドする。
これはかなり標準に近いビルドだろう。
結果…
- app
- warning: UPDATEABLE_IMAGE_NUMBER
- warning: MCUBOOT_UPDATE_FOOTER_SIZE
- WARNING: Using a bootloader without pm_static.yml.
同じやん!
いや、もう1つサンプルコードがあった。
nRF5340 用のプロジェクトで mcuboot がある。
さすが?なのかはわからないが warning の出方が違った。
- mcuboot
- warning: MBEDTLS_CFG_FILE
- b0n
- warning: BT_CTLR_DATA_LENGTH_MAX
- app
- WARNING: Using generated NSIB public/private key-pair.
このプロジェクトは QSPI に接続されている 外部 Flash を使っている。
そこら辺が影響しているのだろうか?
ともかく、普通に MCUboot を導入しただけでは warning が出てしまうことがわかった。
残りは別途調査ということにしよう。
おわりに
ここまでのボード定義ファイルをデフォルトブランチにする。
しょっちゅうデフォルトブランチを変更してしまって申し訳ない。
これを使ったアプリも ncs v2.8.0 対応したものを main
ブランチにする。
v2.7.0 はもうスキップして良かろう。
次は USB 経由での DFU ができるようにしたい。
MCUboot を積んでも DFU ができないのであれば意味が無いし。