OpenWrtなど純正ではないファームウェアをルーターにインストールする方法は機種によってやり方が様々ですが、 いくつかのパターンに分けられます。ここではその大体の流れを記述します。 だいたいはこのどれかのパターンでインストール/リカバリできると思います。 *●ハードウェア無改造で行う方法 **■Webインターフェースから ***1)アップグレード用ページから 純正Web-GUIのファームウェアアップデート用ページからそのままインストールする方法 一番手軽で簡単。 本来は純正ファームウェア側以外はインストールできないようにチェックが入るが、 メーカー独自の構造が解析されていて、純正に準じる構造に作られているためインストールできる。 (インストール例)(外部サイト)[[WZR-HP-AG300HをOpenWrtで再利用>https://fefcc.net/archives/202]] ([[Webarchive>https://web.archive.org/web/20170504152436/https://fefcc.net/archives/202]]) ***2)デバッグ用ページから 通常では入れないデバッグ画面用画面からインストールする方法 デバッグ用画面への入る際に特殊なIDとPasswordを必要とする場合もあり 本来やっている機種チェックなどを迂回するため対応していないファームウェアをインストールできてしまうリスクあり。 例)Buffalo WZR-HP-AG300H/WZR-HP-G300シリーズ他 **■ telnet/sshのCLIから 標準でtelnet/sshできる機種、デバッグページからtelnetを有効にできる機種の場合、 CLI経由で純正ファームウェアのOSにログインし、OSで用意された機能を使ってインストールできる機種もある。 ***純正ファームウェアのCLIから 純正ファームウェアのLinuxコンソールにアクセスし、コマンドを使ってインストールする方法 QSDKなどOpenWrtベースの純正ファームウェアではsysupgradeコマンドがそのまま使えることもある。 mtdコマンドやddコマンドなどでflashメモリに直接書き込む方法もある。 メーカー側で意図的にコマンドを無効にしている場合もありいつもできるとは限らない。 (インストール例)[[Telnetでのインストール(WZR-HP-G300NH)]] **■ bootloaderの機能で おもに家庭用ルーターの場合、出荷前にファームウェアを入れ替える場合に備えて 機器単体で書き換える仕組みを持ったものが多数ある。 その仕組みを解析して流用し、任意のファームウェアに書き換える方法。 bootloaderさえ起動すればインストールできるので、 他の方法でファームウェアインストールに失敗し、OS起動できない場合にも対応できる。 bootloaderの挙動はLED程度でしか反応を見ることができないため、成否がタイミングで決まるので 何度も試行錯誤して実施することになる場合が多い。 (後述するシリアルポート接続を行いbootloaderのコンソール表示を見ながら下記の方法を試すと成功率は上がる) ***1)TFTP clientで 電源ONとともに作業端末からTFTPクライアントを使って ファームウェアを送り込む方法 ルーターの電源ON後のわずかな時間だけTFTPサーバが起動してファームウェアを受け付ける機種がある。 起動時のIPアドレスは固定になっている。 むやみな書き換えを防ぐために、TFTPサーバ起動時は通常とは違う独自のMACアドレスでARPにも応答しない機種があり、 その場合は作業端末側ARPテーブルにスタティックに登録する必要がある。 例)Buffalo BHR-4RV 、 WHR-G30xN、WZR-HP-AG300H/WZR-HP-G30xNHシリーズ等 (インストール例)[[TFTPでのインストール(BHR-4RV)]]、[[TFTPでのインストール(BHR-4GRV)]] ***2)Webブラウザで 電源ONとともに作業端末からWebブラウザを使って ルーターの電源ON後にbootloader内でHTTPサーバが起動してファームウェアを受け付ける機種がある。 起動時のIPアドレスは固定になっている。 通常のWebブラウザで端末からファームウェアを送り込むことが可能だが インストール可能な時間が短いのでcURLなどのコマンドラインツールを使う方法もある。 例)Buffalo WZR-600DHP2/WZR-900DHP等 Broadcom ARM SoC の CFE bootloader 搭載機種に多く見られる (インストール例)[[bootloader経由のインストール(WZR-900DHP)>https://w.atwiki.jp/ddwrt_openwrt/pages/70.html]] ***3)外部サーバから 1、2)とは逆に電源ON時に外部サーバからファームウェアを取得しようとする機種がある。 外部TFTPサーバに取得しに行く場合が多いが、NFS/HTTP/FTP などもありうる。 以前は外部から読み込んだら直接ファームウェアを書き換えてしまう場合もあったが メモリが十分に増えた最近の機種では、 RAMディスク上で動く最小限の「踏み台OS」を起動させ、踏み台OS経由でファームウェアを書き込む場合が多い。 踏み台OSはinitramfs image と呼ぶ場合もある。 WPS/AOSSボタンを押下しながら電源ONした場合に取得しに行く場合が多い。 例)Buffalo WSR-600DHP/WSR-1166DHP/WSR-1166DHP2/WXR-2533DHP等 Mediatek や Qualcom Atheros SoC の u-boot bootloader搭載機種に多く見られる (インストール例)(外部サイト)[[WSR-1166DHP2にOpenWrtを入れる方法>>http://okoya.seesaa.net/article/460490117.html]] ([[Webarchive>https://web.archive.org/web/20190216044921/http://okoya.seesaa.net/article/460490117.html]]) (外部サイト)[[WSR-1166DHP2にLEDE 17.01.4をインストールしたメモ>>https://openwrtmemo.wordpress.com/2018/01/11/wsr-1166dhp2にlede-17-01-4をインストールしたメモ/]] ([[Webarchive>https://web.archive.org/save/https://openwrtmemo.wordpress.com/2018/01/11/wsr-1166dhp2にlede-17-01-4をインストールしたメモ/]]) *●筐体を開けて基板へのアクセスが必要 **■シリアルコンソール接続で 基板上のシリアル(UART)ピンにUSB-UART変換アダプタなどを介してシリアル接続する。 基板上に最初からシリアルピンが実装されている場合、スルーホールだけの場合、チップから直接引き出す場合がある。 ***1)純正ファームウェアのCLIから 純正ファームウェアのLinuxコンソールにアクセスし、コマンドを使ってインストールする方法。 QSDKなどOpenWrtベースの純正ファームウェアではsysupgradeコマンドがそのまま使えることもある。 mtdコマンドやDDコマンドなどでflashメモリに直接書き込む方法もある。 メーカー側で意図的にコマンドを無効にしている場合もありいつもできるとは限らない。 シリアル経由で認証なしでrootプロンプトに入れる場合と、パスワードが必要な場合がある。 ***2) bootloaderから bootloaderにシリアルアクセスして書き換える方法。 u-bootやCFEなどのbootloader はflashメモリに書き込む方法を持っている場合がほとんど。 OSアップグレード用コマンドが用意されている場合はそれを利用し、 ない場合は基本的な メモリwrite コマンドで対応する場合がある。 OSではないbootloaderにどのようにファームウェアを転送するかが問題となるが、 以下のパターンがある。(bootloaderのbuild方法に依存) ・bootloader側でTFTPサーバなどを起動させ、端末からネットワーク経由で送信する方法。 例)WZR-1166DHP ・bootloaderからTFTP/FTP/HTTP等の外部サーバにファイルを取得しに行く方法 。例)WZR-HP-AG300H ・USBポートに挿したUSBメモリやメモリカードスロットからrawまたはファイルシステム経由で。 例) WXR-2533DHP ・端末からシリアルポート経由でxmodem 等のバイナリ転送プロトコルを使って送信する。 例)WHR-G54S等 **■ 開発用ハードウェアを使う IoT/組み込み開発用の機器を用いて書き換える方法。 bootloaderが起動できない場合や、bootloaderがシリアルコンソール操作を受け付けない場合にも任意のファームウェアを書き換えることがでる。 フラッシュメモリを直接操作するため確実性は高いが、PC以外に必要な機器・器具が必要でルータ本体よりもコストがかかる場合もある。 電子工作の基本的な知識やスキルが必要となる。 ***1)基板上のflashメモリに直接書き込む フラッシュメモリライターを基板上のフラッシュメモリのピンに直接接続してファームウェアを書き込む。 OSやbootloaderの仕様に関係なく書き込んでしまえるので、bootloaderを壊してしまった場合も対応できる。 ピン数が8~16と少ないSPIフラッシュなどの場合はメモリクリップを使ってはんだ付けせずに書き込みができる。 例)WSR-1166DHP (実例)([[Twitter>https://twitter.com/musashino_205/status/964434424921186304]]) NANDフラッシュのように表面実装+多ピンの場合は困難である。 基板上からフラッシュメモリを引き剥がしてフラッシュメモリライターで書き込んだあと、 再はんだ付けして戻す方法があるが、相当なノウハウと実装技術が必要となる。 フラッシュメモリライターは対応できるフラッシュメモリチップの型番や規格が決まっているので、基板上に実装されているものに対応できるものを準備する必要がある。 ***2)JATGを使って書き込む 開発時に使うデバッグ用のJTAGポートが基板上にある機種があり、 ここにJTAGプローブと呼ばれる機器を接続し、機器のOSやbootloaderを介さずに 外部からフラッシュメモリを書き換える方法がある 基板上にJTAG用パターンが残されている機種は多いが、 アクセス方法がSoC型番/フラッシュメモリ型番/基板設計に依存するので 高い組込系開発ノウハウが求められる。 開発用の正規のJTAGプローブと専用ソフトは高額なうえ、 SoCメーカーから秘密保持契約の上で提供される公式のデータシートやマニュアルの情報が必要な場合もあり、 アマチュアが趣味の範囲で手を出すには難しい。 一方でBroadcom BRCM4704(mips)系やAtheros ath79(mips)系などやや古いSoCの場合、 解析が進み電子工作の延長で製作できる簡易版のプローブとurJTAGやOpen-OCD等のOSSなどで対応できる場合もある。 例)Buffalo WHR-G54S / LinkSys WRT54Gシリーズ (インストール実例)(Youtube)[[Meraki MR18 JTAG programing>https://www.youtube.com/watch?v=8lUrxKBYF2Y]]