攻撃は最大の防御なり

50代おやじの適当なブログです。

[Android] boot.imgを入れ換えたらwifiが繋がらなくなったんだけど

2011-12-09 09:06:21 | Android
一応、前回で予定していた内容が終わりましたので、これからは好き勝手に書いて行きます。
役に立つかもしれないし、立たないかも知れないw

良くboot.imgを入れ替えたらwifi接続が出来なくなったと言う人がいますが
これは当然と言えば当然です。
wifiモジュールはカーネルビルド時に生成されるもので、必ず対で無ければならないのです。

では、実際に見て行きましょう。
wifiモジュールは/system/lib配下にあります。
HTC Sensationの場合は/system/lib/modulesですね。
adbから下記のコマンドで探す事が出来ます。

find /system/lib -name *ko

こいつのファイル名は端末が使っているwifiチップによって違います。
入っている場所も違うんじゃないでしょうか?

カーネルが実際にどのモジュールを使用しているのか調べるには

lsmod

です。
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から

cat /proc/version

を使って取得したカーネルのバージョンです。

これはwifiモジュール/system/lib/modules/bcm4329.koの中身をバイナリエディタで開いてみた所です。



カーネルバージョンの文字列が入っていますよね。
ここの「gc0ac669」の所はマジックナンバーでビルドする度に変ります。
カーネルはこのモジュールに含まれるマジックナンバーを含むカーネルバージョンが合致しているかを確認し
自分用か判別しています。

ちょっとした裏技ですがここのマジックナンバーを書き換えてしまえば正常に動く場合もあります。

最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
Unknown (936)
2011-12-16 13:23:26
お久しぶりです^^
なるほど、この方法で行えばEVO WiMAXでCustomROMでWiMAXが使用できない問題も解決できるかもしれませんね。

あと、ブログを立ち上げましたのでお暇な時にお立ちより下さい。
返信する
Unknown (アレ)
2011-12-19 08:55:29
お久しぶりです。

ちょっと覗きましたが、ガンガン更新しているじゃないですかw
頑張って下さいませ。
返信する
バッテリー15%になると光り出すLEDを制御したい (936)
2012-03-21 21:18:36
お疲れさまです^^

どこで質問するのが適切か分からずこちらに致します。

残バッテリー15%になると光り出すLEDを制御したいのです。

アプリで制御できるものもありますが出来れば設定ファイルを直接変更したいです。

設定ファイルは下記pathにあるみたいです。
/sys/camera_led_status/low_cap_limit

しかし上記ファイル内容を変更しようとしてもerrorで適応されません。
sysfsはrwでマウントされているので書き込みできるとは思うのですが...

ファイルが違うのでしょうか?

またその他にご存知の方法があれば是非教えてください。
返信する
Unknown (アレ)
2012-03-22 00:23:03
/sysの中身はカーネルの設定値が見えているだけで
編集可能な通常ファイルではありません。

恒久的にlow_cap_limitの値を変更する為には、
カーネルソース上の値を変更してリビルドするか
オーバークロックモジュールの様なlow_cap_limit変更専用の
モジュールを作成する必要があります。
返信する
Unknown (936)
2012-03-22 00:43:44
カーネルですか…。
やはりそこにぶち当たるのですね。
了解しました~

返信ありがとうございます^^
返信する

コメントを投稿