[新]なんでも日記[新]なんでも日記ジャンル不定の日記です。R1をSPIフラッシュから起動できた。昨日のパーティションパーティション割りで4kB単位で問題ないと思ってたが、erasesizeが64kBになるのでそれを下回るとリードオンリーになっちゃうようなので64kB単位にした。u-boot、boot.scr、zImage、dtbは一緒のパーティションに入れちゃってもいいかもしれない。${fdt_addr_r}boot.scrはSDブート用とSPIブート用で共通にした。SDからブートできそうならSDブートになる。カーネルパラメータのmtdpartsでパーティション情報を渡すと割られる。spi0.0はlinux上で見えるSPIフラッシュのデバイス名。オフセットはなしでサイズだけ書いて最後のパーティションのサイズを-にすれば使い切れる。イメージサイズに合わせて最適化しようかとも思ったがとりあえず固定にした。受け取れなくて結構ハマった。上記設定すれば/dev/mtdXは割られるのだが、mountするのに/dev/mtdblockXが必要。有効にしてビルドすると/dev/mtdblockXが出てきてマウントできるようになる。*/こんな感じで、自動実行されるdistro_bootcmdでSDかSPIのboot.scrを実行する。イメージをMTDに書き込む際は全体のイメージをddで作ってSDブートのOSで書き込もうとしたのだが、flashcpはパーティション単位でしか書き込めない。いうか、カーネル起動オプションでMTDを割ると全体のデバイスは出てこなくて割られたデバイスしかなくなるのね。いうわけで、個別に母艦からwgetしてflashcpした。どっかで、flashcpはデバイスサイズとイメージサイズが一致しないと書き込めないとか見た気がするんだが、そんなことはなかった。サイズはいじらないで書き込めた。/sbin/init/initの前に実行するスクリプトもmmcとspi共通にした。/がroなSquashfsにして/etcをrwにするために、/etc/inittabを処理する/initは使えないので、先に/etcをマウントする。丸1日ハマったが、SD抜いて起動できるようになった。起動後に拡張するつもりだったが、resize2fsとかpartedとかないし、mkfsもなく、resize2fsがBuildrootでビルドできなくて、別途ビルドしたのとか別ディストリのresize2fsを持ってきたりしたがエラーになっちゃったんで更にハマった。mkfsは有効にしてなかったが、mke2fsが初期状態で有効だったんで、一旦コピーしてmke2fsして中身戻した。/runこんな感じに。余裕はないけど2.5MBくらい使える。頑張ればあと2MBくらいは捻出できるかな?OSの起動はできたんで、あとはdnsmasq、hostapd、pppd、uhttpd、nftablesの設定かな。U-Bootのデフォルト環境変数を設定した[AD]rentafree.net。