Android 4.0はAdhocモード不可???
最近Androidのすばらしさを実感している、西脇です。
研究でAd-hocモードをとりあげているので、Ad-hocネタが多くなってます^^;
というわけで、本題に
Android 4.0ではAdhoc不可??
今回は二つの端末で検証しました。
Swicth(challenge.device_type){
Case: Galaxy Nexus
そもそも、Galaxy Nexusでは、iwconfigやiwlistなどのwireless toolから ネットワークインターフェースが認識されません。
という訳で、お手上げです。
break;Case: Nexus7
問題なのは、こいつ。
wireless toolでちゃんとインターフェースが認識されます。ukinau$ifconfig wlan0 down ukinau$iwconfig wlan0 mode Ad-hoc SET failed on device wlan0 ; Operation not supported on transport endpoint.
「Opertation not supported on transport endpoint」かdriverではじかれてるっぽい感じ ってことは、やっぱりdriver入れ替えたりしないといけないってことなんですかね。。。
}
なんでGalaxySとかOptimusChatで、できたの?
Android2.0のWifiの仕組み
もしかしたら、GalaxySとかにwireless-toolを入れてiwconfigとかでAd-hocモードに変更しようとチャレンジした人がいるかもしれない。
でもできなかっただろう。
それはなぜか?
別にDriverにmode変更のoperationが拒否された訳じゃないんです
というのも、Android2.0ではWifiをONにするとdriverが読み込まれて、Wifiのステータスを追っかけるサービスが同時に動いてWifiのステータスをチェックしているのです。
そして、Wifiをオフにするとdriverがunloadされて、Wifiのステータスをチェックするサービスも止まります。
つまり、mode変更の鍵は、Wifiのステータスをチェックするサービスにバレないようにmodeを変更する必要があるのです。
じゃあどうするの?
簡単な話です。
4.0と2.0どこが違うの?
上記の通り、driverでは特にmode変更を阻止するような処理を一切加えてないのが2.0です
mode変更がされてもその度に上書きをしているだけです。
しかし、Android4.0では、driverから直接無理ですと言われていることが分かります。
なので下位レイヤーから変更を加える必要があります。
ただ、少し謎なのがNexus7では、iwconfigからMaster(テザリング)にモード変更しようすると、さっきと同じエラーが出るのに対して、Androidの非公式API(Reflection経由)からテザリングをOnにしてiwconfigでmodeを確認するとMasterに変わってるんですよね・・・・。
なので、wpa_supplicant経由で変更する方法があるのかもしれません。
でもやっぱり、Android4.0でもAdhocやりたい
できません!だけだったらブログは書きません。
ちゃんと、やり方があります。
というのも、完全に拾いもんですが。
Adhocに対応させてるCustom Romを配布しているところを見つけました!!
以下のURLに詳細は書いてあるので、そちらかDLして入れてください。
http://www.thinktube.com/component/content/article/19-technicalinformation/46-android-wifi-ibss
まだ、ちゃんと技術詳細とか読んでないので、今度読もうと思います