流体モーションを試す

 あけましておめでとうございます。面白い話が合ったら、役に立つのか立たないのか思い込みで間違っているかもな話を今年も続けます。そーいえばDropboxに置いておいた怪しいもの置き場が勝手に削除されていました。怪しいものは削除されるんだなw。

 さて、去年の12月30日にPCが起動しなくなりました。最初のCPU認識の所から進まない。その前から起動SSDは壊れる(突然8Mしか認識しなくなる)はHDMIキャプチャーを認識しないわ、BIOS画面にたどり着けないわ、やばかったのです。でもsocketFM2+にするチャンスと決断、近所のヨドバシ、Sofmap、ドスパラを回り、ようやくFM2+のマザーを見つけました。が、CPUがFM2(Richland)しかなく確保、そしてヨドバシのポイントを利用して通販、ようやくKaveriが届きました。

 しかし、店舗を回って見て自作の寂れ方は想像以上でした。AMDのCPUなんか在庫なしばかり。

 というわけで、PC環境は

  • socketAM3+とOpteron 3260 HE(4コア2.7G)

から

  • socketFM2+とA6-7400K(2コア3.5G)

 以前はPhenomの6コアを使っていたことを考えると順調にダウングレードしていますw。主の経験の中では長期間壊れずにつかえていたAM3+とCPUでした。パイルドライバーも2Gで回すならパワー的にも電力的にも不満はなかったです。

 

流体モーションを試す

 一部でかなり話題になっている流体モーションを試してみます。震源地はこちら(事情があってこちらに移転されています。ソフトはまだ落とせません)、バージョン2ぐらいの頃から愛用しているA’s Video Converterの作者さんであります。そして、知ったのはこちら、録画とAMDとウィルコムに強い末路さん、RSSを購読していて知りました。なんとなく理解している流体モーションの内容は

映画は24fpsである。PCは普通60fpsである(HDMIの制限か?)。60は24で割れないから本来の映像は見れない。ならば、24fpsから中間画像を生成して60fpsにすればいいじゃないの。プルダウン変換とかややこしい話はわからんw。

 設定的には末路さんの記事の通り。AMDのCCCでインターレスの解除を無効にしなければCCCで流体モーションの設定が出てこなかったような記憶が(あいまい)w。MPCへの組み込み方とかはBlueskyさんのページを参照

image 

で、実際どーなるのかというと

元動画 241 242 243

 

流体 601 602 603 604 606

 

といった感じで中間フレームが生成されます。特に流体の4枚目はなぜ、この機能が流体なのかよくわかります。MPCの統計表示では

imageimage

という感じで60fpsになっているのが確認できます。で、実際どうなるかを伝えるのは、主の知識では非常に難しいのです。並べて再生するとヌルヌルになっているのは分かるが、どーやってそれを動画にするか・・・・アマレコのデスクトップキャプチャは30fpsなので画面で24fpsの動画もそれなりにヌルヌルになってしまいます。ちゃんとしていない動画を上げて評判を落とすのもなんですから、今回は略

では実際のアニメでどーなるか、流体が効きそうなシュタインズゲート映画のBDのOPだと・・・・・微妙です。というか細かすぎでわからない感じ。

image

で次のコマが

image

になる感じ。中間フレームの生成は確認できましたが、細かすぎで微妙ですw。そーいわれてみればヌルヌルですかね・・・・ラブライブとかだと違うのかもしれないw

追記一応サンプルを上げました。どーしても55fpsでしかキャプチャできなかったので一部カクカクですが、実機ではヌルヌルです

60fps版を上げておきました。元プログラマーのくせにデスクトップキャプチャーの力技ですw。32ビット版GraphEditを使えば楽勝だろうと思って数年ぶりに立ち上げたらDirectShowフィルタの一覧で落ちました。そうだ、だから使わなくなったんだとw。64ビット版はオブジェクトが少なく30fpsでしか保存できないし、いよいよAvisynthに手を出さざるを得ない状況ですw。

追記2:GraphStudioNext(32ビット)でAMD Video Scalerをかますと行けるようになりました。こんな感じ

image

Graphでvfwのエンコーダが使えるとは気づかなかったw。x.264でも行けるのですがそちらは○カパー録画(1080i)で使っているので設定を変えたくない。相性抜群だろうと思われるvfwVCEを使用。記念に破たんしている場面をw

AMD Video Scalerはatimpenc.dllにあります。古いDLLが残っていてラッキーでした。

image

image

 

#さて、本命VCEでのエンコードを試しますかな。結局GPGPUはフィルタ系でしか使えないのでは?と思います。流体もいい感じなのですがもう一声ですね。そういえばうちのPowerDVDはバージョン10のままです。

追記3:Blueskyのホームページで最新版1.0.0の配布が開始されました。AsVideoConverterも流体モーションありになりました。

カテゴリー: 20世紀プログラマ, アニメ, コンピューターとインターネット | タグ: | 1件のコメント

WT1520を救え!(初めてのシリアルコンソール)

 上海問屋DN-84749ことNexx社WT1520をOpenWrt化する際に文鎮化してしまったWT1520が2台wあります。シリアルコンソール経由で復活を試みました。とりあえずフラッシュROMの書き換えに失敗した方から。ブートはこんな感じで止まってしまいます。

image

 

1.USB-シリアル変換ケーブル

 WT1520は3台持っているのに、このためだけにケーブルを買うのもったいないなぁと思っていたwのですが、なぜかArduinoを持っていました。

image

こいつが出力を3.3vと5.0Vに切り替えられるというので、行けるんじゃないかということで採用です。

2.WT1520との接続

 さっそくWT1520と接続します。

2.1 WT1520の開腹

 個人的ですけど壊れたのも多いけど、でも、開腹されてうちの機器は一人前ですw。さて、WT1520は固くて開腹できそうにないのですが、USBの所に-ドライバーを入れて強引に開腹します。ボケた写真ですいませんw。はがれているところにドライバーを入れて開けましたw。

 image

2.2 Arduinoとの接続

 image

Arduino側はD0ピンがRX、D1ピンがTXです。上の図の赤い部分。手元のものにはRX、TXと印刷されていました。ちなみにシリアル通信が行われると青い部分のLEDが点滅します。もちろん3.3v出力に切り替えておきます。

WT1520側は上の図の通り。ただし、とても小さく(RXとTX合わせて2mmぐらい)なので常人には半田付けは無理です。そこで

image

こんなのをこしらえて、左手でWT1520に押し付けながらの片手作業となりますw。

ちなみにGNDはUSBのガワと接続しています。

image

 

2.3 接続ピン

 試行錯誤の上、ようやく接続方法が分かりました。

  • TXとTX、RXとRX 、GNDはUSBのガワ
  • bpsは57600
  • Arduinoのスケッチは空

image

 ArduinoのD0(RX)とWT1520 のRX、ArduinoのD1(TX)とWT1520のTXを接続します。

 おじさんの記憶的にはシリアルで直につなぐとき、TXとRXを接続するものだと思っていましたが、まぁこれで動いたんだからこれでいい。Arduino側もSetSirialとかしていません!w。動けばおkがモットーのWindows使いですから、でも、壊れたらごめんなさい、自己責任で。

 注:たまたま動いているだけかも知れないのでこの辺りを見てちゃんとArduinoをセットアップしてくださいね。一応、2台ともこの方法で再生できました。

 そして、リンク先の図で納得しました。PCシリアルとArduinoはクロス接続になっていてその信号がそのままD0(RX)とD1(TX)に出ているイメージ。PCとWT1520を通信させるのだからこれでおkのはず。

image

Arduinoとルータを通信させる場合にはArduino-ルータ間はクロス接続で。まぁ、ちゃんと3.3vになっているか不安ですが壊れていないから大丈夫w

 

 

3.シリアルコンソール

3.1 下準備

 PCとWT1520をLAN接続しておきます。PCのアドレスを10.10.10.3、そしてTFTPサーバを立ち上げます。シリアルコンソールからのアップデートはWT1520がTFTPクライアント10.10.10.123となって、サーバ(10.10.10.3)のtest.binを取得してフラッシュROMを書き換えます。mtd3をtest.binとしてTFTPサーバにおいておきます。

image

 

3.2 起動

 そして起動!シリアルコンソールの接続が正常な場合はメニューが表示され、4からカウントダウンが始まります。シリアル接続がNGな場合にはカウントダウンなしで速攻でルータが起動してしまいます。

image

ここで2(改行なし)で送信。その次のAre you sure?もy(改行なし)で送信

image

次にIPアドレスの設定とかを聞いてきますが、左手はシリアルコンソールを押し付けているので片手作業、文字を打つのは困難w。ですんで、全部デフォルト値を選択しました。LFのみを選択して空文字列を3回ぐらい送信

image

WT1520がPCのTFTPサーバからtest.binを取得してアップデートが始まります。

image

色々ワーニングが出ているが、結果として文鎮なWT1520が復活!

image

image

ただし、mtd3.binがOpenWrtの物なのでOpenWrtで復活です。

 

WT1520オリジナルのmtd3.binを持っていればそれで復活すると思います。オリジナルファームではddコマンドが使えなかったのでWT1520オリジナルのmtd3は持っていないんですよw。RT5350のSDKを手に入れた今ならmtd3をバックアップできたのにw。というわけでWT1520のOpenWrt化を検討中の方はddコマンドが使えるbusyboxを導入してちゃんとバックアップしてからやりましょうw

お客様の中でオリジナルのmtd3をお持ちの方はいらっしゃいませんか?

ちなみにダウンロードできるファーム1.15はやはり暗号されていてだめでした多分、圧縮されているからよくわからん。

お客様の中でファームからファイルを取り出すノウハウをお持ちの方はいらっしゃいませんか?

 

 

#シリアルコンソールから文字が出てきた時は歓喜でした。初めてのシリアルコンソール堪能しましたw。サインスマート、中国企業らしいですがオリジナル+αは素晴らしい。野菜では不安だけど弱電は中国ですね。

カテゴリー: 20世紀プログラマ, コンピューターとインターネット, OpenWrt | タグ: , | 1件のコメント

REX-WIFIUSB1を探る(USB-LAN増設編)

 rootになれば何でもできる!とOpenWrt通(自称)の主は意気込んでいたのですが、 REX-WIFIUSB1にOpenWrtを入れるのはやめました。技量がない&REX-WIFIUSB1に入っている商用版のntfsとexfatのドライバが勿体ない(もちろん、OpenWrtでは動きませんでしたw)。というわけで、どうやってREX-WIFIUSB1を機能アップするか!が課題となります。

 ネットを徘徊していたらRT5350のSDKを手に入れました。そしてクロスコンパイラ込のRT288x_SDKも手に入ってしまいました(情報元はここ、でも前者はまぁ信頼できるが後者のSDKのリンクは怪しいサイトなので最後にまとめておいておきますわ)。3年くらい前にRT5350を遊び尽くしているとは、やっぱり周回遅れな主ですw。そら2chもメルコ一色になるわな

 さてやる気を戻して、GPLかなんかに従って開示されているんだよなSDK、英語読めないけどそんな風に書いてあるよな、と自分に言い聞かせてユーザマニュアルを見てみるとUSB Ethernetが使えるようになるではないですか。というわけで、さっそくやって見ました。最初はushareを入れるつもりだったのですがw。

image

 

1.開発環境

 RT5350のSDKとRT288XのSDKをインストールします。5350のSDKを適当に展開して、クロスコンパイラ等はは5350SDKの中にあるユーザマニュアル33ページを参照してぶち込みます。主はVMWare+CentOs6.5にぶち込みました。

2.USB-LANドライバの作成

 ユーザマニュアル99ページ参照。

 ①make menuconfig実行

 OpenWrtの時と同じ様なメニューが出てきます。Custmize Kernel Settingsを選択して一旦Exitします。

image

 
 ②LANドライバの選択

 つらつらとコマンドが流れて再びメニューが出ます。ここでユーザマニュアル99ページに従いMマークを付けます。

image

 ちなみに手元にあるUSB-LANアダプタはグリーンハウスのやつ

イメージこいつUSB-LANの中ではメジャーなASIXのチップでした。

 ③make実行

 最初OpenWrtのtoolchainを入れようと思った主には信じられないほど簡単にmakeが走りますw。autoconf.hが無いというエラーがでましたがmakeを実行したディレクトリにあったのでそれをコピーしました。主はlzmaを入れてていないのでいつもそこでエラー終了しますが、romfsの下にドライバーが生成されますので問題なしです。

image

他にもいろいろなドライバが生成できそうで楽しみです。

 

2.REX-WIFIUSB1への導入

2.1 REX-WIFIUSB1のファイルシステム

 ROMとRAMしかないという、OpenWrtをやってきた身としてはいやらしいファイルシステムです。

image

 /etcだけは再起動前にmtd7にバックアップ、起動時にそれを読み込むみたいです。仕方ないのでUSBハブ(セルフパワー)を増設し、システム補助用のUSBメモリ(Candoで買った100円(税抜き)カードリーダー)とUSB-LANを接続しています。

 ちなみに、Web管理画面での再起動は/etcの中身が保存されますが、コマンドでやろうとすると、etc_tools pで保存してreboot –fで行けると思います。

image

 その他、USBに差すと勝手にマウントされる元凶の/etc/udev/scriptからadd_usb_storage.shをmvしています。

2.2 REX-WIFIUSB1への導入

 というわけで、増設したUSBメモリ(システム用)をSwapとデータに分けて、そして面倒なのでrc.localの末尾に起動コマンドを全部入れましたw。後で整理しますw。

image

imageext3はなぜかmountできませんでした

USB-LANも認識されています

image

 

3.性能向上

 さてお楽しみのベンチマークですUSBメモリ(ソフマップで1100円)をNTFSでフォーマットしてSamba共有書き込み実施!。

3.1 書き込み性能(NTFS)

image

5MB/sという数字、初めて見ました、感動。でもそんなに都合のいい話ばかりではなくwriteのキャッシュがいっぱいになると3MB/sに頻繁に落ち(グラフの波線)、Swapが発生したりするとさらに速度が落ちます。topコマンドで見ているとpdflushが頻繁に起動しています。

image

しかし、同じ環境でwifi接続(130M~150Mbps)で比べても十分高速であります。

image

 

3.2 読み込み性能(NTFS)

 ある意味キャッシュのごまかしが効きにくい読み込み性能が本来のものと言えます。

image

ちなみにwifiだと

image

なので有線LAN(100Mbps)の方が無線(802.11.n)よりも速いみたいです。暗号化とかの負荷が多いのでしょうか?

3.3 exFATの問題点

 負荷が軽いexFATが本命と思っていたのですが、REX-WIFIUSB1のドライバに問題がありそうです。大きなファイルをコピーすると

image

途中から転送速度が半減します。topコマンドで見ていた限りではwriteのキャッシュが効かなくなり同期モードで動いている(Idole時間が多い)になります。同じ事象はwifi接続でも発生します。

image

NTFSでは転送速度がSwap等で低下しても復帰しますのでexFATドライバ特有の現象ではないかと思われます。

 

4.結論

  REX-WIFIUSB1にUSB-LANとUSBメモリを接続しているため、USBの負荷が高く、mipsではいっぱいいっぱいな感じです(最大2.5wじゃ仕方ない)。多分、Nexx WT1520の純正ファームにREX-WIFIUSB1のNTFSドライバ(TUXERAの商用NTFSドライバ)を組み込んで使うのが最速だと推測されます。Nexx WT1520は純正ファームに戻せないので検証できませんがw。

#とりあえず、怪しいものを置いておきますw。
UDFドライバを動かして、寝ながらスマフォでエロDVD-PGが今の目標ですw。

カテゴリー: 20世紀プログラマ, コンピューターとインターネット | タグ: , | コメントをどうぞ

REX-WIFIUSB1を探る

 REX-WIFIUSB1にシリアルコンソールを付ける前に「やっぱrootじゃないと色々きついよな」ということでいろいろやって見ました。

1.Telnetが使える

  telnetdがデフォルトで立ち上がっています。adminでログインできますが、あまりできることは少ないです。

image

 

2.ファームウェアの中を見る

 現在最新のファームは2.000.036です。シリアル番号を無くしてしまったのでアップもダウンも出来なくなってしまいましたw。

image

 このファームウェア、重要なのは先頭から172行ぐらいがスクリプトになっています。秀丸で強引に開くとこんな感じ

image

で、このスクリプト部分を書けばファームウェアのアップ時に処理が走り自由自在じゃないか!と思ったらそんなに甘くはなかったです。スクリプト部分は動いていないみたい。しかし!ヒントがありました。チェックサムの作り方が記述されています。

sed '1,3d' ファイル名 | /usr/bin/cksum

これを実行すると2つ数字が出てきて最初の方がチェックサムになります。

image

 

3./etc/passwdを書き換える

 REX-WIFIUSB1の管理画面にはシステムの設定のバックアップと復元という機能があります。/etcの下をバックアップ&復元している感じです。これを利用します。

image

 rootのパスワードなしのpasswdと念のためshadowを用意してetcディレクトリを作りその中に入れtarします。

image

バイナリエディタで先頭に2.で表示されたチェックサムを付加します。先頭からアドレス2Cの’0A’までを付加しています。

image

そして設定の復元!

image

 

4.rootでログイン

 REX-WIFIUSB1が再起動するとrootでログインできるようになります。/etc/passwdファイルが書き換わっています。

image

 

5.OpenWrtを・・・・

 どうしましょうか?敷居がかなり高そうです。rootで入れたからと言ってなんでもできるわけじゃないだろうし。mtdもWT1520の時と違って難しそうです。フラッシュメモリは8Mあって楽そうではあるのですが・・・

Creating 9 MTD partitions on "raspi":
0x00000000-0x00800000 : "ALL"
0x00000000-0x00030000 : "Bootloader"
0x00030000-0x00040000 : "Config"
0x00040000-0x00050000 : "Factory"
0x00050000-0x001d0000 : "Kernel_RootFS"
0x001d0000-0x001e0000 : "params"
0x001e0000-0x001f0000 : "user_backup"
0x001f0000-0x00200000 : "user"
0x00200000-0x00800000 : "Rootfs"

 

#/binとか全部リードオンリーだし、/etcとかはRAMディスクだし、mtd7に書き出している感じだし、これこそOpenWrt化してほしいのだがw。「お客様の中でOpenWrtに詳しい方がいらっしゃいましたら・・・ 」

カテゴリー: 20世紀プログラマ, コンピューターとインターネット, OpenWrt | タグ: , | コメントをどうぞ

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 | タグ: , , | コメントをどうぞ

Windows使いのOpenWrt(一段落編完結)

上海問屋DN-84749ことWT1520についてかなり朗報があります。

  1. WT1520のwikiが出来ました! (Buttonsの所とかかなり怪しいのですがw)
  2. WT1520のシリアルポートはここだ!(いずれ、文鎮となったWT1520をArduinoの3.3v版で救出したい。実際開けてみるととても小さいですよw)
  3. NTFSへの書き込み約3.5MB/s達成(思いっきり条件付きw)
  4. ソースからビルドする方法の詳細はこちら

2.4.2 ExtRootファーム更新

ExtRoot設定は簡単なのですがファームウェアをアップデートしようとすると途端にややこしくなります。設定はLuciからでも可能です。Luciの「ルートを使用する」を使わずにマウントポイント/overlayにしています。

問題はファームウェアの更新です。手順としてはここを参考に以下のようになりました。

①現状のバックアップ

Luciのバックアップで現状の設定をバックアップします。

image

②/etc/.extroot-uuidの削除

OpenWrtが自動で作成するExtRoot用のファイルを削除します。これをやらないとExtRootが設定できなかったりExtRootを解除して新しいファームをExtRootにコピーすることができません。

image

③sysupgradeの実行

ファームウェアを/tmpにコピーしてsysupgradeを実行。ファームの書き換えが終わると自動的に再起動します。

image

④ファームウェアのコピー

再起動後、telnetで入りrootのパスワードを設定しsshでログイン。ExtRootが外れている。ルータのフラッシュROMをExtRootするusbメモリにコピー(usbメモリのExtRootのファイルを削除した方がいいかも)

image

⑤ExtRootの有効化

/etc/config/fstabにExtRootのマウントを設定して再起動。

image

⑥設定のリストア

ExtRootが有効になっていることを確認。

image

以前のファームウェアで追加していたパッケージ(samba、uShareなど)を再度インストールして、①で取っておいたバックアップをリストアする。

image

重要なのは②の/etc/.extroot-uuidを削除することです。これをやらないと④の時点ですでにExtRootされていたり、⑤でfstabを修正してもExtRootされなかったりで混乱のもとになります。微妙にまちがっているかもしれませんが動くのでおk。OpenWrtのWikiも参考にどうぞ。

あとuuidは”block info”コマンドで参照できます。

2.5 Samba

 インストールするパッケージはluci-app-sambaでおk。ついでにsamba36-serverもインストールされます。

image

luci-app-xxxxxをインストールするとLuciメニューに設定用の画面が追加されます、便利です、日本語ですw。

image

ただ、Luci画面だけからは設定できない部分があります。samba用のユーザを追加する必要があります。詳細はこちら

2.4 ntfs-3G

2.4.1 インストール

NTFSに書き込み可能とするためntfs-3gのパッケージを追加する必要があります。opkgでインストールしようとするとカーネル依存と言われてインストールできませんでした。build時にntfs-3gのパッケージを組み込んでファームを生成して対応しています。

image

いわゆるカーネルモジュール(k-mod-xxとかntfs-3gとか)の/rom(ファームウェアのリードオンリー領域)に影響を与えるパッケージは主の環境ではopkgインストールできませんでした。

2.4.2 NTFSのマウント

ntfs-3gではfstabの設定で起動時に自動マウントできません(参照)。面倒なのでrc.localにマウントコマンドを記述しました。

image

2.4.3 NTFSへの読み込み・書き込みスピード

ようやく性能を計れる状態になりました。ntfs-3gではマウントするときのオプションで大きく性能が異なってきます。

1)一番大人しい状態

読み書きは同期モード。コマンド的には

ntfs-3g -o rw,sync -o noatime /dev/sdb1 /mnt/share

image

2)非同期モード

組み込み系ではご法度の非同期モード

ntfs-3g -o async -o noatime /dev/sdb1 /mnt/share

image

3)big_writeモード

本命big_writeモード

ntfs-3g -o big_writes -o async -o noatime /dev/sdb1 /mnt/share

image

3.5MB/S前後が安定して出ています。素晴らしい!これで地上波TSの書き込みはクリアできそうです。しかし・・・

4)読み込み性能

image

こればSambaでファイルをオープンしてみると微妙に帯域が足りない。音声が途切れ途切れになります。困りました。そこで

2.6 DLNA

2.6.1 minidlna

 minidlnaを入れてみましたが、問題点があり使えません

  • 重い!特にファイル一覧のDBを作成しているときはSWAPを数十M使っていました。
  • 一部のTSファイルを認識できない。一覧に出てこない

ということで断念。残るなushareとなりました。

2.6.1 uShare

1)パッケージ

Trunk版にはushareがありません。そこでoldpackagesから持ってきます。OPKG-設定に一行追加します。

src/gz oldpackagew http://downloads.openwrt.org/barrier_breaker/14.07/ramips/rt305x/packages/oldpackages/

リストを更新後、パッケージが出てくるようになります。もしかしたらlibdlnaもインストールしておいた方がいいかもです。

image

2)uShare動作の為の小細工

パッケージをインストールしても起動できません。色々小細工が必要ですw。

① ライブラリの追加

image

55と同じようにシンボリックリンクで54を作りますw。もはや動けば何でもいいw

ln -s libavformat.so.55.48.100 libavformat.so.54
ln -s libavcodec.so.55.69.100 libavcodec.so.54

② uShareの設定

LuciでuShareの設定を行います。詳細なオプションはこちらを参照

image

③/etcinit.d/ushareの変更

それでも動かない場合、/etc/init.d/ushareの変更。情報元はこちら。なぜか起動前にsleep 10を入れると動きますw。

image

④ /etc/rc.localに起動コマンドを追加

/etc/rc.dに追加してもいいのですが、NTFSをrc.localでマウントしているのでそれ以降に起動しないといけません。

image

⑤ フリーなメモリをできるだけ増やす

uShareは簡易的なDLNAとはいえメモリをかなり消費します。少しでも動作が軽くなるように/tmp(RAMディスク)の容量を減らしフリーなメモリを増やします。

/etc/rc.localに以下のコマンドを追加。デフォルトでは16Mを8Mにしました。情報元はこちら

mount tmpfs /tmp -t tmpfs -o remount,size=8000k,nosuid,nodev

視聴中の左の%がCPU使用率で右がメモリ使用率です。SWAPも設定した方がいいみたいです。

image

image

3 そして

imageimageimage

実用的かはさておき、iphone4S+nplayerで途切れる回数が大幅に減少しますw。DLNAのがSambaより軽いんですね。

ちなみに環境としてはWT1520にUSBハブ(二股ケーブルで電源強化)にUSBメモリとUSB-SATA変換を差しています。

そして、無駄なOpenWrt上で無駄なサービスを停止(NTPとか)を見直しSambaでも同じくらい再生できるようになりました。

おまけの性能測定(目安として)

SDカード32G、Windowsでの書き込み約11MB/s、読み込み約19MB/s。Sambaのファイルコピーを目測で測定w

format アロケーションサイズ マウント
オプション
書き込み(MB/s) 読み込み
(MB/s)
NTFS

512

非同期big_write

3.0

2.3

NTFS

8k

非同期
big_write

3.2

2.4

NTFS

64k

非同期
big_write

2.5

2.4

ext3

?

非同期

4.0

2.9

ext3

?

同期

2.1

2.9

ext3でも読み込みはあまり早くならないです。読み込みのが遅いなんて何かがおかしい。まぁ、いいか

image

DLNA経由でNTFSファイル再生時のCPU使用率(いっぱいいっぱいですw)

#疲れた。でもビルド編とシリアルコンソール編に続くw

カテゴリー: 20世紀プログラマ, コンピューターとインターネット, OpenWrt | タグ: , , | コメントをどうぞ

Windows使いのOpenWrt(一段落編その1)

ようやくDN-84749ことWT1520をOpenWrt化して遊べる環境まで持ってこれました。文鎮となったDN-84749に感謝を!ググったら見つかったすべての情報に感謝を!

と、いきなりシュタインズゲートで始まりましたがWT1520、上海問屋で10月8日までお安いですよ、もう1台買おうかなw。

さてここ一ヶ月、時間のある時はずーと OpenWrtを触っていましたわ。とりあえず

image

IEのツールバーで色々個人情報が漏れていますが日本語でセットアップできるって素晴らしい!別に英語でもいいのですが、「あれどこで設定するんだっけ?」というときに日本語表記のが確実に速いです。luci-i18n-japaneseのパッケージをインストールすると日本語になります。言いたいことは

Luciさんが居なければxx.confを全部手動設定だったんだよ無理ゲーだったよ。ありがとう!

1.ファームウェアの構築

もはや忘れてしまっているので詳細は別稿で自分でもやりながら忘れないように振り返りたいと思います。ファームをビルドするには主に3つ方法があり

① できているファームをもらってくる方法(DD-WRT方式)
② trunk(開発版)のImageBuilderから生成する方法。パッチはこちら
③ ソースからもらってきて0からコンパイルする方法

がありますが最終的に②を使用しました。ちなみに①のファームだと

image

②のファームだとちょっと新しいです。名前も変わっているし

image

②のビルドに関してはパッチを落としてそしてMakefileを一か所書き換えた記憶があります。詳細は後日w最新版のSnapshotでWT1520がサポートされました。

#makefile大っ嫌い。.configとか入れ子でどこで落ちたかわからんし。デバックしずらいし苦労したわ。Windowsを使っていると「ごめんねエラー、あとよろしく」的なメッセージが許せん!

2.ネットワーク環境

今の環境はこんな感じです。WT1520に4ギガのUSBメモリを差しています。

image

主なセットアップを以下に示します

2.1 インタフェース

VLANってなに?おいしいの?レベルなので見様見真似で設定。WT1520をLAN内で使用する(管理者パスワードがばれているルータを外にはつなげないだろw)のでWAN側いりません。WAN側削除してFirewallもいらん!PPPoEもいらん!となるとPPPもイラン

参考にしたのはこちら。無線LANは10dBmにする必要があるのを知りましたw。結果、微妙に違うのですが

image

br-lanに全部集めてブリッジ。

image

よくわからんのですが、おじさんの記憶としてはインタフェース=LANカードでIPアドレスを持っていて・・・な感じなのですが・・・eth0.1と0.2がWT1520から出ている有線LANポートで192.168.1.4につながっているHUBのイメージでいいんでしょうかね。まぁ、動いているのでよしw

2.2 DHCP

ブロードバンドルータおよびWT1520でDHCPサーバを動かしています。どちらも192.168.1.xの払い出しで重ならないように設定、さらにWT1520のDHCPサーバの設定で強制にチェックを入れずにすると、

image

ブロードバンドルータが電源ONの時はブロードバンドルータがIPアドレスを払い出し、節電!のためOFFにしているときにはWT1520が払い出してくれます。エコです。

2.3 LED設定

WT1520には白色LEDの点滅を制御できるはずなのですが、トリガーによっては点灯しません。結局LED名をradioにして送信受信でトリガーを設定したら点滅するようになりました。radioじゃないけど有線でも点滅するから結果オーライw

image

2.4 マウントポイント

WT1520にUSBメモリを差しました。アクセスするとクリップボードへの権利を求めてくるあやしい中華情報を元にSWAPExtRootを設定。

 2.4.1 SWAP

SWAPを設定したら劇的に速度が上がるんじゃないかと期待してUSBメモリの基本パーティション1をext3でフォーマットしてLuciでSWAPを設定。

image

確かこれだけでは動かなくてTeraTermのSSHでログインしてmkswapを実行しました。

image
しかし、せっかくのSWAPを使ってくれないw

image

 2.4.1 ExtRoot

WT1520のフラッシュメモリは4M、4Gじゃなくて4MなのでSambaやDLNAを入れるにはどうしても容量の拡張が必要となります。そこで切り札ExtRoot。WT1520に差したUSBメモリやHDDの領域をWT1520のフラッシュメモリに重ね合わせて容量を拡張してくれます。詳しくはこちら。これもLuciのこの設定で楽勝かと思いましたが、

image

出来ているのかもしれませんが駄目でした。結局Luciでは設定せずに直接/etc/config/fstabを書き換えました。

config global
    option anon_swap '0'
    option anon_mount '0'
    option auto_swap '1'
    option auto_mount '1'
    option delay_root '5'
    option check_fs '0'

config mount
        option target '/overlay'
    option fstype 'ext3'
    option device '/dev/sda2'
        option options 'rw,sync'
        option enabled '1'
    option enabled_fsck '0'
#    option is_rootfs '1'

config swap
    option device '/dev/sda1'
    option enabled '1'

config mountの所がそうです。ちょっと乱れていますがw。

ExRootはもうちょっと真面目に英文を読んで検証中です。

結果として

image

なんでもインストールできそうな3GのスペースをGetしました。そうそう、書き換えたfstabは念のためバックアップを。Luciさんのリストアでは復帰しないかも

#opkgの話とかSamba+ext3での速度とか続きます。lowntfs-3g -o big_writesでマウントすれば3.5MB/Sまででるぞ!これは一気に実用範囲内か?その前にExrootの件を

カテゴリー: 20世紀プログラマ, コンピューターとインターネット, OpenWrt | タグ: , , | コメントをどうぞ