一応、前回で予定していた内容が終わりましたので、これからは好き勝手に書いて行きます。
役に立つかもしれないし、立たないかも知れないw
良くboot.imgを入れ替えたらwifi接続が出来なくなったと言う人がいますが
これは当然と言えば当然です。
wifiモジュールはカーネルビルド時に生成されるもので、必ず対で無ければならないのです。
では、実際に見て行きましょう。
wifiモジュールは/system/lib配下にあります。
HTC Sensationの場合は/system/lib/modulesですね。
adbから下記のコマンドで探す事が出来ます。
find /system/lib -name *ko |
こいつのファイル名は端末が使っているwifiチップによって違います。
入っている場所も違うんじゃないでしょうか?
カーネルが実際にどのモジュールを使用しているのか調べるには
です。
wifiモジュールはwifi接続を有効にした時だけ動的に読み込まれます。
ここで注意したいのはカーネルがboot.imgに入っているのに対し
モジュールがsystem.imgに入っている嫌らしい構成になっている事です。
仕組みを理解していない人は関連性に気付かず、はまるポイントとなります。
配布する側としても複数のリソースを同時にcommitしなければいけない状態で
悩ましい所となります。
でも、ちょっと待って下さい。
同じ機種でもリージョンが違ったりすると使えなくなる場合がありますよね。
例えばHTC Sensationの欧州版とアジア版の中身なんてそう大した違いは無いはずです。
それでも使えなくなるのは何故なんでしょうか?
Linux version 2.6.35.14-gc0ac669 (alex@alex-linuz) (gcc version 4.4.0 (GCC) ) #24 SMP PREEMPT Sat Sep 10 12:32:05 JST 2011 |
これは、俺のSensationから
を使って取得したカーネルのバージョンです。
これはwifiモジュール/system/lib/modules/bcm4329.koの中身をバイナリエディタで開いてみた所です。
カーネルバージョンの文字列が入っていますよね。
ここの「gc0ac669」の所はマジックナンバーでビルドする度に変ります。
カーネルはこのモジュールに含まれるマジックナンバーを含むカーネルバージョンが合致しているかを確認し
自分用か判別しています。
ちょっとした裏技ですがここのマジックナンバーを書き換えてしまえば正常に動く場合もあります。