Partition Manager (2)
2024/07/30
何をしたいのかぼやけてきたので整理しよう。 Partition Manager用のファイルを置いているのに自作のサンプルアプリのビルドでは読み込まれていないことを気にしている。
最初の方に、
The Partition Manager is a Python script that sets the start address and size of all the flash and RAM partitions in a multi-image build context.
multi-imageビルドで使われるようなことが書いてある。
multi-image buildsの先頭には「ブートローダーのあるアプリやマルチコアのアプリ」とあるので、MCUboot を有効にしていれば multi-image build しているはずである。
The most common use cases for builds composed of multiple images are applications that require a bootloader to be present or applications for multi-core CPUs.
なのに。。。なぜ。。。
既存のDKボード定義ファイルから作る
違うアプローチをしてみよう。
今までは空のボード設定からMDBT53用の設定を追加していったが、Lesson 3 Exercise 2を参考に DKのボード定義ファイルをコピーしてリネームし、要素を削りながら Partition Manager が使われなくところを探ってみる。
という予定だったのだが、いきなりダメだった。
ビルドは成功するがpm_ファイルを参照した形跡が無い。
pm_static.ymlが無いというメッセージすらない。
MCUbootもビルドされていなかった。
MCUbootの有効化
まず MCUboot の有効化から。
CONFIG_BOOTLOADER_MCUBOOT=yをどこかに書けば良いのだが、以下のいずれかであろう。
- a. アプリプロジェクトの
prj.confに書く - b. アプリプロジェクト内の
child_image/mcuboot.confに書く - c. アプリプロジェクト内のボード定義ファイル
mdbt53_nrf5340_cpuapp_defconfig/mdbt53_nrf5340_cpuapp_ns_defconfigに書く - d. ncs内の
bootloader/mcuboot/boot/zephyr/boards/内にファイルをコピーして書く
b.は無いだろう。この設定を読むということは MCUboot をビルドしているはずだ。
そういう意味ではd.もそうだ。ncs 以下とはいえ MCUboot のディレクトリだから同じことだろう。
となるとa.かc.になる。
「このボードはかならず MCUboot を必要とする」ということならc.だろうし、プロジェクトごとにするならa.だろう。
c.の場合は設定ファイルが2つあるのでそれぞれ書かないといけないのがちょっと嫌な感じだが、confファイルは include のような文法が無いため仕方ない。
###
本命の Partition Manager ファイルについてだ。
コピーしなかったMCUbootのボード定義ファイルが関係しているはずだ。
nRF5340DKはファイル名に”minimal”と付いているのが気になる。
Thingy:53の方は設定が多い。
そうだ、いろいろやった過程でもこの設定の多さのために訳がわからなくなって一からボード定義ファイルを作ろうとしたような気がする。
まずオリジナルの nRF5340DK ボード定義ファイル(ns)でビルドしてみる。
うむ、コピーしたボード定義ファイルと同じで MCUboot も pm_ もない。
CONFIG_BOOTLOADER_MCUBOOT=yを追加しても MCUboot が追加されただけである。
そもそもだよ。
いま気付いたけど nRF5340DK のボード定義ファイルの中に pm_ ファイルは無いのだ。
それでビルドエラーが発生しないのだから Partition Manager は使われていないことになる。
あれ、そしたらやろうとしていた「設定を削っていって Partition Manager が使われなくなるパラメータを探す」の前提が崩れているではないか。。。
Thingy:53のボード定義ファイルでやり直す。
DKボードで作った設定を削除するのはもったいないのでMDBT53Aという名前にしておく。
compatible = "nordic,thingy53-nrf5340-cpuapp", compatible = "nordic-thingy53-edge-connector", compatible = "nordic,thingy53-nrf5340-cpunet" のような箇所をリネームして良いかどうかがよくわからなかったので残している。
たださっきの nRF5340DK も気付かなかっただけで compatible = "nordic,nrf5340-dk-nrf5340-cpuapp" のようになっている。
compatibleは、ボードそのものについては適当に設定して良いはずだ。
自作ではないが Nordic の標準ではないので新規で割り当てるはずだ。
edge_connectorがわからない。
検索するとmicro:bitが出てくる。
DeviceTree Visual Editor でも見つかるのだが、どういうものなのかがわからん。
