Androidで複数の無線ネットワークインターフェースを使う方法

7,584 views
Skip to first unread message

金泰斗

unread,
May 15, 2012, 11:13:06 PM5/15/12
to android-g...@googlegroups.com
金といいます。

Androidの端末で、複数の無線ネットワークインターフェースを同時に使う方法はありますでしょうか。

具体的には、Wifi機能を有するAndroidタブレットに、無線LANのUSBアダプタを接続し、
一方のWifiをWANに、もう一方を無線LANAPとして稼動させ、
Android端末にルーターのような動きをさせる使い方ができないかと考えています。

テザリング対応機種であれば、内臓Wifi機能をAPとして稼動させることができるので、
この状態で、WAN側を有線ではなく、外部接続している無線のUSBアダプタを有効にできれば、
と思っています。

もちろん、外部接続する無線LANアダプタのドライバが必要になることは
わかっていますが、その先の話として、
そもそも、Androidの設定画面上、Wifiの項目が2つ以上あるものを
見たことがないのですが、上記のようなことを実行することは可能でしょうか?

単に設定変更などでできるような話ではないと思っていますので、たとえば動作させる際に
root権限で実行するようなアプリを使ったり、コンソールからrootでログインして内部設定をいじったり、
どうしてもほかにやりようが無い場合は、sourceからmakeしなおすようなことまで視野に入れています。

自分なりにWEB上の情報などはいろいろ調べては見たのですが、どうにも上記のようなちょっと
特殊な使い方をしている事例は見当たらず、どういったところから調べていけばよいのか
取っ掛かりを見つけられずにいます。

もし、上記のような構成で動かしたことがあるといった
情報がありましたら、ご助言いただければ幸いです。

よろしくお願いします。

金泰斗

unread,
Jun 4, 2012, 4:00:55 AM6/4/12
to android-g...@googlegroups.com
以前この質問を投稿させていただきました、金と申します。

その後、返信が無かったため、試されたことのある方がいないのだろうと思い自力でいろいろと調べ、
Kernelのmake時にmenuconfigでチップのドライバを指定することで、とりあえず、
USBアダプタを差し込めば、wlan1など、ネットワークインターフェースとして認識してくれるところまでは
進むことができました。(もちろん、wlan0はもともと内蔵されている分です)

   shell@android:/ # netcfg
   netcfg
   lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
   ifb0     DOWN                                   0.0.0.0/0   0x00000082 42:9d:3f:f9:9e:85
   ifb1     DOWN                                   0.0.0.0/0   0x00000082 a2:1b:66:3a:87:3e
   sit0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
   ip6tnl0  DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
   eth0     UP                                     0.0.0.0/0   0x00001043 4a:b7:3f:03:d1:6f
   wlan0    UP                                172.17.0.141/24  0x00001043 de:ad:be:ef:00:00
   wlan1    DOWN                                   0.0.0.0/0   0x00001002 00:0f:53:82:24:63

しかし、これより先に進むことができずに困っています。
Linuxであれば通常、iwやiwconfigを使って無線LANのSSIDなどを設定するかと思うのですが、
Androidではこれらのツールがインストールされていないようです。
代わりに使うツールとしては、 wpa_supplicant なのかな、というところまではなんとなく
絞り込んだのですが、設定ファイルの問題なのか何なのか、うまくいきません。
どなたか、コンソールから手動で無線LANの設定をする方法をご存じないでしょうか。

設定ファイルは下記のとおりです。

shell@android:/ # cat /sdcard/wpa_wlan1.conf
cat /sdcard/wpa_wlan1.conf
##### wpa_supplicant configuration file template #####
update_config=1
ctrl_interface=wlan1
ap_scan=1
fast_reauth=1


network={
        ssid="******"
        psk="-------"
        priority=5
}


※****および---には実際に使用する値を書き込んでいます。
このファイルを使い、
   wpa_supplicant -Dwext -iwlan1 -c/sdcard/wpa_wlan1.conf -dddt
とコマンドを実行。
エラーは出力されず、正常終了したように見えますが、wlan1 を up に使用とすると
   255|shell@android:/ # ifconfig wlan1 up
   ifconfig wlan1 up
   error: SIOCSIFFLAGS (No such file or directory)
と、エラーが出力されます。
ifconfig実行時には dmesg に
   <3>[ 2634.663024] phy1 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
このようなエラーが出力されています。

対処法のわかる方がいらっしゃいましたらご教示いただければ幸いです。
よろしくお願いします。

Aska

unread,
Jun 6, 2012, 10:20:50 AM6/6/12
to android-g...@googlegroups.com
askaです.
 
金さんも書かれているように, コンソールからiwconfigを使って, wlan1がAPに接続可能か, など
基本的な動作確認を行うのがいいでしょう!!
 
> Linuxであれば通常、iwやiwconfigを使って無線LANのSSIDなどを設定するかと思うのですが、
> Androidではこれらのツールがインストールされていないようです。
iwconfigをAndroidで動作させるのはそれほど難しくないですよ.
Android-x86(1.6)にiwconfigをポーティングしたときのページです. 参考になるかと思います.
 
こちらは, Android-x86にWLANを載せたときのページです.
1.6なので使用されているバージョンと異なるかもしれませんが, AndroidのWifiの仕組みを
理解するのに少しは参考になるかと思います. (細かいところは誤っているかも....)
 
以上.
 
2012年6月4日月曜日 17時00分55秒 UTC+9 金泰斗:

松永卓也

unread,
Jun 6, 2012, 10:50:59 AM6/6/12
to android-g...@googlegroups.com
kmt-tです。

すごく昔(2年以上前)に無線LAN動かしてみましたが、その時はwifi.cという
ファイルがソースツリーのどこかにあって、そこでwpa_supplicantを制御する
ようになっていました。デバイス名などはソースコードにハードコーディング
されていたので当時はふたつの無線LANインターフェイスを動かすのは
大改造が必要でした。

>    ifconfig wlan1 up
>    error: SIOCSIFFLAGS (No such file or directory)
これがでるのはデバイスファイルがないなどの理由だと思いますが、

> ifconfig実行時には dmesg に
>    <3>[ 2634.663024] phy1 -> rt2x00lib_request_firmware: Error - Failed to
> request Firmware.
WiFiドライバのロードに失敗してますね。
WiFiデバイスを動かすにはデバイスドライバの他にファームウェアと呼ばれる
バイナリファイルが必要です。またファームウェアはドライバから認識できる
パスに配置する必要があります。どのディレクトリにファームウェアを置けば
いいかは忘れました。

中途半端な情報ですが、何かの手助けになれば幸いです。

2012年6月6日 23:20 Aska <moonlig...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/BzKyjREOf7AJ
> にアクセスしてください。
>
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。

金泰斗

unread,
Jun 8, 2012, 2:37:09 AM6/8/12
to android-g...@googlegroups.com
Aska様、kmt-t様

元記事を投稿しました金です。

回答いただきありがとうございました。

実は、その後いろいろ試していたところ、手元にあった、別のUSB-WiFiアダプタを
使って、解決できましたのでご報告させていただきます。

結局、以前投稿させていただいた際に使っていたアダプタでは、kmt-t様の
ご指摘にあったファームウェアの問題が解決できずいったんあきらめました。
もう1つ手元にあったものを接続して見たところ、こちらはファームウェアが
内蔵されていたものと共用で使えたようで、そのまま認識されました。
その後、wpa_supplicantを使って設定しようとしたところで、permission dniedの
エラーが出てしまい、この2,3日はまっていたのですが、
つい先ほど、原因というか理由が判明しました。

wpa_supplicant -Dnl80211 -iwlan1 -c/data/misc/wifi/wpa_wlan1.conf
として実行すること自体は間違っていなかったのですが、
confファイルの中身で指定するctrl_interfaceは、実行時に作成される、
作業ディレクトリの保存場所を指定していたようで、標準では、
user=wifi group=wifi で、mkdirできる場所を指定する必要があったようです。
ということで、confファイルの中身を
ctrl_interface=/data/misc/wifi/wlan1
このように書き換えることで、無事、wlan1をupさせることができるようになり、
dhcpでIPアドレスも取ってくることができるようになりました。
(もともとの ctrl_interface=wlan1 ではカレントディレクトリに wlan1 を作成して
有効化することになるようで、実行時の場所しだいではこのままでも有効化
できていたのですが、ルートディレクトリなどで実行すると、root権限で実行しても
wpa_supplicantの起動はwifiのためディレクトリを作ることができずエラーと
なってしまい、悩みました)

wlan0を無効にした状態でwlan1を使って通信させるためには、
もう少し手間を加えなければいけないようですが、とりあえず
前に進むことができました。

現状では機械の相性(というかファームウェアの有無)で
左右されてしまうので、お二方にご教授いただいたリンク先でもう少し
勉強したいと思いますが、当面の課題は解決できました。
ありがとうございました。
Reply all
Reply to author
Forward
0 new messages