2015年7月28日火曜日

Linksys WRT54G へ USB ポート設置

先日、無駄にメモリを交換してしまった リンクシス WRT54G V2 へ USB ポートを設置してみました。USB ポートの設置にあたり、次のウェブサイトを参考にしました。
Linksys WRT54G, WRT54GL and WRT54GS [OpenWrt Wiki]
http://wiki.openwrt.org/toh/linksys/wrt54g

Adding a USB Port to a WRT54G v2 » Woodhouse Enterprises
http://woodhousellc.com/?p=30
USB ポートを設置する前の WRT54G V2 のボードの様子です。

WRT54G V2 の加工

上記のウェブサイトによりますと WRT54G V2 の BCM4712 の近くにある RH19 と RH20 の部分に USB の信号が BCM4712 から出力されているそうです。この信号が 4.7KΩ の抵抗で終端されている状態となっています。この 4.7KΩ の終端抵抗を取り除いて、新しく 15KΩの抵抗器へと交換します。

黄色い線で囲まれた部分が USB 信号を終端している抵抗器です。

この 15KΩ の抵抗器が必要となるのですが、ThinkPad 600 の部品取り用のマザーボードの USB ポート付近を探してみました。すると運良く 15KΩ のチップ抵抗器が二個存在していました。USB ポート付近の設計はどれも同じような設計になっているようです。そこでこの 15KΩ のチップ抵抗器を WRT54G V2 へ移植することとしました。ついでに USB ソケットも一緒に取り外して、WRT54G V2 で利用することとしました。

ThinkPad 600 のシステムボードに設置されていた 15KΩ のチップ抵抗器です。
ThinkPad 600 から取り外した USB 関連の部品です。

いつものようにコテライザーを使って 4.7KΩ のチップ抵抗器を取り除いた後、15KΩ のチップ抵抗器をハンダゴテを使ってハンダ付けしました。リード線を後から設置することもあり、ハンダを多めに盛りつけておきました。

4.7KΩ から 15KΩ のチップ抵抗器へ交換したところです。

今回の USB ポートの設置は動作確認が主な目的としました。そのため 5 ボルト電源は、バッファローの無線LANルータのうち、Atheros チップが使用されている機種で使用されている 5 ボルトの電源アダプタを利用することとしました。そのため、この 5 ボルトの電源アダプタに合う細身の電源ソケットも用意して、USB ソケット周りにリード線をハンダ付けしました。

USB ポートの設置加工が終わったところです。
左側の黒いソケットは 5 ボルト電源用です。
BCM4712 周辺のリード線の取り付け状況です。
アースは USB の終点抵抗器の近くのチップコンデンサの GND 側へ取り付けました。

USB ポートの設置加工が終わった WRT54G V2 のボードへ電源を投入して動作に問題がないことを確認しました。USB ポートへの電源ですが、WRT54G のボードへ電源が投入された後に、5 ボルト電源を投入するようにしました。そして電源を切る場合には、逆に 5 ボルト電源を切った後、WRT54G V2 のボードの電源を切るようにします。なお将来的には WRT54G V2 の 12 ボルト電源を三端子レギュレータで 5 ボルトへ降圧して USB ポートの電源として使用することを考えています。

USB ポートの動作確認中の WRT54G V2 です。

OpenWrt Attitude Adjustment 12.09 で動作

WRT54G V2 へのシステムは OpenWrt を使用することで決まっていましたが、USB ポート関係のソフトウェア関係でかなり紆余曲折をしました。

元々ウェブ GUI の LuCi の動作が軽い Barrier Breaker 14.07 で動作確認をしようとしたところ、USB 関連のカーネルモジュールのインストールがフラッシュメモリの容量不足によって出来ないことが判明しました。

そこでフラッシュメモリの余裕が大きめな Backfire 10.03.1 をインストールした後、USB 関連のモジュール類のインストールを行なって動作確認をしてみました。ここでは一応動作確認が出来たのですが、問題は異常なブロックデバイスの登録が行われることでした。USB メモリを取り付けた状態で起動させると、ブートログには、ちゃんと sda としてデバイスが認識されるのですが、なぜか /dev/sda として登録されないのです。fdisk -l コマンドで発見したのは、/dev/scsi/host0/bus0/target0/lun0/part1 というデバイスとして登録されていました。これを以下のマウント・コマンドでマウントさせるとちゃんと認識して動作することも確認できました。
# mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt

そこで Attitude Adjustment 12.09 をインストールして、再度 USB 関連のモジュール類をインストールしたところ、フラッシュメモリの容量がほぼ一杯になりながらもインストールが終了して、USB メモリも /dev/sda として認識させることができました。もちろん動作も問題ありませんでした。

USB メモリを /dev/sda1 として認識させることができました。

以下は Attitude Adjustment 12.09 で USB 関連のインストールを行った様子の記録です。

上記の参考ウェブサイトの案内どおりに基本的なモジュール類をインストールしました。
# opkg install kmod-usb-ohci kmod-usb-storage kmod-usb-core
Configuring kmod-scsi-core.
Configuring kmod-nls-base.
Configuring kmod-usb-core.
Configuring kmod-usb-storage.
Configuring kmod-usb-brcm47xx.
Configuring kmod-usb-ohci.
次に LuCi の設定画面からマウントの操作などができる block-mount をインストールしました。このインストールの後、[System] - [Startup] の中にあるブート時の起動デーモンに fstab が無効(disable)となっているものを有効(enable)へ変更させておきます。
# opkg install block-mount
Configuring libuuid.
Configuring libblkid.
Configuring blkid.
Configuring swap-utils.
Configuring block-mount.
USB メモリは、WRT54G V2 へ取り付ける前にパソコンにて Ext2 フォーマットしておきました。Ext2, Ext3, Ext4 のフォーマットを認識して動作させるためのモジュールの kmod-fs-ext4 をインストールします。古い OpenWrt のバージョンでは、それぞれのフォーマットごとにモジュールが分かれていましたが、Barrier Breaker 14.07 では一つにまとめられていました。
# opkg install kmod-fs-ext4
Configuring kmod-lib-crc16.
Configuring kmod-fs-ext4.
上記のインストールの後、WRT54G V2 を再起動させて、動作確認をします。telnet でログインした後、/dev/sda や /dev/sda1 が存在していることを ls コマンドで確認してください。
# ls /dev/sda
# ls /dev/sda1
以上で動作していれば問題ありませんが、何か問題の解決手段として fdisk をインストールする場合には、次のとおりインストールしてください。"fdisk -l" コマンドで利用可能なデバイスが表示されます。
# opkg install fdisk
Configuring libuuid.
Configuring libblkid.
Configuring fdisk.
# fdisk -l

[参考]

OpenWrt には同じバージョンの中にも複数のファームウェアが存在しています。最終的に使用したファームウェアは次のものです。
OpenWrt Attitude Adjustment 12.09 openwrt-brcm47xx-squashfs.trx
http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/openwrt-brcm47xx-squashfs.trx

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。