ncs: sysbuild対応 (2)
2024/11/28
前回の続き。
Raytac ボード定義ファイルとの差分確認
前回の最後でようやく ncs v2.7.0 での sysbuild が成功したが、お手本にした Raytac のボード定義をちゃんと手本にできていなかったせいだ。
nRF5340DK のボード定義も参考にしたので、そっちに引っ張られたんだろう。
ボタン数とLED数に違いがあるのと、使っているポートが多少違うくらいだ。
1 つ謎なのが、non-secure でサポートしている “counter” というものだ。
他のボード定義ファイルでも見かけるのだが DTS ファイルにはなさそうだし、なんだろう?
button0 –> sw0
button なのか sw なのかどうにもはっきりしない。
ラベルは button
だけど alias は sw
… だけど mcuboot-button
は例外、みたいになっていて気持ちが悪い。
自分のボード定義ファイルでは button0
の alias も作ってアプリではそちらを使っていたのだが、
Raytac の定義ファイルと見比べたときに悩みそうなので sw0
だけにした。
長いものに巻かれるのだよ。
ボード定義ファイルから USB 用を削除
DTS ファイルに不要な定義があるとコードにも影響がありそうな気がした。
使っている開発ボードは UART 専用のコネクタはないので USB にログを吐き出していたのだが、
使わない場合のことも考えてボード定義ファイルに USB 用を追加していた。
そのせいで ns ありとなしの USB用ファイルが追加になりメンテナンスが面倒だった。
そして、雰囲気的にデバイスを有効にするという設定をしなかったら無効になるだけという気がしている。
だったらもう削除してしまおう。
VID=0x2fe3
, PID=0x0100
になっていたが、これは Kconfig
のデフォルト値らしい。
個人で USB の ID を持っていることはほとんど無いと思うので、
CMake Warning at /home/ユーザ/ncs/v2.7.0/zephyr/subsys/usb/device/CMakeLists.txt:22 (message):
CONFIG_USB_DEVICE_VID has default value 0x2FE3.
...
CMake Warning at /home/ユーザ/ncs/v2.7.0/zephyr/subsys/usb/device/CMakeLists.txt:28 (message):
CONFIG_USB_DEVICE_PID has default value 0x100.
この VID は Zephyr か Nordic らしい。
あれ、もしかして Zephyr って Nordic 主体なの?
Linux Foundation だから提供している感じなのかもしれない。
特にどこがどうだったからといって気にはしないがね。
ncs v2.8.0 対応
アプリ側のプロジェクトは、使用する SDK や Toolchain を変更するだけである。
それだけでビルドが通るわけではなかった。
残念ながらボード定義ファイルの変更が発生する。
中身は見ていないが v2.7.0 から v2.8.0 までの間に Raytac に関係する変更はこれだけある。
なので、面倒だが v2.7.0 と v2.8.0 はボード定義ファイルを変えなくてはならない。
BOARD_ROOT のプロジェクトごと変更はできるのか
可能とのこと。
nRF Connect for VS Code は settings.json
の "nrf-connect.boardRoots"
を参照するが、ここに各バージョンごとのボード定義ファイルディレクトリを列挙すると名前の解決に失敗してしまう。
CMake Error at /home/ユーザ/ncs/v2.7.0/zephyr/cmake/modules/boards.cmake:218 (message):
Multiple boards named 'ssci086585' found in:
/home/ユーザ/ncs/custom_boards/v2.8/boards/ssci/ssci086585
/home/ユーザ/ncs/custom_boards/v2.7/boards/ssci/ssci086585
バージョン違いならば settings.json
には 1つだけディレクトリを書くのがよかろう。
各プロジェクトの .vscode/settings.json
に書いておけば CMakeLists.txt
などは変更しなくて良い。
“Add Build Configuration” のコンボボックスに反映されていなかったら vscode を Reload させるとよかろう。
vscode では ${env:HOME}
でホームディレクトリを指すそうだ。
なので settings.json
はこんな感じで書くことができる。
{
"nrf-connect.toolchain.path": "${nrf-connect.toolchain:2.8.0}",
"nrf-connect.topdir": "${nrf-connect.sdk:2.8.0}",
"nrf-connect.boardRoots": [
"${env:HOME}/ncs/custom_boards/v2.8"
]
}
2.8.0
のようなバージョンもどこかに書いて参照できると良いのだが。