2013-08-21

Planex GW-450Dをlinuxで使う

Planex GW-450Dは、 mt7650u_sta というチップが搭載されているらしいが、認識では RT2870で認識されている。
Windowsでは問題ないが、linuxだとアクセスポイントがステルスの場合、接続できなかったので注意!!

Planexのサイトでは、動作無保証ながら、linux用のドライバを公開している。こういうサービスはありがたい。
日本のメーカーは、目先の利益に繋がらないからと、チップメーカーが提供しているのにもかかわらず、linuxのドライバ提供を無視してきたが、地道にやっておけばAndroidへの対応などのノウハウが社内に蓄積し、今のようなスマホ惨敗の状態に陥らなくてすんだのではなかったかと思う。

Planex提供のドライバは古いので、チップ提供の本家から最新のドライバを取得する。現時点での最新のものは
MT7610U USB     09/16/2013     V3.0.0.2
となっている。

# cd /usr/local/src
# copy mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 .
# tar jxfv mt7610u_wifi_sta_v3002_dpo_20130916.tar.bz2 .
# cd mt7610u_wifi_sta_v3002_dpo_20130916

Planexの ベンダーIDと製品IDを、ドライバソースに反映

# cd  common
# vi rtusb_dev_id.c

/* module table */
USB_DEVICE_ID rtusb_dev_id[] = {
#ifdef MT76x0
    {USB_DEVICE(0x2019,0xab31)},  <========== これを追記
    {USB_DEVICE(0x148F,0x7610)}, /* MT7610U */
    {USB_DEVICE(0x0E8D,0x7610)}, /* MT7610U */
    {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)}, /* MT7630U */
    {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)}, /* MT7650U */
#endif
    { }/* Terminating entry */
};


ネットワークマネージャを使うのならば、os/linux/config.mk を編集
# cd os/linux
# vi config.mk

HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

include/os/rt_linux.h  の290行目くらい?  を編集する
---------------------------------------
typedef struct file* RTMP_OS_FD;

typedef struct _OS_FS_INFO_
{
        int                             fsuid;  <--- これを以下に書き換え
        kuid_t          fsuid;
        int                             fsgid;  <----これを以下に書き換え
        kgid_t          fsgid;
        mm_segment_t    fs;
} OS_FS_INFO;

#define IS_FILE_OPEN_ERR(_fd)   ((_fd == NULL) || IS_ERR((_fd)))
--------------------------------------------------



ここからコンパイル

openSUSEの場合だと、あらかじめ

  • kernel-source
  • kernel-devel
  • kernel-syms
 をインストールしておかないとビルドできない。



# make

※ READMEによると、 インストールは、make install はせずに、手動でコピーしてる


# chmod 644 mt7650u_sta.ko
# cp os/linux/mt7650u_sta.ko  /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/


ドライバーが使う設定ファイルをセットする
#mkdir -p /etc/Wireless/RT2870STA
# cp RT2870STA.dat  /etc/Wireless/RT2870STA/RT2870STA.dat
# vi /etc/Wireless/RT2870STA/RT2870STA.dat

編集箇所だけを上書きする事

CountryRegion=1
CountryRegionABand=7
CountryCode=JP
SSID=
NetworkType=Infra
WirelessMode=5
Channel=0  <-------自動でチャンネル設定してくれる
AuthMode=WPA2PSK
EncrypType=AES
WPAPSK= <--- NetworkManageを使うので、ここは何も入れない



/etc/modprobe.d/ 以下で、  99-local.conf に

alias ra0 mt7650u_sta
 を追記した。  

(50-mt7650u_sta.conf ファイルを作成して、その中に これを 書けばよいのかもしれない。)


NetworkManager での設定

/etc/NetwrokManger/NetworkManager.conf
[main]
plugins=ifcfg-suse,keyfile,
no-auto-default=GW-450DのMACアドレスを記述する


とりあえず、これで NetworkManagerから接続できている。
但し、アクセスポイントがステルスの場合は、何故だか接続に失敗するのでステルスは解除してやる。
 


/>/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/> />/>

自分のブログにコメントが付くとは思っていなかったのだが、上の内容では接続できないというコメントをもらったので、追記・・・・・。

ドライバーのコンパイル後、以下のようにモジュールディレクトリ下 に、my7650u_sta をコピーした。
# chmod 644 mt7650u_sta.ko
# cp os/linux/mt7650u_sta.ko  /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/

この時点で、
/sbin/insmod /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/mt7650u_sta.ko


してやることで、モジュールの読み込みを行う。そうすると、

#lsmod | grep mt
mt7650u_sta           925764  1
usbcore               206447  5 mt7650u_sta,usbhid,ehci_pci,uhci_hcd,ehci_hcd

のような結果が表示されるハズだ。

#iwlist ra0 scanning

して GW-450Dのランプがピコピコするのを確認する。

念の為に、mt7650u_staが起動時に読み込まれるように、
/etc/init.d/boot.local


# for GW-450D
/sbin/insmod /lib/modules/3.7.10-1.16-default/kernel/drivers/net/wireless/mt7650u_sta.ko
の記述を追記し、再起動後に、もう一度 iwlist コマンドをチェックしてみる。

****************************************************
尚、   /etc/Wireless/RT2870STA/RT2870STA.dat  のファイルの暗号化条件には、


AuthMode= 指定可能値  "WEPAUTO", "OPEN", "SHARED", "WPAPSK", "WPA2PSK", "WPANONE"
EncrypType= 指定可能値 "NONE", "WEP", "TKIP", "AES"


となっている。詳細はドライバーtarballのREADME_STA_usbの282行目あたりに書いてあるので参考にする。

2013-04-26

Nexus7 4.2アプデのBluetooth不具合

Nexus7の4.2.2へのアプデの後、極端にBluetoothへの接続が悪くなっていた。
てっきり自分の端末だけかと思っていたが、あちこちで同じ症状が報告されていた。
それならば解決方法があるかも・・・? と 調べてみると、初期化すれば症状がなくなるらしいことが判明。

データのバックアップやアプリの入れなおしなど考えると、「Bluetoothイイや」って逃げたくなるのが人間だが、
なんと!!、Google Driveへのバックアップと、アプリの同期だけやっていれば、ほぼ同じ状態に復元可能らしい。

本当・・・?   ってことで、「今回だけ騙される・・・」覚悟でやってみると、嘘でなくほとんど元通りになっている。
ゲームデータとかは別ね・・・・。まあ、こんなのどうでもいいから・・・。

しかも、所要時間は30分程度もあれば十分だった。

アプリインストールで、セキュリティーレベルを下げないとインストールを失敗するものがある場合は、あらかじめGoogle Playのレベル設定を 下げておけば問題なく入る。(Twonky Beamが該当)

とにかく、Linuxのディストリも、どうでも良いGUIの見栄えなんかばっかり追求してないで、こういう素晴らしい機能の開発に切磋琢磨してくれると助かるなーーー。(特にKDEなんか)


2013-04-25

Intel マザーボードのBIOSのバグ

IntelのマザーボードのBIOSでハマったので、メモがてら書いておくことにした。

2000年に入ってからはSupermicroのマザーボード以外使っていなかったが、CPUにコアが複数のっかるようになっていることだし、

NICがIntelならば、Supermicroにこだわる必要もなかろう

という事で、IntelのDH77EB使うことにした。

何も考えずにWindowsXPをインストールしてしばらく使っていたが、ふと、HDDがIDEモードで動いていることに気づいてしまった。

「そう言えば、WindowsXPのメディアにはAHCIのドライバーが入ってないからIDEで動いてたんだ・・・・・。うーむ、ここはIntel提供のAHCIドライバーに変更したほうが良いか・・・・」

という簡単なノリで、鬼門のHDDドライバーのアップデートを簡単に決断してしまったのが事の発端になった。

買ってから一度もアップデートしていないBIOSの事も気になり、サポートページに入ってみると、ズラズラとバージョンアップの履歴が絵巻物のように連なっていた。
Supermicroとは違って素人相手のIntelマザーだからか、DOSBoot仕様になっていないUSBメモリーでもアップデートが可能になっているらしく、ダウンロードした最新版をUSBmemにぶち込んでリブート時にF7するだけで事が足りるらしい。Supermicroも、このくらいやってくれよーーー(T_T)

その後、ドライバーのインストール自体は問題なく進み、全てが順調に見えたその時・・・・・落とし穴が待っていた


ドライバー組込後のリブート時にIDEからAHCIへのモード変換を行う必要があるので、BIOS設定に入るべくBOOT直後のIntelロゴ画面でF2をコトコト押し続けていたのだが

「・・・・・。おかしい、BIOS画面に入れない。」

Ctr + Alt + Del リブートしてみたが全く同じ。念の為にF10のブート選択キーを押してみると、これは生きていた。

「という事は・・・・、キーボードが死んでるわけじゃなく、BIOS設定画面に入れないだけか・・・・よかった。
(^^)    って 良くない (@ @)/  」


仕方がないのでHDDのモードはIDEのままで使い続け、1週間ばかし時間を見つけては症状の原因を調べてみた。
いろいろ総合して判断するに、どうも特定バージョン以後は表示モニターを選ぶらしい事が判明した。

HDMI 接続はダメだが、DVI接続ならOK。

ワイドモニター(Full HD)のケースはダメ。


という事らしいので、試しに

Mon1(FullHD)-----[HDMI]-----|
                                                |  DH77EB
Mon2(UXGA)-------[DVI]-------|

で接続して見ると、UXGAの接続ならばBIOS設定画面に入れる事がわかった。

結論: IntelのBIOSは、FullHDでは使えない

つまり、IntelマザーはFullHDモニターに対応していない。

という事になった。Intelマザーは悪名高き?FoxconnのOEMなので、ここのマザーも同様の症状があるかもしれない。
Intel、デスクトップ PC 向けマザーボードビジネスから撤退へ という事らしいので、今後はSupermicroに回帰すべきなんだなーーーーってのがよーーく判った。

2012-11-17

Androidアプリを作ってみる - 端末電池状態(1) -

90年代前半から始めたネット利用に際し、多くの諸先輩方が残された道標となるメモを利用させて頂いた。
残念ながら、自分はそういう諸先輩方の足元にも及ばないレベルでしかなく恐れ多いが、せっかくAndroidがらみのブログを書いているので、自己に向けたメモがてら、端末の電池残量表示アプリを作り、その経過を記録して残す事にした。

開発環境:Android SDK(4.1対応)
表示ターゲット端末:Nexus7
ターゲットバージョン: Android4.1
最低対応バージョン: Android2.3
開発環境OS:Linux

おそらく一般的な開発環境OSはWindowsXP or Windows7 辺りなんだろうが、今回はLinuxで開発する。
LinuxのディストリにはJavaやAndroidSDKのパッケージもあるのだろうが、ここではパッケージではなく、各配布元のSDKIを使って作ることにする。

各SDKは、全てホームフォルダ直下に作成する前提で説明する。

Javaのインストール

Android4.1では、JavaのバージョンはJava2SE-6を使うことになっているので、配布元からjdk1.6バージョンのSDKを取得する。
JavaはOpenJDKとSun(Oracle )のものがあるが、バージョン6までは、安定度からはSunのJDKが優れているので、こいつを使う

OracleのJDKダウンロードのサイトから、”Java SE 6 Update 37”を選択してダウンロードする。
使っているOS環境で異なるが、

32ビットなら、 Linux x86    68.44 MB      jdk-6u37-linux-i586.bin
64ビットなら、 Linux x64    68.71 MB      jdk-6u37-linux-x64.bin

を選び、ダウンロードし、ホームフォルダに保存する。(ここから先は、ホームフォルダを /home/user として説明)
拡張子が.binのSDKは開発環境フォルダのアーカイブみたいなもので、インストールするには、ファイルに実行権限を与えて実行するだけでよい。

$ cd $HOME
$ chomod u+x jdk-6u37-linux-i586.bin
$ ./jdk-6u37-linux-i586.bin  <--- インストールを開始

これで、jdk1.6.0_37 みたいなフォルダが出来る。面倒なのでこのフォルダにjdk16というリンクを作成する。
 $ ln -s  jdk1.6.0_37 jdk16

ログインした時点でこのjavaを使えるようにパスを通し、環境変数もセットする

$ vi .profile
JAVA_HOME=$HOME/jdk16
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH

これでJavaの開発環境は整った。

Android SDKのインストール

Android SDKは、Googleの配布サイトからダウンロードする。
これもJavaと同じように、OS環境によって

32ビットなら、Linux 32-bit     adt-bundle-linux-x86.zip
64ビットなら、Linux 64-bit     adt-bundle-linux-x86_64.zip

を選びダウンロードする。JDKと異なるのは、MD5のチェックがついているので、ダウンロード後の、ファイルチェックが可能になる。

$md5sun adt-bundle-linux-x86.zip 

表示された数値とサイトでのMD5 checksum が同じか確かめ、問題なければ解凍する。

$ unzip adt-bundle-linux-x86.zip

android-sdk-linux というフォルダに解凍される。

Eclipseのインストール

JavaとAndroidSDKがあれば開発可能だが、今時テキストエディタで開発しなくても、Eclipseという無料の優秀な開発ツールがあるので有りがたく使わせて頂く。
Ecllipse1のダウンロードサイトから、自分の環境にあったEclipseをダウンロードしてセットアップする。
ここでは、 初版の事情から、一つ前の、Eclipse Classic 3.7.2, (173 MB)をダウンロードして使う事にする。

$ tar zxvf eclipse-SDK-3.7.2-linux-gtk.tar.gz

これで、ecllipse というフォルダにeclipse IDE環境が解凍される。これだけで開発は可能だが、メニューを日本語対応させることができるnlpackなるモジュールを開発している方がおられるので、有りがたく使わせて頂く。

3.7.2 Stream Build    nlpack.eclipse.indigo-SR2-I201205311700

上記が、3.7.2に対応する日本語化モジュールのリンクなので、これをクリックして本体をダウンロードする
日本語化モジュールのインストールは、eclipseを解凍してできたインストールしたフォルダの、dropinsフォルダに、nlpackという
フォルダを新規作成し、そこへ先ほどダウンロードした

$HOME/NLpackja-eclipse-SDK-3.7.2-blancofw20120531.zip

をセットして解凍する。

$ cd  eclipse/dropins/
$ mkdir nlpack
$ cd nlpack
$ mv  $HOME/NLpackja-eclipse-SDK-3.7.2-blancofw20120531.zip .
$ tar zxvf NLpackja-eclipse-SDK-3.7.2-blancofw20120531.zip

これで、

$HOME/eclipse/dropins/nlpack/ecllipse

というフォルダができ、そこに日本語モジュールが解凍される。

後は、eclipseの起動オプションに、たんまりメモリをくれてやる設定をし、ecllipseを起動する。

$cd $HOME/eclipse
$ vi ./eclipse.ini
-----------------------------------------
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms256m
-Xmx1024m
-----------------------------------------
こんな感じで、eclipseに大きめのメモリを食らわしてやる。これでようやくeclipseの起動準備が終わったので、エクリプスを起動する。

$ cd $HOME/eclipse
$ ./eclipse

eclipseのAndroidSDKのプラグインをインストール

 ecllipseが起動したら、AndroidSDKのプラグインをインストールする。

[ヘルプ]---[新規ソフトウエアのインストール]

作業対象URLに、

 https://dl-ssl.google.com/android/eclipse/

を入力して[追加]ボタンを押し、サイトを追加し、出てきたリポジトリは全てチェックしてインストールする
ecllipseから再起動を促されるので、反抗せずに素直に従う。

AndroidのOSバージョンごとのモジュールをインストール

再起動後、Androidプラグインの設定を行う。

[ウインドウ]--[設定]

で設定画面をひらき、ダイアログ左のメニューからAndroidを選択し、SDK : Location にAndroidSDKをインストールした場所を入力してやる。

SDK Location :    /home/user/android-sdk-linux

Androidは、IntelのCPUように暇さえあれば次々とOSバージョンをアップするため、開発に際してはターゲットバージョンになりうる各バージョンごとのモジュールを準備しなければならない。そこで、

eclipseの [ウインド]---Android SDK Manager

を開き、開発対象となるバージョンごとのモジュールを選択し、インストールする。
現段階では、
  • 4.x 全て
  • 携帯向けの最後のバージョンである2.3.3
  • Extras から Android Support Library
の3パターンを選択インストールしてやる。ダウンロードを伴うのでかなり時間がかかるが、気長に待つ


AndroidSDKの開発エミュレータの設定

実機端末がない場合でも開発できるように、開発エミュレータをセットアップしてやる。 eclipseを起動し、

eclipseの [ウインド]---AVD Manager  で、AVDマネージャを起動し、Newで設定条件を新規作成する。

img0001


Name: このエミュレータ設定の名前。設定条件は、
  • Target: 開発ターゲット
  • CPU:  ARM
  • SDCard: 1GB
  • Snapshop: Enable
  • Built-in: WVGA800

これで保存する。AVDマネージャから、Startを押して、保存した条件でエミュレータを起動する。


起動条件を指定するダイアログが出るので、
  • Launch from snapshop
  • Save to snapshop 
 の両方にチェックを入れてLaunch ボタンを押してエミュレータを起動する。AVDはかなり思いアプリケーションで、遅めのPCだと起動するのにコーヒーが立てられるほど時間を食う。
そこで、その時間を短縮させる為に、起動した後でスナップショットをイメージとして保存しておき、次にAVDを起動する際に使いまわす為の指定が、Save to snapshop と Lauch from snapshop である。

AVDで開発を行うと開発中のアプリケーションがインストールされるが、開発アプリをイメージとして保存したくない場合は、以下のようにすると良い。
  • eclipseが開いた時点で、 最初にAVDマネージャからエミュレータを起動する。
  • 起動する際には、Save to snapshot のチェックを外して、アプリケーションがスナップへ保存されないようにする。
 AVDは、一度起動したら、アプリケーションのデバッグの開始・停止ごとに再起動しなおす事無くそのまま使えるので、スナップショットを利用しない手はない。

さて、これでようやく開発準備が整った。

2012-11-16

Android 4.2 の開発者向けオプション

Nexus7が発売されてから、まだ半年も経過していないが、既にアップデートは2回目になる。
今回のアップデートは、4.2へのアップデートで、メジャーバージョン?と呼んで良いのかわからないが、少し大きいバージョンアップになる。
おそらく、4.1.2の時は、4.1での不具合修正アップデートだったのだろうが、今回の4.2では、新機能追加という意味合いだろう。
このバージョンから、マルチユーザー対応になっており、
一つの端末を家族や恋人で分け合う、 慎ましい利用方法を行う向きには、大変便利になった。
あの、iPadですら実装していない機能なのだが、ユーザーには極めてわかりづらい内容になっている。
Googleは広告を売って生業を立てているくせに、自社商品の広告は極めて下手くそだと思う。
まあ、そんな事のひとつなのだが、4.2になって、設定メニューから”開発者向けオプション”が消えた。
 実際には機能がなくなったのではなく、隠れコマンド化しただけの事だ。
おそらく、Googleが当初想定した開発者ユーザー中心の利用から、想定外の一般ユーザーの利用の比率が高まったために、隠しコマンド化したのだろう。

これを表示させるには、 設定メニューから、

タブレット情報 を表示させ、

ビルド番号 を 7回タップする

Nexus7なので、7回なんだろう・・・・ww


2012-11-05

DATA08W

DATA08Wを使うことにした。この端末の面白い所は、内蔵SDカードにWEBインターフェース
経由でアクセス出来る所だ。
SDカードを持たないNexus7にとってUSBケーブルを忘れてきた時でもデータへのアクセスが可能なのは心強い。
最も、製造元が、あの、”ファーウェイ”なので要注意。GPSは当然OFFで使う。