大破ログ (original) (raw)

WR8750N 内部

2019年頃に一度まとめ上げたものの、当時サードパーティのU-Boot(U-Boot本家ではない)を使用していた為に投入を見送り作業終了としていたものを復活させて投げ込み、マージされたものです。

まとめていきます。

仕様

いずれも既に10数年前に発売されたAR9344搭載機であり、それ故に全体的な構成は古めです。

法律の関係上、無線機能の仕様は非推奨です

共通

WR8750N, WG600HP

WR9500N

その他詳細については、雑記を参照。

OpenWrt化

諸々の課題を解決出来た為、2段階ではあるもののfactoryイメージを仕立てることができています。

  1. WR8750N/WR9500N/WG600HPを起動
    なお、ルータモードに設定されていることを前提とする
  2. http://192.168.0.1/ にアクセスし、ファームウェア更新ページに移動
  3. OpenWrtのfactory.binイメージを選択し、更新実行ボタンを押下
  4. アップデートが完了し再起動後にOpenWrt上にuboot.binとsysupgradeイメージをアップロード(あるいはダウンロード)
  5. uboot.binで "bootloader" パーティションを書き換えてブートローダをU-Bootへ置き換え
 mtd write <uboot.bin> bootloader  
  1. sysupgradeイメージでsysupgradeを実行
 sysupgrade <sysupgrade.bin>  
  1. Flashに書き込み後再起動され、OpenWrtが起動して完了

備考

作業時の色々

色々

正直なところ、スペックで言ってしまえば今更感は強いものの、もう何年も諦め悪くどうにかできないかと何かと考え続けていたこの3機種を投入しマージされたことで、だいぶ達成感が強い。

積極的に確保する意義は薄いものの、家に残っているなどの理由で試しに投入してみるには良さそう。

QCA9558を搭載するWG1400HP等については、U-Boot側のSoCサポートをU-Boot本家に投げる必要がありそうで、今後どうするかは思案中。

WSR-2533DHPL2内部

それぞれ市川大野と吉川のハードオフで見付けて少し迷った末に確保し、作業して投げ込んだものです。

まとめていきます。

仕様

大まかには既にサポート済のWSR-2533DHPL (DHP)とハードウェア構成が近く、一方でSPI-NORではなくRAW NANDを搭載するなどある程度変更されています。
WSR-2533DHPL2とDHPLSではほぼ同一のハードウェア構成。

法律の関係上、無線機能の仕様は非推奨です

共通

WSR-2533DHPL2

WSR-2533DHPLS

その他詳細については、雑記を参照。

OpenWrt化

WSR-2533DHPLとは異なり、factoryイメージを生成できている為、直接投入することが可能です。

  1. WSR-2533DHPL2/DHPLSを起動 なお、ルータモードに設定されていることを前提とする
  2. http://192.168.11.1/ にアクセスし、ファームウェア更新ページに移動
  3. OpenWrtのfactory.binイメージを選択し、更新実行ボタンを押下
    • factory-uboot.binは使用しない
  4. Flashに書き込み後再起動され、OpenWrtが起動して完了

備考

作業時の色々

色々

少々時間は要したものの、マージされたので一安心。

WSR-2533DHPLSはパーティション構成の関係上容量に若干難があるものの、選択肢が増えたので良し。

FortiGate 52E内部

ある時既にサポート済のFortiGate 50Eを追加で確保しようかどうしようか、とヤフオクを眺めていたところ、偶然FortiGate 52Eを見掛け、その後色々あり増えていき作業したものです。

マージされたので、まとめていきます。

仕様

既にサポート済のFortiGate 50Eと同様に、ほとんどの機種でFortiSOCまたはIntel CPUを搭載するFortiGateの中ではかなり珍しく、Marvellの汎用SoCである88F6820を搭載。

今回サポートされた機種はいずれも50Eの系列機であり、基本的なハードウェア仕様は50Eと同一。

共通

FortiGate/FortiWiFi 51E

FortiGate 52E

その他詳細については、雑記を参照。

OpenWrt化

ブートローダが主に復旧用としてファームウェア投入機能を持つ為、それを使用してinitramfsイメージを踏み台とする

なお、 "FG-5xE" と称する

  1. FG-5xEのブートメニューを表示させる

電源を接続しブートする途中、 Please wait for OS to boot, or press any key to display configuration menu と表示されたタイミングで適当なキーを押下し、ブートメニューに入る 2. ##### コンソールポートのbaudrateを9600bpsに設定
ブートメニュー上で [I]: System information. から [S]: Set serial port baudrate. を呼び出し、baudrateを9600に設定する 3. ##### TFTPサーバを用意
ブートメニュー上で [R]: Review TFTP parameters. を呼び出してTFTP関連の情報を表示し、それに従ってTFTPサーバを用意する
なお、PCはTFTP関連情報内で示されているポートに接続する
また、OpenWrtのinitramfsイメージは image.out にリネームの上TFTPフォルダに配置する 4. ##### TFTPでinitramfsイメージをダウンロード
ブートメニュー上で [T]: Initiate TFTP firmware transfer. を呼び出してTFTPを実行し、initramfsイメージをサーバからダウンロードする 5. ##### initramfsイメージを実行
TFTPサーバからのダウンロードが完了後、 Save as Default firmware/Backup firmware/Run image without saving:[D/B/R]? と表示されたら R キーを押下し、Flashには書き込まずブートする 6. ##### メーカーファームウェアをバックアップ
もし将来的にメーカーファームウェアに書き戻す可能性がある場合など、必要であればメーカーファームウェアをバックアップする
dd を用い、 /proc/mtd を確認の上

 root@OpenWrt:/# mkdir /tmp/mtd  
 root@OpenWrt:/# cd /tmp/mtd  
 root@OpenWrt:/tmp/mtd# cat /proc/mtd  
 dev:    size   erasesize  name  
 mtd0: 001c0000 00010000 "u-boot"  
 mtd1: 00010000 00010000 "firmware-info"  
 mtd2: 00010000 00010000 "dtb"  
 mtd3: 00010000 00010000 "u-boot-env"  
 mtd4: 00010000 00010000 "board-info"  
 mtd5: 00600000 00010000 "kernel"  
 mtd6: 01800000 00010000 "rootfs"  
 mtd7: 00600000 00010000 "kn2"  
 mtd8: 01800000 00010000 "rfs2"  
 mtd9: 01200000 00010000 "part1"  
 mtd10: 01200000 00010000 "part2"  
 mtd11: 01e00000 00010000 "config"  
 root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock1 of=mtd1_firmware-info.bin  
 128+0 records in  
 128+0 records out  
 root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock5 of=mtd5_kernel.bin  
 12288+0 records in  
 12288+0 records out  
 root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock6 of=mtd6_rootfs.bin  
 49152+0 records in  
 49152+0 records out  

バックアップをデバイスに書き戻す際は、 mtd コマンドを用いて書き込む

 mtd write <backup image> <target partition>  

例)

 mtd write mtd1_firmware-info.bin firmware-info  
 mtd verify mtd1_firmware-info.bin firmware-info    # 書き込まれたデータが元データと一致するか検証  
  1. OpenWrt上でsysupgradeを実行

scpなどを用いてsysupgradeイメージをデバイス上にアップロード(またはダウンロード)し、sysupgradeを実行する 8. ##### 完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動する
この時メーカーファームウェアで起動してしまう場合は、ブートメニューに入った上で [B]: Boot with backup firmware and set as default. を呼び出し、デフォルトのOSイメージをOpenWrtを書き込んだ1番目の方に切り替える

備考

作業時の色々

色々

今回はFortiGate 50E系列機が一気に増加。国内ではFortiGate/FortiWiFi 51Eは見当たらないものの、選択肢が増えたので良し。

mSATA SSD搭載機はパフォーマンス面の不足は少々あるものの、使い方の幅が広がる点においては大きい。

WRC-X1800GS内部

秋葉原方面などで新品が安価に放出された折に、とある方より提案を頂いて提供頂いたものです。

まとめていきます。

仕様

サポート済のWN-DEAX1800GRに続いて2機種目の、MT7621ベースな11ax機です。基本的にはWN-DEAX1800GRとハードウェア構成は近くなっています。

WRC-X1800GSもどちらかというとAP寄りの使用を想定した機種であるのか、有線ポートは計3ポートに絞られています。

なお、法律の関係上無線機能の使用は非推奨です。

その他詳細については、雑記を参照。

OpenWrt化

これもWN-DEAX1800GRと同様に、2段階での導入が必要です。

  1. WRC-X1800GSをブート
  2. http://192.168.2.1/ にアクセスし、ファームウェアの更新ページへ移動
  3. OpenWrtのinitramfs-factory.binイメージを選択して適用ボタンを押下し、ファームウェアの更新を実施
  4. 更新が完了後再起動されるので、OpenWrtで起動したらsysupgrade.binイメージをscp等を用いてデバイス上に転送し、sysupgradeを実施
  5. Flashへの書き込みが完了後再起動され完了

備考

作業時の色々

色々

提供頂いた後、他機種と並行しながらも作業を進め、デュアルブートできないかと思いつつもLinux Kernelその他の仕様上厳しいことがわかり断念するなどしながらも何とかマージまで到達。

11ax対応機ながら元々がエントリー帯であることから新品でも放出価格がだいぶ落ちており、選択肢としてアリかもしれない。

WMC-S1267GS2, WMC-M1267GST2内部

吉川のハードオフに立ち寄った際、ジャンク扱いでかなり安くセット品であるDLGST2を見付け、その場で散々迷った末に確保したものです。

マージされてから1か月近く経過してしまっていますが、まとめていきます。

仕様

基本的には既にサポート済のELECOM WRC-1167GS2やWRC-1167GST2にほぼ同等のハードウェア構成であり、特段目新しい点は無し。

なお、法律の関係上無線機能の使用は非推奨です。

共通

WMC-M1267GST2

WMC-S1267GS2

その他詳細については、雑記を参照。

OpenWrt化

既にサポート済のWRC-*GS/GSV/GST(2)系統と同様に、factoryイメージによる直接投入が可能です。

  1. WMC-M1267GST2またはWMC-S1267GS2をブート
  2. http://192.168.2.1/ にアクセスし、ファームウェアの更新ページへ移動
  3. OpenWrtのfactory.binイメージを選択して適用ボタンを押下し、ファームウェアの更新を実施
  4. Flashへの書き込みが完了後再起動され完了

備考

作業時の色々

色々

Wi-Fi 5 (11ac)世代であることから既に中古もだいぶ価格が落ちており、WRC-*GS/GSV/GST(2)系列と併せて手軽に導入できる機種としての活用も良さそう。

特にWMC-S1267GS2はWANポートが無い点はやや引っ掛かるものの、子機故にメーカーファームウェアでは単体で使用できないからか、少し前に安価で新品が放出されるなどしていたことから、選択肢としてアリかもしれない。

さて、最近のELECOM公式のセールによってすっかりお馴染みとなったWAB-I1750-PSですが、OpenWrtにおいて "SERIAL" ポートの動作がサポートされました。

留意する点がいくつかある為、まとめていきます。

仕様

OpenWrtにおけるSERIALポートの使用

2024/03/26改訂: WAB-I1750-PSのサポート用コードを変更するほか、OpenWrtのシステム系に手を入れることでLinux KernelやOpenWrtのコンソールをデフォルトで割り当てられそうだ、と思い至ったので変更を試して投げ込み、マージされました。

下記コミット以降において、U-Boot部分とOpenWrtの一部システムメッセージを除いて、 "SERIAL" ポートを "SERVICE" ポートと同様に利用することが可能です。

procd: update to Git HEAD (2024-03-25) · openwrt/openwrt@ff064b6

何らかのアプリケーションで /dev/ttyATH1 をオープンするか、ポートにOpenWrtのコンソールを結び付けるなどして使用してください。

* ### 共通 * シェル上でbaudrateをデフォルトの9600bpsから変更する場合は、stty コマンド等を使用する * 例: stty -F /dev/ttyATH1 115200

技術的な話

WAB-I1750-PSが搭載しているSoCであるQualcomm Atheros QCA9558の属するQCA955xシリーズでは、プライマリのUARTにはごく一般的な8250互換である16550 UARTを搭載しているが、それに加えてセカンダリとしてAtheros AR933xが搭載するUARTと互換のものを備えている。
前者は "SERVICE" ポートや、それと同一ラインである内部ピンヘッダに割り当てられ、メーカーによるデバッグや復旧用となっている一方で、後者はこの記事で主題となっている "SERIAL" ポートに割り当てられ、ユーザーによる設定用として供用されている。

QCA955x SoCにおいて、16550 UARTは何ら問題無くサポートされ機能する状態であるものの、AR933x互換UARTについてはこれまでQCA955x SoC上ではOpenWrtにおいてサポートされておらず、WAB-I1750-PSのサポートがOpenWrt公式にマージされた時点では使用不可の状態であった。
ただ、それがマージされた時点で少々気になっていた点があり、落ち着いてからDeviceTreeを弄ってみたところ、Linux Kernelへのpatch等は無しで動いてしまった。そこで折角だからとQCA955x SoCにAR933x互換UARTのサポートを追加する変更と、WAB-I1750-PSでそれを有効化する変更を仕立ててOpenWrt公式に投げ込み、マージされた。
これにより、OpenWrt公式のファームウェアでも "SERIAL" ポートが使用できる状態となった。
ちなみに、できればメーカーファームウェアと同じ115200bpsで動作させたかったものの、DeviceTreeプロパティの current-speed がAR933x互換UARTのドライバではサポートされていなかった為、やむなく9600bpsで置いておくことになった。

当初はLinux Kernelのdmesgも "SERIAL" ポートに "SERVICE" ポート同様出力させようとしてみたものの、OpenWrtのプロセス管理ツール(systemdの代替)であるところのprocdによるコンソールの検出ロジックとLinux Kernelによるメインコンソールの取得ロジックが嚙み合わずworkaroundを用いた結果、failsafeモード下において "SERVICE" ポート側の入出力が壊れる問題が発生した為、断念してdmesgは流さないこととした。
具体的にはLinux Kernelがbootargsに存在する複数の console= 引数のうち最後を /dev/console として割り当てるのに対し、procdは最初のものをOpenWrtのコンソールとして取得してしまう為、対象となるコンソールの不一致が起きた。その為の対処として "SERVICE" 側のコンソール (ttyS0) を最初と最後で2回設定したところ、通常起動のOpenWrtコンソールでは問題無いものの、failsafeモードにおいては "SERVICE" 側の入力が壊れた(入力が中途半端な状態で送出される, 前の入力が一緒に送出される等)。

また、/etc/inittab へユーザーによる追記が必要な点については、あくまでWAB-I1750-PSでは ttyATH1 が設定用シリアルコンソールとして供用されているというだけで、それ以外のデバイスでは他の目的で用いられている可能性が絶対に無いとは言い切れない為、ath79/generic の /etc/inittab としてttyATH1をコンソールに割り当てたものを用意することはしなかった。

2024/03/26追記分:

上記のLinux Kernelとprocdのコンソール取得方法の差による問題は、procdにおいてbootargs内に複数の console= パラメータを検出した場合に、特定のコンソールデバイス (/dev/ttyS<n>) の代わりにLinux Kernelが設定済みの /dev/console を使用するように変更することで対処した。
また、OpenWrtのコンソールとして登録する点については、procdがコンソールを探すのに使用する /etc/inittab の内容をブート時に毎回チェックし、OpenWrtがブートされているデバイスがWAB-I1750-PSで、なおかつ ttyATH1::askfirst が存在する場合は何もせずスキップし、存在しない場合はエントリを追加するスクリプトを追加することで対処した。

なお、一部システムメッセージが "SERIAL" 側に出力されないのは、前述の通りprocdが /dev/console(**/dev/ttyS0**("SERVICE" ポート側) が割り当てられたもの) を出力先として使用していることが理由。これについては複数のコンソールに出力できない関係上、U-Bootの出力先である "SERVICE" 側をOpenWrtでも一貫してメインのコンソールとして設定した。
また、U-Bootが "SERIAL" 側で出力されない点については、そもそもU-Bootが "SERIAL" ポートへの出力を想定せず、セットアップも行っていないことが原因なので、どうしようもない。U-Bootを操作したい場合は "SERVICE" ポートを使用する。

WAB-S600-PS, WAB-S1167-PS, WAB-I1750-PS内部

3年半くらい前に某氏がWAB-I1750-PSの作業を始め、当方では興味があったので少し弄って放置していました。
が、最近割引セールでWAB-I1750-PSが話題になったことに伴い、せっかくだからとWAB-S600-PSとWAB-S1167-PSも確保して1750とコードを共有させる形で組み立て直して投げ込み、マージされました。

まとめていきます。

仕様

基本的に3機種ともハードウェアはかなり似通っており、特に600と1167は同一と思われ、ソフトウェア面での差のみと推測されます。
法律の関係上、無線機能の使用は非推奨です

その他詳細については、雑記を参照。

OpenWrt化

  1. WABをブートしWebUIにアクセス

ACアダプタまたはDHCPの無いPoEに接続してデバイスをブートし、192.168.3.x に設定したPCを "PSE" ポート側に接続して http://192.168.3.1 にアクセスする 2. ##### factory.binイメージでアップデートを実行
ファームウェア更新ページを開き、OpenWrtのsquashfs-factory.binイメージを選択してアップデートを実行する 3. ##### 完了
Flashに書き込み後再起動され、OpenWrtでブートしてくれば完了

備考

作業時の色々

色々

前述の通りWAB-I1750-PSは3年半ぶりとなるので、当時の記憶を思い出しつつの作業となった。
最終的に "SERIAL" ポートは少々気になるものの、マージされたので一安心。"SERIAL" については気が向いたら少し弄ってみるかもしれない。

今回は筐体を開けて内部のUARTピンヘッダを利用したものの、毎回開けるのは面倒なので、 "SERVICE" ポートをRJ-45から2.54mm間隔のピンヘッダに変換する基板を製造予定。