今日のメモ (Android で無線 dongle 認識の巻)

無線 dongle は認識できているので Android 側にどうやってその情報を渡すか、な世界。
色々な手法がある模様。

  • armadillo 的には chroot 元の Linux で認識させときゃ OK 的ソレ
    • /sys 配下の情報が引き継がれるのであればいっちゃん楽
  • Android 起動時に認識させちゃえ的ナニ
    • init.rc でやれば良い模様
  • ちゃんと設定から ON/OFF できるように
    • hardware/libhardware_legacy/wifi/wifi.c に手を入れる必要あり、との事

とりあえず Android 起動時にデバイスが認識できてりゃ OK って方向で検討。

迷走

最初は armadillo なシステムイメージにドライバを書いて flashROM 方面に書く方向かの、と色々調べてたんですが、どうにも面倒なので、というかそもそも chroot 元なんていう概念は無いだろ、という事から android 起動時になんとかならないかを Google 先生にお伺いしてみました。
と、init.rc で insmod するのであれば、Android なイメージに .ko なドライバがあれば良い事が判明。ソレであれば userland なイメージを云々しなくても良い。
どうやら wpa_supplicant なソレも android 側で設定可能な模様。という事にて、とりあえずドライバが Android 起動時に insmod されるかどうか、を確認してみました。

ドライバを insmod させる実装

  • init.rc は armadillo500fx であれば vendor/sola/a500fx 配下の init.rc に手を入れれば良い模様
    • ちなみに /sbin/insmod は実機にありました
  • .ko なソレは out/target/product/a500fx/system/lib/modules 配下に置けば良い模様
    • modules というディレクトリは無いので掘る必要あり

という事で実際を以下に控え。

$ mkdir $ANDROID/out/target/product/a500fx/system/lib/modules
$ cp rt2870sta.ko $ANDROID/out/target/product/a500fx/system/lib/modules/.

で、$ANDROID/vendor/sola/a500fx/init.rc に insmod を追加。

on boot
# basic network init
    insmod /system/lib/modules/rt2870sta.ko # add
    ifup lo
    hostname localhost
    domainname localdomain

上記を盛り込んで Android なイメージをコンパイル後、実機転送して動作確認してみた所、カーネルバッファに認識な旨の出力を確認できました。
んですが、ここでデバイスファイルの存在確認をしようとしたのがハマりの入口。/dev 配下に ra0 なるデバイスファイルが無い。どうやら最近は /sys 配下にこれ系のナニがあるみたいですね。
しかも作った Android なイメージで起動すると例外吐いて止まる、という挙動が続いてキレてる次第だったりしてます。

とりあえず

wpa-supplicant なナニと LocationManagere なナニの調査は明日以降で色々確認予定ってコトで。