WG2600HP(経過報告)

さて再びやり始めた新機種のサポートですが、今回は最後の1つがコケておりPRにたどり着かない状況です。

  • きっかけ

    雑記にも書きましたが、3月24日の東海道らぐ横浜当日に「何か面白そうな機種無いかな」と秋葉原に寄ってフラフラ徘徊した際、駅近くのソフマップでWG2600HPを一部部品欠損で¥6,500弱で見つけ(パネルが無いとされていたが全部揃っていた)、ipq806x機と予想されることから購入しました。

  • サポート作業

    • 流れ

      • 筐体を開ける
        ここがしんどい。WPSボタンのある側がまず黒いカバーを外すことができ、その下にさらに金属板が取り付けられたベージュとグレーの中間程度の色をしたカバーが取り付けられている。この2つ目のカバーの取り外しに手間取った。フロント側(USB, RJ-45等と反対側)のツメが銀色の帯と反対側にあり、奥まった位置にあるため上手く引っ掛けてツメを外すことができない。
        最終的に強く力を掛けた際にツメが1つ破損し、その結果大きく開くようになったのでなんとか残りのツメを外して開けた。
      • シリアルを繋ぐ
        基板上にスルーホールで出ており、ハンダ埋めも無いのであまり難しい点は無し。USBやRJ-45側から RX, TX, NC, GND, Vcc。ケーブルは TX, RX, (接続無し), GND, (接続無し)とする。
      • コンソールで色々確認する(失敗)
        WG2600HPではコンソールにパスワードが掛けられており、アクセス不可。OpenWrtベースのQSDKが使用されておりfailsafeへ落ちることはできるものの、ある程度時間が経過すると “watchdog barked!” と出て再起動されてしまい、行動が著しく制限される。そこでrootのパスワードハッシュを見つけはしたものの、パスワードまでは現状特定できずログインもできていない。
        また、U-Bootもブートを中断してコンソールに入ることなどができない上に、何らかのボタンを押しながらブートすることでinitramfsイメージを受け付けるといった機能が無いようで、ビルドしたファームを流し込むことができない。
      • とりあえずファームをビルド
        流し込む手段が見つけられていないものの、とりあえずファームをベース部分だけ組んでビルド。OpenWrtのipq806xでサポート済みの機種のうち “Qualcomm IPQ8064/AP148 (dts: qcom-ipq8064-ap148.dts)” がリファレンスボードらしくWXR-2533DHPでもこれを流用できたので、このdts等をコピーしてWG2600HP用の機種サポートを暫定的に追加する。
        mtdパーティションについてはfailsafeやbootlogから確認できていたので、それを基に定義を追加。
      • U-Bootの環境変数を弄れた
        failsafeで利用できるコマンドを見て回っていたところ、U-Bootの環境変数を表示するfw_printenv、その変更を行うfw_setenvを発見。そのまま叩いてもuciに設定が入っておらず、/etc/fw_env.config も無いのでエラーになるが、/etc/fw_env.config をAPPSBLENVパーティションで記述したところ環境変数の取得と設定を行うことができた。
      • initramfsイメージを投げ込む
        fw_setenvが利用できたので、bootcmdを書き換えてinitramfsイメージをTFTPで取らせてブートする様に変更する。
        コマンドが少々長いので、”ramboot” として分離した。rambootはWXR-2533DHPのものを参考にした。

        fw_setenv autostart yes
        fw_setenv ipaddr 192.168.10.1
        fw_setenv serverip 192.168.10.2
        fw_setenv ramboot "rootfstype=ramfs; tftpboot 0x44000000 wg2600hp.bin"
        fw_setenv bootcmd "run ramboot"
        

        ipaddrでルータ側のIPアドレスを、serveripでTFTP側のIPアドレスを設定する。
        rambootでは、rootfstypeをramfsとして指定、TFTPを利用してサーバから wg2600hp.bin を取得してメモリ上 0x44000000 にロードしてブートする。ただしこれだけではロードしただけで止まってしまうため、自動でブートも行うよう “autostart=yes” を設定する。
        bootcmdでは、rambootに設定したコマンドを実行 (run) する。

      • mtdをバックアップ
        initramfsイメージでブートできたら、弄る前に各mtdパーティションをバックアップしておく。ddしてscpでダウンロードした。
        また、WG2600HPでは バックアップしたうちの “ART” ではなく “PRODUCTDATA” パーティションにMACアドレスが格納されているため、メーカーファーム上で確認しておいた各インターフェースに割り当てられているMACアドレスと比較して始点アドレスを確認する。
      • 各種情報を確認する
        initramfsイメージでブートし、各種情報(主にGPIO周辺)を確認する。
        NECが公開しているWG2600HPのソースコードでは “CONFIG_BOARD_AKRO” として #ifdef にWG2600HPの情報が記述されており、これと合致しているかを確認する。
        WG2600HPのRJ-45ポートにPCなどとケーブルを接続し、リンク状態も確認する。すると、OpenWrtで既にサポートされている他機種とはポート構成が異なっており、ほんとか?という気持ちになった(そうリンクするんだからそれしか無いのだが)。
      • コードを修正してテスト
        確認した情報を基にコードを修正し、再度投入して正常に機能するかテスト。問題が見つかれば再度修正してトライ。
        USBポートやPCIe、各インターフェースのMACアドレス辺りを何度か修正を重ねた。
      • Flashに焼き込み
        initramfsイメージでできる作業がおおよそ完了したら、最後にFlash周りの確認のため焼き込む。
        mtdパーティション等の構成からipq806x内のTP-LINK VR2600vと同じ書き込み方法が使えると判断し、その通りに platform.sh を記述。
        initramfsイメージからsysupgradeで焼き込む前に、FlashからブートできるようにU-Bootのbootcmdを変更する。この際、bootipqを設定するだけだと、kernel自体が破損しているのであればU-Bootのコンソールに自動で落ちるものの、そうではない問題があった場合にブートが止まってしまったり、再起動を繰り返すのみで復旧不能に陥るため、rambootも残すようにする。

        fw_setenv bootcmd "run ramboot || bootipq"
        


        上記でまずrambootを受け付け、それが失敗すればbootipqを実行する。
        bootcmdを設定したらsysupgradeを実行してFlashに焼き込む。ここまでは問題無く成功。

  • 問題

    • sysupgradeで設定を引き継げない

      sysupgradeの際、本来であれば “kernel”, “rootfs” パーティションに新しいファームウェアが書き込まれると同時にバックアップされていたconfig類が書き戻されるはずが、コンソール上にメッセージは出るものの再起動すると初期状態になってしまっている。
      SPI Flash環境でのsysupgradeに通常使用される “default_do_upgrade” を実行した後に “jffs2_copy_config” を実行すればconfig類が引き継がれたものの、コードを確認しても本来であれば “default_do_upgrade” だけでできるはずであり、他に “jffs2_copy_config” を実行している機種は無い。この問題が解決できずしばらくここで作業がストップしてしまっている。
      config類がどこか別のパーティションに書き込まれてしまっているのかと確認したものの、WinMerge等でバイナリのdiffを取ってもkernelとrootfs以外に変更されたパーティションは無かった。
      もう少し追加で詳しく調べてみる予定。

  • 所感とか

    作業中、ミスによってkernelがコンソールに何も吐かない状態にしてしまい、故意にメーカーファームのkernelを破損させる羽目になるなどかなり綱渡りの作業になった(それも、kernelを破損させられずにrootfsをやってしまったらたぶんアウト)。しんどいけど楽しい。
    気になる個所はいくつかあるものの、現状問題らしい問題は上記のsysupgradeの問題1つのみ。さすがにこの状態でPR投げるわけにもいかないため、解決できずストップしてしまっている。
    それまでは(initramfsイメージを投げ込めてからは)サクサクと進んでいたため、まさかそこでコケるとは思わず早いうちにPR投げるまで行けそうと思っていた。
    今のところ解決策が全く思いつかないため、今後Forumで質問してみようかなと思う。場合によってはjffs2_copy_configでPR投げてしまおうかとも考えたものの、メンテナ氏に迷惑かけてしまうのもどうかというところがある。

広告

多摩電子工業 Axing W06

OpenWrt masterに、多摩電子工業 Axingシリーズの小型無線LANルータ “W06 (AW06 / TW06W)” のサポートが追加されました。
upstreamに投げたものとしては、今回が初めてのデバイスサポート。

仕様

個人的に初のMT7688AN。購入時は正直無線の速度などからNexx WT1520に近い(RT5350, RAM 32MB, Flash 4MB)構成かと思っていたものの、実際に開けてみたら余裕を持った構成だった。

  • SoC: MediaTek MT7688AN (575MHz, 1C1T)
  • RAM: DDR2 SDRAM 64MB
  • Flash: SPI Flash 16MB
  • WAN/LAN: 100Mbps x1
  • USB: USB 2.0 Type-A x1
  • UART: x1(RJ45側からGND, RX, TX, Vcc)

その他ハードウェアの詳細については、雑記ブログにメモしてあるのでそちらを参照。

OpenWrt化

メーカーファームがOpenWrtベースであり、またメーカーのアップデート用イメージも独自ヘッダや暗号化が一切無く単純なKernel + Rootfsの構成。そのため、factoryイメージを用意する必要が無かった。

  • W06を起動
    電源供給用のMicroUSBポートにケーブルを接続し、W06を起動
  • W06の無線LANに接続
    W06が起動したら、それが発しているSSIDに接続。LANポート側はデフォルトでWANとして設定されており、ルータのWebUIに接続できない。無線LANはデフォルトでLAN側。
    接続に必要なパスワードはルータ裏側のラベルに記載あり。
  • sysupgradeファームを投入
    WebUIにログインし(デフォルトでは admin/(空))、ファームウェア更新ページへアクセス。通常のアップデート手順でOpenWrtのW06用sysupgradeイメージを選択し、OKを押下するとFlashへの書き込みが開始される。
    この際特にファームウェアのチェックは厳密には行われないようで、すんなりいける(はず)。
  • 完了
    2分前後掛かるものの、Flashへの書き込みが完了して再起動する。
    再起動後、メーカーファームとは異なりLANポートをデフォルトでLAN側に設定してあるため、192.168.1.1でアクセス可。

注意事項など

  • メーカーファームへの書き戻しは、OpenWrt上でバックアップ済みのメーカーファームにおける “firmware” パーティションを使用して
    sysupgrade -F -n firmware.bin
    

    とすることで可。

  • メーカーファームではシリアルコンソールにログインが必要であり、rootにパスワードが設定されている。メーカーファームがそもそもOpenWrtベースであるため、WebUIからOpenWrt化した場合ログインとパスワードも継承されてしまい、OpenWrt化後もLuCIへのログインやSSH、シリアルコンソールでのアクセス時にそのパスワードが要求されてしまう。
    このパスワードについては雑記ブログを云々。
    このログインとパスワードをOpenWrt化後に削除したい場合、WPSボタンを長押しすることでfactory resetが掛かり、OpenWrtの初期状態へリセットされるため削除できる。
  • メーカーファームでは筐体側面のWPSボタンがリセットと共用になっているものの、OpenWrtではリセットボタンのみに設定。

雑感

今回も以前WT1520のリセットボタンを追加した時と同様mkresin氏に助言して頂いたおかげで、なんとかサポート追加をすることができた。感謝。こちらの勘違いなどでだいぶ氏の手を煩わせてしまったけれども、それでもしっかり最後まで対応して頂いたのが非常にありがたい。
また、メンテナ氏の手を煩わせてしまうことになってしまうけれども、やはり自分の中だけで作業するのとPRを投げてやり取りしながら問題を解決して進めるのとでは、得られる知識量が段違い。今回得られた知識を活用しつつ、今後も色々取り組んでいければと思う。

WXR-2533DHP(経過報告2)

前回の経過報告から10日くらい経過し、いくらか進んだのでここで再び経過報告です。

状況

  • U-Bootのbankチェックをパスできるようになった
    • rootfs checksumがどんな値かも判明。xeditで以下の様に出すことができ、
      wxr-2533dhp_133.PNG
      Linuxでの算出方法は某氏より以下を教えて頂いた。

      od -A n -t u1 | tr -s ' ' '\n' | awk '{s+=$0}END{printf "%x", 255-s%256}'
      
    • 上記により、ブート時にU-Bootのコンソールからbootipqを叩いてチェックをスキップさせる必要が無くなった(→ 何もせずブートできる)
  • KernelのRootfsとU-BootのRootfsチェック用にrootfsボリュームを2つ作る必要が生じた
    • U-Bootは “ubi_rootfs” ボリュームのみを、OpenWrtのKernelは “rootfs” ボリュームのみをそれぞれ固定で参照しようとするため。
      • 当初U-Boot側に合わせてOpenWrt側rootfsのボリューム名をubinizeで “ubi_rootfs” に変更したが、何度試してもrootfsの認識に失敗した。結局、OpenWrt側が target/linux/generic/pending-4.9/491-ubi-auto-create-ubiblock-device-for-rootfs.patch でrootfsとして使えるボリュームを “rootfs” のみに固定していることが判明、やむなく別個で作ることにした。
      • OpenWrtビルド時に生成されるrootfsを “ubi_rootfs” にもそのまま使用するとNAND Flash上のスペースを無駄に占有する(OpenWrt側では使用されない)ため、空のフォルダ1個をsquashfs化して、そこにU-Bootのチェックをパスするのに必要なchecksumを付加するようにした。
  • U-Bootの挙動に絡み、KernelはBank1を、RootfsはBank2のモノを使用することにした
    • U-Bootが、Bank2を “破損している” と判定しない限りBank2⇒Bank1の向きで書き戻しを行い、またその際 “kernel” と “ubi_rootfs” のみの書き戻ししか行わないため。
      • WXR-2533DHPでは、メーカーファームでは当然ながらBank1の “kernel”, “ubi_rootfs”, “ubi_rootfs_data” がブートに使用される。
      • その状態でアップデートを行った場合、更新先のファームはBank1ではなくBank2に書き込み、リブートしてU-Bootのbankチェックが実行された際、イメージが異なるとしてBank2からBank1へイメージが書き込まれ、アップデートが完了する仕組みになっている。
      • OpenWrtの場合、KernelはメーカーファームでもOpenWrtでも “kernel” なのでU-Bootにより問題なくBank2⇒Bank1へ書き込まれるが、RootfsはU-Boot用の “ubi_rootfs” がU-Bootに認識され書き戻されるのみで、Bank2にあるOpenWrt用の “rootfs” は何もされない(= Bank1のrootfsが更新されない)。
      • もしOpenWrtでKernelとRootfsを両方ともBank1から起動できるようにする場合、”kernel” と “ubi_rootfs” はBank2に、”rootfs” とデータ領域の “rootfs_data” はBank1にと2か所に書き込まなければならず、手順が面倒になる。
        また、sysupgrade時も両方への書き込みが必要になり、複雑化してしまう。
      • 対して、kernelはBank1、RootfsはBank2としてしまえば、Bank2に書き込まれたOpenWrtの “kernel” とU-Boot用の “ubi_rootfs” は自動でBank1に書き込まれU-Bootはそれをブートするほか、RootfsはBank2に書き込み済みの “rootfs” を読み込ませれば良いのでだいぶ簡単になる。
      • メーカーファームと現時点でのOpenWrtファームにおけるUBIボリュームの使用状況については、雑記にまとめた。
      • ただし、ぶっちゃけ上記の雑記で改めて表にしてみると「ひどいなこれ」という感想しか出てこない。
      • というのを書きながら、’Bank1にイメージ書き込んだ後Bank2から意図的に “kernel” だけボリューム削除して破損扱いにさせれば、通常とは逆向きのBank1⇒Bank2の書き戻しが発生するから、使用するボリュームをBank1にまとめることもできるかな?’ というのが思い浮かんだ。後で試す。
  • sysupgradeまで機能するようにできた
    • WXR-2533DHPでは上の項目で長々と書いた通り “ubi_rootfs” を上手く扱わなくてはならず、その関係上OpenWrtに存在しているsysupgradeスクリプト(というかNAND向けスクリプトのnand.sh)では対応できない。そのため、いくらか引用したうえでbuffalo.shを作成し、 “ubi_rootfs” をバックアップ/書き戻しすることでsysupgradeを行えるようにした。
    • ただし、テスト回数とテスト条件はあまり多く試せていないため、確実性は不安。
    • また、上のBankの取り扱いで最後に書いた思いついたことを試す場合、再度sysupgrade用スクリプトの改変が必要になるため、どうなることやら。
  • PCI周りがエラーらしきものを吐く
    • ブート時にPCI周辺で “無線のFirmwareが読めない” というようなエラーが吐かれる。
      ただしブート完了後無線は正常に機能しているように見え、また少し検索してみても “問題ない” というような記述が見られる。

      ログ

      [   19.985388] ath10k_pci 0000:01:00.0: enabling device (0140 -> 0142)
      [   19.985940] ath10k_pci 0000:01:00.0: pci irq msi oper_irq_mode 2 irq_mode 0 reset_mode 0
      [   20.172091] ath10k_pci 0000:01:00.0: Direct firmware load for ath10k/QCA99X0/hw2.0/firmware-6.bin failed with error -2
      [   20.172147] ath10k_pci 0000:01:00.0: Falling back to user helper
      [   36.077329] firmware ath10k!QCA99X0!hw2.0!firmware-6.bin: firmware_loading_store: map pages failed
      [   36.492146] ath10k_pci 0000:01:00.0: qca99x0 hw2.0 target 0x01000000 chip_id 0x003b01ff sub 168c:0002
      [   36.492179] ath10k_pci 0000:01:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 1
      [   36.502471] ath10k_pci 0000:01:00.0: firmware ver 10.4.1.00030-1 api 5 features no-p2p crc32 d2901e01
      [   36.600352] ath10k_pci 0000:01:00.0: board_file api 2 bmi_id 1:1 crc32 08fa09f2
      [   37.865657] ath10k_pci 0000:01:00.0: htt-ver 2.2 wmi-op 6 htt-op 4 cal pre-cal-file max-sta 512 raw 0 hwcrypto 1
      [   37.953404] ath10k_pci 0001:01:00.0: enabling device (0140 -> 0142)
      [   37.953970] ath10k_pci 0001:01:00.0: pci irq msi oper_irq_mode 2 irq_mode 0 reset_mode 0
      [   38.156469] ath10k_pci 0001:01:00.0: Direct firmware load for ath10k/QCA99X0/hw2.0/firmware-6.bin failed with error -2
      [   38.156515] ath10k_pci 0001:01:00.0: Falling back to user helper
      [   38.307675] firmware ath10k!QCA99X0!hw2.0!firmware-6.bin: firmware_loading_store: map pages failed
      [   38.307815] ath10k_pci 0001:01:00.0: qca99x0 hw2.0 target 0x01000000 chip_id 0x003b01ff sub 168c:0002
      [   38.315640] ath10k_pci 0001:01:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 1
      [   38.327131] ath10k_pci 0001:01:00.0: firmware ver 10.4.1.00030-1 api 5 features no-p2p crc32 d2901e01
      [   38.389439] ath10k_pci 0001:01:00.0: board_file api 2 bmi_id 1:2 crc32 08fa09f2
      [   39.664713] ath10k_pci 0001:01:00.0: htt-ver 2.2 wmi-op 6 htt-op 4 cal pre-cal-file max-sta 512 raw 0 hwcrypto 1
      

今後

  • できればfactoryイメージを作りたいものの、単にKernelとRootfsを投入しただけではリブート後OpenWrtのKernelがRootfsを見つけられなくなるので、どうしたものか

雑感とか

  • SoC(IPQ8064)は負荷に応じてコアごとにクロックが変動していた(384MHz – 1,400MHz)
  • LuCIのページ遷移が体感的に速い
  • どこかで有線のiperf計測したい

お知らせっぽいもの

  • 今のところ今年2月のOSC 2018 Tokyo/Springにて、東海道らぐブースの場所をお借りしてWXR-2533DHPを動態展示させていただく予定です。
    色々詳しい方にご意見等頂ければと思います。

WXR-2533DHPをメーカーファームに書き戻す

弄るうえで一番重要な気がする。書くのを忘れていた。

WXR-2533DHPでのfirmware

WXR-2533DHPでは、U-Bootやデバイス固有の情報(WPS PIN、無線の事前共有鍵、MACアドレス、その他色々)を4MBのSPI Flashに持ち、KernelとRootfs、Rootfs_data は256MBのNAND Flashに持っている。

このうちNANDでは、前半128MB分が 0x0 – 0x4000000 と 0x4000000 – 0x8000000 にそれぞれ分割され、それぞれ mtd0, mtd1 として割り当てられており、それぞれに Kernel + Rootfs + Rootfs_data の同一のイメージが格納されている。ちなみに、後半128MB分は使用されず空。
ただしデータは直接mtdに書き込まれているのではなく、書き込み分散などのウェアレベリング機能を有するUBIにより “kernel”, “ubi_rootfs”, “ubi_rootfs_data” パーティションが形成され、その中にそれぞれ格納されている。

このためか、mtdに対してそのバックアップを直接

# mtd write mtd0.bin /dev/mtd0

として書き込んでも、エラーが大量に出るようになってしまう。

書き戻し

そこで、書き戻しには ubiformat または ubiupdatevol を使用する。

  • ubiformat
    mtdをUBIとしてフォーマットするコマンドではあるものの、-f オプションでイメージの書き込みも可。
    # ubiformat -f <image> <mtd>
    

    上記コマンドを使い、メーカーファームで

    # dd if=/dev/mtd0 of=/tmp/mtd0.bin
    

    などとして取得したイメージを投入する。現状ビルドできているOpenWrt initramfsイメージ上からも可。
    例:

    # ubiformat -f mtd0.bin /dev/mtd0.bin
    

    ただし指定したmtdがUBIでattachされている場合は書き込みができずエラーが出るため、先に ubidetach でdetachしておく。

    # ubidetach -p /dev/mtd0
    
  • ubiupdatevol
    mtd上に存在するUBI Volumeに対して、個別で更新を実行するコマンド。メーカーファームでのファームアップデートでもこれが使われていた。
    ubiformatとは異なり、先にmtdがUBIでattachされている必要がある。

    # ubiattach -p /dev/mtd0
    # ls -al /dev/ubi*
    

    /dev/ubi*_* の最初の数字は、マウントされた順番で割り当てられる。2つ目は 0: kernel, 1: ubi_rootfs, 2: ubi_rootfs_data 。
    基本はそれぞれにkernelやrootfsの単体のイメージを焼き込む。単一のイメージから位置とサイズを指定して実行することも可能。
    位置の指定は、メーカーファームではoffsetを意味する -o オプションが該当、OpenWrtでは –skip オプションが該当すると思われる。

    ubiupdatevol <ubi> <image>
    

    例:

    ubiupdatevol /dev/ubi0_1 /tmp/ubi0_1.bin
    

    メーカーファームでのkernelやrootfsの取り出しは、/dev/ubi*_* をcatでファイルに出力することで可能だった。

WXR-2533DHPをOpenWrtでサポートしてみる(経過報告)

Twitterのほうで色々悩みながら進めてるOpenWrt (LEDE)におけるBUFFALO WXR-2533DHPのサポート追加ですが、まだまだ終わりが見えません。なのでとりあえず経過報告です。

状況

  • OpenWrtのinitramfsイメージでブートできる
    • U-Bootから
      run ramboot
      

      を実行すると、192.168.11.10に “wxr2300-initramfs.uImage” を取りに行く

  • initramfsでブートして、ubiformatを使用してmtd0にOpenWrtを焼き込んで再起動、U-Bootのイメージチェックを特定の操作で回避するとOpenWrtでブートできる
    • ブート中断してU-Bootのコンソールに入り、
      bootipq
      

      を実行

  • 回避策を使わずにそのままブートさせた場合、U-BootによるNAND内bank1, bank2のチェックの際にrootfsのchecksumがエラーだとして弾かれ、bank2からbank1へ書き戻されてしまう
  • U-Bootがチェックに使用するchecksumは、kernelはヘッダに含まれるdata CRC、rootfsは末尾 1Byte
    • v1.32では 0x64 、v1.33では 0xD3
    • メーカーのアップデートファームを展開した場合、rootfsのchecksumの後ろにさらに不明な値が 1Byte付く。
  • rootfsのchecksum算出方法が不明

U-Bootやハードウェアなどの詳細に関しては、雑記の WXR-2533DHP – 大破雑記帳 を参照

作業用OpenWrt リポジトリ

musashino-build/openwrt – devadd/wxr-2533dhp

OpenWrt ファーム

現状ビルドできているファーム。LEDはWANやLAN、USBなどにそれぞれ設定済み
taiha.net/jenkins

  • initramfs
    • openwrt-ipq806x-WXR-2533DHP-initramfs-uImage
      run ramboot用
  • squashfs
    • openwrt-ipq806x-WXR-2533DHP-squashfs-nand-factory.ubi
      initramfsでの
      ubiformat -f <image> /dev/mtd0
      

      実行用

  • factory
    • openwrt-ipq806x-WXR-2533DHP-squashfs-factory.bin
      factoryイメージ(を目指したいもの)。現状正しく投入できず要調整(作り方はたぶんar71xxのBHR-4GRV2が近い)

一言

rootfsのchecksumがどこにあるのか謎だったところから進んだが、今度はchecksumの算出方法が全く分からない。詳しい方、いつでもお待ちしております。

ログ

  • bootm=”bootipq debug”(一部)

    BUFFALO WXR-2533DHP U-Boot Ver 1.14 (May 18 2015 - 13:24:36)
    
    CPU:   IPQ8064 clock 1.4 GHz
    DRAM:  DDR3 512 MiB clock 533 MHz
    NAND:  ECC 4 bits, 256 MiB
    SF: Detected W25Q32 with page size 64 KiB, total 4 MiB
    MMC:   
    In:    serial
    Out:   serial
    Err:   serial
    cdp: get part failed for 0:HLOS
    cdp: get part failed for rootfs
    Net:   MAC2 addr:74:3:bd:bc:1d:98
    athrs17_reg_init: complete
    athrs17_vlan_config ...done
    S17c init  done
    eth1
    Memory Test Start
    Pattern: 55555555
    Pattern: AAAAAAAA
    Pattern: 00000000
    Memory Test Pass 
    
    Hit any key to stop autoboot:  0 
    Checking Bank1 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    Bank1 Image is good
    kernel_checksum is 0x74fdd894 , rootfs_checksum is 0x64 
    Checking Bank2 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000004000000-0x000008000000 : "mtd=0"
    Bank2 Image is good
    kernel_checksum is 0x74fdd894 , rootfs_checksum is 0x64 
    Bank1 Image the same as Bank2 Image 
    MMC Device 0 not found
    
    dmagic1 0 dmagic2 0 
     
    MMC Device 0 not found
    Using nand device 1
    Device 1: nand1... is now current device
    bootargs=console=ttyHSL1,115200n8 ubi.mtd=rootfs root=mtd:ubi_rootfs rootfstype=squashfs
    Booting from flash
    set mtdids nand0=nand0 && set mtdparts mtdparts=nand0:0x4000000@0x0(fs),${msmparts} && ubi part fs && ubi read 0x44000000 kernel && bootm 0x44000000
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
       Image Name:   Linux-3.4.103
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    1826120 Bytes = 1.7 MiB
       Load Address: 41508000
       Entry Point:  41508000
       Loading Kernel Image ... OK
    OK
    Setting up atags for msm partition: rootfs
    
    device nand0 <nand0>, # parts = 1
     #: name                size            offset          mask_flags
     0: fs                  0x04000000      0x00000000      0
    
    active partition: nand0,0 - (fs) 0x04000000 @ 0x00000000
    
    defaults:
    mtdids  : none
    mtdparts: none
    Using machid 0x1260 from environment
    
    Starting kernel ...
    

  • run ramboot(一部)

    BUFFALO WXR-2533DHP U-Boot Ver 1.14 (May 18 2015 - 13:24:36)
    
    CPU:   IPQ8064 clock 1.4 GHz
    DRAM:  DDR3 512 MiB clock 533 MHz
    NAND:  ECC 4 bits, 256 MiB
    SF: Detected W25Q32 with page size 64 KiB, total 4 MiB
    MMC:   
    In:    serial
    Out:   serial
    Err:   serial
    cdp: get part failed for 0:HLOS
    cdp: get part failed for rootfs
    Net:   MAC2 addr:74:3:bd:bc:1d:98
    athrs17_reg_init: complete
    athrs17_vlan_config ...done
    S17c init  done
    eth1
    Memory Test Start
    Pattern: 55555555
    Pattern: AAAAAAAA
    Pattern: 00000000
    Memory Test Pass 
    
    Hit any key to stop autoboot:  0 
    (IPQ) # run ramboot
    Using eth1 device
    TFTP from server 192.168.11.10; our IP address is 192.168.11.1
    Filename 'wxr2300dhp-initramfs.uImage'.
    Load address: 0x44000000
    Loading: #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             #################################################################
             ###############################
    done
    Bytes transferred = 5478980 (539a44 hex)
       Image Name:   ARM OpenWrt Linux-4.9.73
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    5478916 Bytes = 5.2 MiB
       Load Address: 42208000
       Entry Point:  42208000
       Loading Kernel Image ... OK
    OK
    mtdids not defined, no default present
    info: "mtdparts" not set
    Using machid 0x1260 from environment
    
    Starting kernel ...
    

  • ubiformat -f /dev/mtd0(一部)

    root@OpenWrt:/# cd /tmp
    root@OpenWrt:/tmp# wget http://taiha.net/jenkins/job/OpenWrt-master-BUFFALO-WXR-
    2533DHP/lastSuccessfulBuild/artifact/bin/targets/ipq806x/generic/openwrt-ipq806x
    -WXR-2533DHP-squashfs-nand-factory.ubi
    Downloading 'http://taiha.net/jenkins/job/OpenWrt-master-BUFFALO-WXR-2533DHP/lastSuccessfulBuild/artifact/bin/targets/ipq806x/generic/openwrt-ipq806x-WXR-2533DHP-squashfs-nand-factory.ubi'
    Connecting to 240b:12:500:6570:c822:64a3:7e11:4961:80
    Writing to 'openwrt-ipq806x-WXR-2533DHP-squashfs-nand-factory.ubi'
    openwrt-ipq806x-WXR- 100% |*******************************|  6144k  0:00:00 ETA
    Download completed (6291456 bytes)
    root@OpenWrt:/tmp# ubiformat -f openwrt-ipq806x-WXR-2533DHP-squashfs-nand-factor
    y.ubi /dev/mtd0
    ubiformat: error!: please, first detach mtd0 (/dev/mtd0) from ubi0
    root@OpenWrt:/tmp# ubidetach -p /dev/mtd0
    [  388.945705] ubi0: detaching mtd0
    [  388.947550] ubi0: mtd0 is detached
    root@OpenWrt:/tmp# ubiformat -f openwrt-ipq806x-WXR-2533DHP-squashfs-nand-factor
    y.ubi /dev/mtd0
    ubiformat: mtd0 (nand), size 67108864 bytes (64.0 MiB), 512 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
    libscan: scanning eraseblock 511 -- 100 % complete  
    ubiformat: 512 eraseblocks have valid erase counter, mean value is 1
    ubiformat: flashing eraseblock 47 -- 100 % complete  
    ubiformat: formatting eraseblock 511 -- 100 % complete  
    root@OpenWrt:/tmp# reboot
    root@OpenWrt:/tmp# [  407.346606] br-lan: port 1(eth1.1) entered disabled state
    [  407.354586] device eth1.1 left promiscuous mode
    [  407.354607] device eth1 left promiscuous mode
    [  407.358018] br-lan: port 1(eth1.1) entered disabled state
    [  407.373520] IPv6: ADDRCONF(NETDEV_UP): eth1.1: link is not ready
    [  411.923545] reboot: Restarting system
    
    
    BUFFALO WXR-2533DHP U-Boot Ver 1.14 (May 18 2015 - 13:24:36)
    
    CPU:   IPQ8064 clock 1.4 GHz
    DRAM:  DDR3 512 MiB clock 533 MHz
    NAND:  ECC 4 bits, 256 MiB
    SF: Detected W25Q32 with page size 64 KiB, total 4 MiB
    MMC:   
    In:    serial
    Out:   serial
    Err:   serial
    cdp: get part failed for 0:HLOS
    cdp: get part failed for rootfs
    Net:   MAC2 addr:74:3:bd:bc:1d:98
    athrs17_reg_init: complete
    athrs17_vlan_config ...done
    S17c init  done
    eth1
    Memory Test Start
    Pattern: 55555555
    Pattern: AAAAAAAA
    Pattern: 00000000
    Memory Test Pass 
    
    Hit any key to stop autoboot:  0 
    Checking Bank1 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    UBI: volume 2 ("ubi_rootfs_data") re-sized from 9 to 457 LEBs
    Rootfs Checksum Error
    Bank1 Image is fail
    Checking Bank2 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000004000000-0x000008000000 : "mtd=0"
    Bank2 Image is good
    kernel_checksum is 0x74fdd894 , rootfs_checksum is 0x64 
    Cpoy to Bank1 Image from Bank2 Image 
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    1826184 bytes written to volume kernel
    size > volume size! Aborting!
    
    NAND erase: device 0 offset 0x0, size 0x4000000
    Erasing at 0x3fe0000 -- 100% complete.
    OK
    Try again
    Checking Bank1 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    UBI: empty MTD device detected
    UBI: create volume table (copy #1)
    UBI: create volume table (copy #2)
    UBI Volume is empty 
    Bank1 Image is fail
    
    NAND erase: device 0 offset 0x0, size 0x4000000
    Erasing at 0x3fe0000 -- 100% complete.
    OK
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    UBI: empty MTD device detected
    UBI: create volume table (copy #1)
    UBI: create volume table (copy #2)
    Creating dynamic volume kernel of size 5332992
    Creating dynamic volume ubi_rootfs of size 31490048
    Creating dynamic volume ubi_rootfs_data of size 5332992
    Bank1 UBI Partition is Broken
    Checking Bank2 Image ... 
    Creating 1 MTD partitions on "nand0":
    0x000004000000-0x000008000000 : "mtd=0"
    Bank2 Image is good
    kernel_checksum is 0x74fdd894 , rootfs_checksum is 0x64 
    Cpoy to Bank1 Image from Bank2 Image 
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
    1826184 bytes written to volume kernel
    15233705 bytes written to volume ubi_rootfs
    MMC Device 0 not found
    
    dmagic1 0 dmagic2 0 
     
    MMC Device 0 not found
    Using nand device 1
    Device 1: nand1... is now current device
    bootargs=console=ttyHSL1,115200n8 ubi.mtd=rootfs root=mtd:ubi_rootfs rootfstype=squashfs
    Booting from flash
    set mtdids nand0=nand0 && set mtdparts mtdparts=nand0:0x4000000@0x0(fs),${msmparts} && ubi part fs && ubi read 0x44000000 kernel && bootm 0x44000000
    Creating 1 MTD partitions on "nand0":
    0x000000000000-0x000004000000 : "mtd=0"
       Image Name:   Linux-3.4.103
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    1826120 Bytes = 1.7 MiB
       Load Address: 41508000
       Entry Point:  41508000
       Loading Kernel Image ... OK
    OK
    Setting up atags for msm partition: rootfs
    
    device nand0 <nand0>, # parts = 1
     #: name                size            offset          mask_flags
     0: fs                  0x04000000      0x00000000      0
    
    active partition: nand0,0 - (fs) 0x04000000 @ 0x00000000
    
    defaults:
    mtdids  : none
    mtdparts: none
    Using machid 0x1260 from environment
    
    Starting kernel ...