感じで順番に設定しないと項目がない。そんなわけなんだがスマホとノートPCで試したが、アクセスポイントは出てくるんだが接続できない。以前にhostapdで失敗してるぽいんで、DHCPが使えなくなるがdnsmasqとnftablesを切った状態で試してるがわからん。hostapdの起動時はrfkillがないとか/dev/randomがどうとかメッセージ出るんでそのへん試してるところ。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くらい使える。R1をMTDブートさせたい件で、U-Bootのデフォルト環境変数を設定した。*/初期設定はまるごとコメントアウトした。末尾に空行が入らないといけないのと、途中に改行が入るといけないみたいなのでエスケープに注意。無いとscriptaddrとかkernel_addr_rとか使えなくなる。fdtfileもboot.scrで使うので入れた。初期設定でビルドするとdistro_bootcmdが自動実行されるのでこれを変えた。SPIフラッシュを有効にして、load_scrを実行して、スクリプトを処理する。load_scrは長いんで分けたが、SDの第1パーティションに/boot.scrがあればそれをロード。なければSPIフラッシュからオフセット512kBの4kBをロード。オフセットの512kBまでにU-Boot本体を入れる。boot.scrは4kB。搭載フラッシュは256B単位で読めるようなんだが、MTDは4kB単位で使うのが基本ぽい?てな感じで、SPIフラッシュとSDカードの両方で使える感じにした。boot.scrも共通で使えるようにしたい。init.shも共通にできるかな。R1でU-bootでSPIフラッシュを認識しなかった件ですごい苦戦したがやっとできた。-19).こんな感じになって数日解決できなかった。"jedec,spi-nor";};};↑この部分まるごとコメントアウトされてた。ブロックまるごとコメントアウトとは思わんし、.dtsファイルだからKateのハイライトが効いてなくてコメントに気づかなかった。treeでデバイスが出てきた。&spi0;};spi0のエイリアスを設定すると利用できるようになる。"nor0"出てきた。R1のOSをSPIフラッシュに入れようとしているが、まずSDのu-bootでmtdコマンドを使ってみることにした。supportをチェックして再ビルド。mtd認識しない・・・Armbian使ったときはmtd認識してたんでLinuxの方は使えると思ってたが、確認してみたら無かった。いうわけで、linuxも再ビルド。--->この2つだけ有効にしたら認識した。固有のドライバは要らないみたい。作業中にルーペ+スマホカメラでボードのチップを確認してみたらMXICとか書いてある。SPIフラッシュはmiZyのとこでWinbondとかって記述があったのでてっきりWinbondと思ってたんだが、WinbondじゃなくてMacronixみたい・・・あと、linuxビルドの際に前回ビルドしたときにサウンドとか外して3.7MBに減らしてたが今回4.1MBに増えた。Comment(1)プリンタドライバを入れた先日メインPCがぶっ壊れて再インストールしてからプリンタ(DCP-J552N)のドライバを入れてなかったが入れた。今回はAURにあるDCP-J552DWのパッケージを落としてきて改造してDCP-J552Nにした。ちなみに名前が違うだけでDCP-J552DWのドライバでもDCP-J552Nは利用できる。DCP-J552Nに名前を変更。URLをhttps://download.brother.com/welcome/dlf100549/dcpj552nlpr-3.0.0-1.i386.rpmhttps://download.brother.com/welcome/dlf100551/dcpj552ncupswrapper-3.0.0-1.i386.rpmに変更。記載のmd5sumsを変更する。プリンタがインストールされるがUSB接続用なのか利用できない。プリンタを消して、ipp://IPアドレス:631/ippでネットワークプリンタを追加すれば利用可能。以前の記事でスキャナはbscan4て書いてあるが、brscan4だね。検索しても出てこないからなくなったのかと思った。こちらは以前と同じくAURで入れた。難しくて断念して/etcと/homeだけ書き換えできるようにした。rootfsをoverlayfsにするつもりだったが、overlayfsは2つ以上のディレクトリを重ねるシステムなので、片方にリードオンリーなsquashfsを使って書き換えできるようにするには2つのファイルシステムを先にマウントする必要がある。kernel起動パラメータroot=の部分で指定することはできない。現在のプロセスのみ/を変更する。元の/には別のファイルシステムがマウントされていてはいけない。元の/と新/は別のファイルシステムでなければいけない。元の/にあるファイルは全削除される。システム全体を変更したいのでchrootはナシ。switch_rootは、元の/のファイルが削除されるというのはなんでだろ?マウントポイントがなくなるだけではないの?initramfsで使われることが多いみたいだが一時的なramディスクでないと問題あり?pivot_rootはなんか制約が多い。新/が別のファイルシステムだと/の下にマウントしなきゃいけないから2つのファイルシステムは必ず存在することになるのでわかりにくい。実際にpivot_rootとかswitch_rootを試してみようかと思ったが、起動中のシステムでやろうとしてもエラーでうまく行かなかった。そこをどうにかしようと考えて、rwなパーティションを/mnt/rwにマウントして、その下のディレクトリを/etcと/homeにマウントすることにした。ディレクトリ作ったりしてる作業中に、rootfsの/etcをrw/etcに全コピーしてして/etcを消すときに気づいたが、linux起動時は/sbin/initが実行されて、/etc/inittabが処理され、/etc/fstabに記載されたデバイスがマウントされる。/etc/inittabが別デバイス上じゃ読めないじゃん!ということで再度悩んだが、kernel起動パラメータのinit=で/sbin/init以外を指定すればinitプログラムを代えることができる!と気づいた。/sbin/initkernel起動パラメータで最初に実行するinit。rwデバイスをマウントして、下にあるetcとhomeを/etcと/homeにbindする。最初procをマウントしなかったらデバイスのmountができなかった。マウントしたら本来の/sbin/initを実行。-arootfsの/etcは空にしてるんでrwデバイス側。先に/init.shでbindされるんで/etc/inittabとして扱える。procのマウントは/init.sh側に移したのでコメントアウト。メモリは256MBも積んでるがストレージ(SPIフラッシュ)は16MBしかないのでswap要らん。いうわけでkernelビルド時に無効にしてるんでswaponもコメントアウトしといた。/dev/ptsと/dev/shmは最初からあるからmkdirする必要あるのか?思って一旦コメントアウトしたが、/devにdevtmpfsがkernelにマウントされるから無くなるんだね。mkdirしないとエラー出た。mkdirするには/をrwでremountする必要があるってことみたい。0これもrwデバイス側。/mnt/rwは手動マウントするんで追加しなくても起動するが、シャットダウン時に自動アンマウントさせるためにnoautoで追加しといた。これでumountしてくれる?こんな感じで、/をsquashfsにした上で/etcの変更ができるシステムができた。/run/は6MBになった。他にboot用のパーティションがzImageとかで頑張っても4MBまでしか削れない。余裕もたせてboot=6MB,root=8MBで残り2MBくらいか?と思ったが、どうせ書き込み用のイメージ化しなきゃいけないんだし最適化するスクリプトでも作るか。したいと思ってるが、Buildrootのブート処理を確認。