注意【追記】
URoad-Home2+専用のOpenWRTを作成したので、OpenWRTをインストールしたい場合はそちらを試してみてください。
URoad-Home2+(URoad-TEC101)へのOpenWRTのインストール方法
導入
前回の記事でUART(シリアルポート)をつないで、ログを読んだりしたので、今回はtftpでOpenWrtを転送してRAM上で実行しようと思います。記事書きながら思いましたが、loadbを使う方法の方が楽な気がします。(2022/12/24追記:loadbは死ぬほど遅いからおすすめしません)
今回の記事は友達に教えないと行けなかったので割りと丁寧に初心者向けに書いています。友達以外の玄人の方々は読みにくいかも知れませんがご了承下さい。
URoad-Home関係の記事の一覧と概要はこちら
下準備
今回はもちろんURoad-Home2+用のファームウェアは出てないので、構成の似たルータのものを片っ端から動かして、ある程度動作するものを探します。OpenWrt Table of Hardware: Full detailsとかを使うと探しやすいです。ダウンロードするのはRAM上で実行する用のinitramfsです(先程のTable of Hardwareだとinitramfsのファームウェアがなかったり古かったりするので、各機種のOpenWrtのTechdataやダウンロードフォルダに飛んでのダウンロードを推奨)。今回は色々試した結果、NETGEAR R6100がNANDが読めて、イーサネットが使える(eth1のみ)のでこれを使用しました。ただ、このあたりのNETGEAR機は一般的なU-Boot機とことなり、ヘッダーの4Byteのマジックナンバーが異なり、36 30 30 30となっていたので、27 05 19 56と書き換えてマジックナンバー後のCRCチェックサムの4Byteをこの記事どおりに計算し直して、ファームウェアは完成です。
また、OpenWrtで落としてきたR6100用の物ではどうやらスイッチ用のチップ(Atheros QCA9882-2R4E)にリセットボタン用のGPIOが付いていて、そのチップが存在しないためリセットボタンが押されている判定になるのか、Fail Safeモードに入ってしまうので、スイッチ用のチップのドライバを抜いたバージョンをビルドしました。ビルド方法については今度の記事であげようと思います。とりあえずビルドしてヘッダを変更したものをアップロードしておきました。
tftpサーバー側の準備はBuffaloのルーターの復旧方法と似ていて、U-Bootでtftpbootを実行するとわかるのですが、URoad-Home2+側に192.168.0.20のIPアドレスが割り当てられて、192.168.0.2をtftpサーバーとしてファイルのダウンロードを行います。
今回はtftpサーバがWindowsであることを想定して行います。まずはじめにパソコンとURoad-Home2+を有線LANで直接接続してください。このとき、URoad-Home2+のもう一つのポートに別の有線LANは接続しないでください。そして、コントロールパネルのネットワーク接続から接続したインターフェースのIPアドレスを192.168.0.2に変更します。
tftpサーバは古のソフト3CDaemonを使用します。設定で適当なフォルダを設定して、そのフォルダの中に先程のファームウェアを入れておきます。3CDaemonのtftp serverをGOボタンを押して開始します。
起動手順
1. U-Bootのコンソールに入る。
前回の記事に書いたとおりに、起動時に適当なキーを長押ししてコンソールに入ります。
2. tftpbootでファームウェアをメモリの0x81000000から置くtftpboot 0x81000000 openwrt-ath79-nand-netgear_r6100-initramfs-kernel_URoad-Home2custom.bin
読み込みが全然成功しなかったりするときは、Ctr+cで一度中止し、パソコンのIPアドレスを見直して3CDaemon一度Stopして再度GOさせると上手く行ったりします。
3. 起動!bootmコマンドで0x81000000から実行されます。bootm
4. ログがある程度落ち着いたらエンターを押してコンソールを出します。これで起動は完了です。
5. 以下はOpenWrt上でのインターネットへのつなぎ方です
まず、eth1(ケースに書いてるところのLAN2)にインターネットに繋がっている有線LNAを接続します。DHCPサーバ機能の無効化の仕方がわからなかったので、インターネットに繋がりますが必要最低限の接続時間にしてください。
6. eth1を一旦無効にします。ip link set eth1 down
7. IPアドレスを割り当てます。
ip address add IPアドレス/マスクbit数 dev eth1
ifconfig eth1 IPアドレス
8. eth0を有効化します。
ip link set eth1 up
9. ディフォルトルートを設定します。route add default gw ディフォルトゲートウェイのIPアドレス netmask サブネットマスク
10. firewallを止めます。(必要に応じて)service firewall stop
おわりに
はじめに書きましたがloadb使えばよかったなーって…
このあと、自分はDDを使ってNANDのバックアップを取って、tftpで吸い出したんですが、どうやらベースとしたファームウェアによってcat /proc/mtd
で得られるパーティションが異なるのでファームウェア依存なのかも知れません。(要研究)
ちなみにインターネットにつながったのでopkgが使えて、luciがインストールできました。
Luciもインストールできた
— Unagi Dojyou (@Unagi_Dojyou) December 18, 2022
まあ、initramfsだから、あんまり意味ないけどね pic.twitter.com/QJHA5F7oyk