Windows使いのOpenWrt(ビルド編)

 上海問屋DN-84749ことNexx社WT1520についてさらに朗報があります。

 この人、RT5350Fを外して基板を解析するとはどれだけ暇、じゃなくて偉大なんだよ。ちなみにGPIOピンをうまく利用するとLEDを点灯できます!じゃなくてSDカードスロットを追加できたりします。

 実は重要なのはそこではなく、WT1520のリセットボタンはGPIO10番に繋がっていたということなのです。つまり、リセットボタンを効くようにできることになります。今まではOpenWrtを入れるとリセットボタンが効かなくなっていたんですよ。dtsファイルの修正が必要となりますのでImageBuilder版をビルドしながらおいおい説明します。

 でと思っていろいろやっていたら、ようやく気づきました。

WT1520がTrunk(開発版)でサポートされました!

 見よ!この勇姿

image

 日付を見る限り10月からサポートされたみたいw。とにかくめでたい。

 というわけで、make image PROFILE=”WT1520″でビルド完了!では面白くないのでリセットボタンを有効にする改造を含めて以下に示します。

 

 1. 準備

 Linuxを用意します。主の環境ではCentOS6.5をダウンロードしてVMWareにぶち込みました。ソースからコンパイルする環境と合わせて30Gぐらディスクを使っています。その他インストールするソフトはここを参考にその都度加えてください。CentOSはRedHatの所を見ればいいです。またインストールのコマンドはapt-getではなくyumになります。

 pythonとかバージョン違いで苦労した覚えがあります。

 2. ダウンロード

 http://downloads.openwrt.org/にアクセスするとOpenWrtの現在のバージョンがわかります。

image

ついこの前、14.07の正式版がでましたが、現在のTrunk版とかなり違う。まぁ、WT1520をサポートしているのはTrunk版なのでそれをダウンロードします。URLはOpenWrt-ImageBuilder-ramips_rt305x-for-linux-x8で10月20日版が最新ですね。800Mぐらいあります。

image

で、適当に展開してください。

 3. ビルド用スクリプト

 最初にWT1520を突破した方のビルド用スクリプトを改良して使っています。ImageBuilder版でファームを作る利点はパッケージの選択が楽な点ですね。

#!/bin/sh
# profile name
PROFILE="WT1520"
# packages to skip, packages to install^
PACKAGES="-6relayd -hostapd -ip6tables -kmod-ip6tables -kmod-ipv6 -kmod-ipv6 -libip6tc -odhcp6c -odhcpd -wpad -wpad-mini block-mount hostapd-mini \
kmod-fs-ext4 -kmod-fs-vfat -kmod-usb-net-cdc-ether kmod-usb-ohci -kmod-usb-serial -kmod-usb-serial-option -kmod-usb-serial-wwan kmod-usb-storage \
kmod-usb2 libuci libxtables luci -luci-app-ddns -luci-proto-3g \
mtd netifd opkg -ppp -ppp-mod-pppoe procd swconfig luci-i18n-japanese ntfs-3g  \
uboot-envtools ubox ubus ubusd uci usb-modeswitch -firewall \
-libip6tc "
# directory with files
FILES="FILES_1520"
# threads
J=4

# apply patch if not applied
#test -f target/linux/ramips/dts/NEXXWT1520.dts || patch -p1 < nexx-wt1520.patch
#test -f target/linux/ramips/dts/NEXXWT1520.dts || patch -R -p1 < support_for_nexx_wt1520.patch
# compile
#make V=s -j$J image PROFILE="$PROFILE" PACKAGES="$PACKAGES" && echo firmware is here: "$(pwd)/bin/ramips/openwrt-ramips-rt305x-nexx-wt1520-squashfs-sysupgrade.bin"

make -j$J image PROFILE="$PROFILE" PACKAGES="$PACKAGES" FILES="$FILES" && echo firmware is here: "$(pwd)/bin/ramips/openwrt-ramips-rt305x-nexx-wt1520-squashfs-sysupgrade.bin"

PACKAGESに加えるパッケージと削除するパッケージ(-を付ける)で指定、FILESはファームをWT1520に入れたときの初期設定(IPアドレスとか)を指定するファイルを入れておきます。主は今の所Luciで設定した/etc/config/networkを入れています。

image

fstabやパスワード関連も入れるとファームウェアをアップデートした時に楽になると思いますが、後日やりますw。

 

 4. ビルドを実行

 ビルドを実行するとつらつらと処理がながれてbin\ramipsの下にopenwrt-ramips-rt305x-wt1520-squashfs-sysupgrade.binファイルが出来ます。

image

ファイルサイズが3670020 バイトであることを確認してください。この大きさでないときは上手く動かなかった記憶があります。後はこちらの手順に従ってWT1520に導入してください。今更重要な注意点を

元のファームに戻す方法はシリアルコンソール経由しかない!(多分)

 元のファームはminidlnaが入っていなかったりしてひどいので後悔する人は少ないと思いますがw

 

 5. リセットボタンの有効化

 他のルータの例をみて多分正しいと思うのですが、自己責任で。

 ① DTSファイルの修正

 DTSファイルとはデバイスツリーソースのことらしいですw、詳しくはこちら、ってわかんねぇよ。何やらハードウェア構成を定義するファイル見たいです。修正するファイルは”[OpenWrtを展開したディレクトリ]/target/linux/ramips/dts/WT1520.dts”です。diffを取る能力が無いので、そのまま説明すると59行目辺りから始まる

    pinctrl {
        state_default: pinctrl0 {
            gpio {
                ralink,group = "jtag";
                ralink,function = "gpio";
            };
        };
    };

    pinctrl {
        state_default: pinctrl0 {
            gpio {
                ralink,group = "jtag","uartf";
                ralink,function = "gpio";
            };
        };
    };

“uartf”を加えます。そして、83行目辺りから末尾を変更

    ohci@101c1000 {
        status = "okay";
    };
};

にリセットキーの設定を加えます。

    ohci@101c1000 {
        status = "okay";
    };
    gpio-keys-polled {
        compatible = "gpio-keys-polled";
        #address-cells = <1>;
        #size-cells = <0>;
        poll-interval = <20>;
        reset {
            label = "reset";
            gpios = <&gpio0 10 1>;
            linux,code = <0x198>;
        };
    };

2つ目の変更はgpios=のgpio番号以外は他ルータと同じなのでわかりますが、問題は1つ目の変更のuartfを加えること。調べたがよくわからん、かろうじて

  • LinuxにはPINコントロールというサブシステムがある
  • PINコントロールにはGPIOをMUXする機能(共有みたいなもんか)がある
  • group=”xxx”で指定しないと共有機能が有効にならないような感じw
  • RT5350のデータシートや/sys/kernel/debug/pinctrl/pinctrl.1/pingroupsを見るとGPIOの10番はuartf(シリアル通信用のIC)が使っているみたい

    image

なお、PINのMUXについてはこちら。日本語ではいい説明が見つからなかった。英文で流し読みだけどまぁ、そんな感じでWindows使いなら動けばおk。

 

②リセットボタンの有効化

 ①で加えた変更を適用したファームウェアをWT1520に適用するとリセットボタンが有効になります。実際には/etc/rc.buttonの下のresetスクリプトが起動されます。長押しすると初期設定に戻ります。

image

嗚呼、この機能を有効にしておけばFirewallを削除し忘れて一切アクセスできなくなった文鎮WT1520を救えるのに・・・あの頃は今思えば若かったw・・・・・・・それはシリアルコンソール編で

そうそう、リセットボタンが効くようになってもOpenWrtのfailsafeモードで起動できませんでしたので、その点はご注意を。

 

#現時点でノータッチのシリアルコンソール編じゃなくてUSBIP編かもw

REX-WIFIUSB1を開腹したらWT1520と同じRT5350Fが出てきた。俄然、シリアルコンソールにやる気が出てきたぞ。exFATのドライバ(ry
image

広告
カテゴリー: 20世紀プログラマ, コンピューターとインターネット, OpenWrt タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中