最近BHR-4GRV2が公式のbuildbotにおいてar71xx/tinyをfailさせる一因になっていたので、それに関連するメモ。
-
ar71xxがKernel 4.14に引き上げられる
ar71xxにKernel 4.14サポートが追加されてしばらくした後、77d004de6d09edc6d8a5cf77471d52d4865ae577 でデフォルトが4.14に引き上げられた。
-
ar71xx/tinyの公式ビルドが落ち始める
上記commit以降、ar71xx/tinyのビルドが落ち続ける (buildbot)。原因としては複数機種のKernelサイズ制限超過。
- Buffalo BHR-4GRV2
- Zbtlink ZBT-WE1526
-
原因となっている機種のビルド無効化
どうするのかなーと思っていたら、原因となっている上記2機種のビルドが無効化されてしまった (commit)。
この変更により、デバイスは定義されているもののビルド時に呼び出されなくなる。ユーザーがビルドするにしても、当該commitで削除された行を戻す必要がある。 -
ath79/tinyのBHR-4GRV2はどうか
結論から言うとダメそう。
ar71xx/tinyのconfig.seedを参考にath79/tinyで使われるであろうconfigを作成して(現状公式ではath79はビルドされないため)手元でビルドしてみたものの、残念ながらこちらでもBHR-4GRV2はKernelサイズが超過してしまった。(サイズ制限: 1507328 byte)
mkimage -A mips -O linux -T kernel -C lzma -a 0x80060000 -e 0x80060000 -n 'MIPS OpenWrt Linux-4.14.79' -d /openwrt/user/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_tiny/buffalo_bhr-4grv2-kernel.bin /openwrt/user/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_tiny/buffalo_bhr-4grv2-kernel.bin.new Image Name: MIPS OpenWrt Linux-4.14.79 Created: Mon Nov 5 16:34:35 2018 Image Type: MIPS Linux Kernel Image (lzma compressed) Data Size: 1553003 Bytes = 1516.60 KiB = 1.48 MiB Load Address: 80060000 Entry Point: 80060000 mv /openwrt/user/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_tiny/buffalo_bhr-4grv2-kernel.bin.new /openwrt/user/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_tiny/buffalo_bhr-4grv2-kernel.bin WARNING: Image file /openwrt/user/openwrt/build_dir/target-mips_24kc_musl/linux-ath79_tiny/buffalo_bhr-4grv2-kernel.bin is too big
公式buildbotでは素の状態からconfigによってKernel周りのオプションが変更されており、それにより素の状態では通るにもかかわらず、公式ビルドでは落ちてしまう模様。かなしい。
どうする
ar71xx/tinyのほうは今から変更するのは厳しいため、諦める。
一方ath79/tinyのほうは、ath79がまだ公式ではビルドされていないこともあって変更の余地はあるため、以下のように変更しようかと思案中。→ 既存のサポートに対する修正としてPRを投げた。
この変更を行うと、ar71xxからのsysupgradeができない*、factoryファームを作れないなどの弊害は出る。
(*: 正確にはar71xxからsysupgradeで書き込むことはできるけど、U-Bootの環境変数を変更してから実行しないと再起動後にath79のKernelを起動できず止まる。危険なのでar71xx -> ath79は不可にしてしまうほうが良さそう。)
- rootfs,kernelをfirmwareとして結合
- Kernelがサイズ制限を受ける原因となっているmtdパーティションの構成を変更し、生成されたKernelのサイズに従って柔軟にRootfsの位置が変化できる “firmware” パーティションを使用する。
- U-BootのKernelオフセットを変更
- 前項でmtdパーティションの構成を変更しただけではU-Bootが起動時にKernelを見つけられなくなるため、U-Bootの環境変数内に格納されているオフセットを変更する。
- メーカーファーム -> OpenWrtインストール方法の変更
- mtdパーティションを変更した場合、本来のKernelサイズ制限を超過するKernelが許容されるようになるため、factoryは作成できなくなる。
これに伴い、メーカーファームからOpenWrtへ入れ替える方法を以下の通りに変更する。- ECOボタンを押しながらinitramfsファームでブート
- initramfsファーム上でU-Bootの環境変数を変更
- squashfs-sysupgradeファームでsysupgrade
- 完了
ざっくりと日本語で書く分には楽だけれども、英文で詳細に記述するのはしんどい。