ジャンル不定の日記です。

SC-02C にi9100のROMを入れる際のGPSとコンパス対応

SC-02Cにi9100(グローバル版GALAXY SII)のROMを入れるとGPSが機能しないのとコンパスが逆になる。

わけだが、
【ROM焼き】docomo GALAXY S II SC-02C root33
の356,412氏が対応方法教えてくれた。

356 :名無しさん@お腹いっぱい。:2018/03/04(日) 09:56:03.59 ID:1z/dnEf0.net
    >>342その後
    コンパス逆は意外にすんなり修正箇所特定出来たので直してみた

    修正箇所:磁気センサーXYZの各値にそれぞれ以下の補正値を乗算している
     原本)X:+0.0625 Y:-0.0625 Z:+0.0625
     修正)X:-0.0625 Y:+0.0625 Z:+0.0625

    /system/lib/hw/sensors.exynos4.soの下記4箇所
    3638 4F→50
    365E 46→45
    3C84 21→20
    3CA6 17→18

↑これはadbでpullしてバイナリエディタでいじってpushしてみたが正常になってた。


412 :名無しさん@お腹いっぱい。:2018/04/24(火) 21:06:11.74 ID:CU0tt9P8.net
    >>342,356のその後
    既に342のSC-02C用ロムは使用していないが
    i9100用ロムとの違いを洗い出すことでGPSの該当箇所を特定
    そして改変方法を確立して他のi9100用ロムでもGPSを有効にすることができた

    概要を書くと
    GPS関連の標準入出力(GPIO)ポートがi9100では237番なのに対しSC-02Cでは252番になっている
    なのでi9100用のロムについて、237番の所を252番に書き換えてやればGPSは動く
    但し、その該当箇所はカーネル内にあり、これを改変するのはちょっと面倒くさい

    おおまかな改変手順はこんな感じ
    1.boot.img(zImage)にはlzma圧縮されたカーネルが埋め込まれているので、これを切り出す(大きさは5~7MB程度)
    2.切り出した圧縮ファイルを展開すると20数MB程度のファイルが一つ出てくる
    3.この20数MB程度のファイルがカーネル本体で、こいつをバイナリ改変する(ED→FCを6箇所)
    4.再圧縮して元通りboot.img(zImage)に埋め込む

そして425氏が、
kernelmodtool_2.zip
を公開してくれた。
これは412の作業をするのに便利なboot.imgのアンパックとリパックした上でOdinやheimdallでflashできるようにtarにするスクリプト。
と、412をもっと詳しく説明した.txtとか入ってる。


2人共マジ感謝です。
これで死ぬまでSC-02Cメインで行けそう!

というわけだが、425のスクリプトはアンパックとリパックだけで書き換えはしてくれないので、自動でやるPerlスクリプト作った。
replace.tar.gz

kernel内から ED00A0E3 を5個探して、次の ED20A0E3 を1個探す。
計6箇所の ED を FC に書き換える。
ってな処理する。

使い方
412氏のスクリプトと同じ場所に置く。
$ ./replace.pl
で kernel_work/kernel が書き換わる。

元のkernelは別名保存しておきcmpコマンドなどで比較したほうが良いと思います。


GPSの方はネット経由の位置情報と区別つかないからコンパスと違って確認しにくい。
SIM抜いてwifi切ってマップ見れば良いのか?
前にSIM入れてないサブ機でi9100のROM入れるとGPSが機能してないのに気づいたが、
今SIM入ってるメイン機で確認しても確認できん。データ通信切るだけじゃSIMから位置情報きちゃうの?