2011年7月9日土曜日

[KERNEL] Galaxy S2 BLN support kernel *TEST* version part-1

週末の時間の取れるときしか、がっつりいじれませんが、すこしづつ進めてまして、neldarさんのGalaxy S用BLN関連ソースを参考に、自分のkernelソースに組み込んでみてます。本来はlights.*******.soを入れ替えないでkernel側だけで何とかできないものかと、LEDのsysfsを作ったりしてみましたが、neldarさんの取ってるアプローチが最適だと思われます。基本方針としては。

1.kernel側のドライバにBLN用のsysfsファイルを用意して基本はここで制御。
2.lights.*****.soをこのsysfsを呼び出すように変更したものに置き換える。
3.アプリでenable/disableの切り替えやblinkの設定などが行える。

今回はあくまでもテストで実装しているので、Marketにあるneldarさん作のBLN Appがそのまま使えるようにBLNのsysfsとlights.*****.soが準備できるかとうことろですね。
#blinkを試すには有料版買う必要があるか。。

まず、SC-02Cのliblightsですが、
/system/lib/hw/lights.SC-02C.so
がそれです、まずこれをadbで抜き出してバックアップしておきます。
adb pull /system/lib/hw/lights.SC-02C.so
ちなみにこのファイルをstringsとかobjdumpでながめてみると、下記のようなsysfsを呼び出しているのがわかります。DDMSなどでログをながめているとlightsのライブラリのデバッグログが出てますが、下記のsysfsのうち/sys/class/leds以下のものは、そもそもS2には/sys/class/ledsのファイルエントリ自体が存在していないので、無意味な呼び出しになってます。有効なのはmelfas_touchkeyとpwm-backlightだけっぽいです。
strins lights.SC-02C.so
...
..
.
/sys/class/leds/jogball-backlight/brightness
/sys/class/leds/red/brightness
/sys/class/leds/green/brightness
/sys/class/leds/blue/brightness
/sys/class/leds/amber/brightness
/sys/class/leds/red/device/grpfreq
/sys/class/leds/red/device/grppwm
/sys/class/leds/red/device/blink
/sys/class/leds/amber/blink
/sys/devices/virtual/misc/melfas_touchkey/brightness
/sys/class/leds/keyboard-backlight/brightness
/sys/class/backlight/pwm-backlight/brightness
/sys/class/power_supply/battery/temp
QCT MSM7K lights Module
Google, Inc.
...
..
.
lightsをダンプしてみた結果とDDMSのログからわかるのは、このshared-libraryはmsm7kのもので、ほとんど手が加えられていなそうだということです。じっさいAndroidのソースをrepo syncしてmsm7k以下のliblights/lights.cを見ればだいたい推測できます(完全にカンですけどね)。ただ1点だけ、これがわからない。
/sys/class/power_supply/battery/temp
バッテリの温度を読み取れるsysfsで、S2にも存在しているファイルなんですが、lightsからこれをreadする意味がわからない。既存のlights.cをいろいろあたってみてもTEMPERATURE_READを処理してるのは皆無。。lightsの役割を考えると、通知LEDがそもそも存在しないS2には必要なしと考えwこいつはサポートしない方向で。とはいえ時間に余裕ができたら、disassembleしてみますわ。

というわけで、msm7kのものをBLNのsysfsがコールできるように、それからneldarさんのBLN Appが認識可能なように手を入れる方針でいきます。

あーそれにしても、repo syncおわんね。

0 コメント:

コメントを投稿