Closed ma34s closed 11 years ago
正常な動作をしている時/dev/には以下のdeviceが存在する /dev/felica /dev/felica_ant /dev/felica_cen /dev/felica_int_poll /dev/felica_pon /dev/felica_rfs /dev/felica_rws
CustomKernelでは、 /dev/felica_int_pollのみとなる。 これは、 https://github.com/kbc-developers/kernel_samsung_exynos4412/blob/android-3.0-v1.0-test/drivers/felica/felica.c#L591 この辺の処理に入っていないからと思われる。
カスタム判定は、以下と思われる https://github.com/kbc-developers/kernel_samsung_exynos4412/blob/android-3.0-v1.0-test/drivers/felica/felica.c#L676
同様にカスタム判定しているコードは https://github.com/kbc-developers/kernel_samsung_exynos4412/blob/android-3.0-v1.0-test/drivers/misc/tzic.c#L115 ここにも存在しており、/system/bin/mfscや/system/bin/mfdpからアクセスしていると予想される
やった事
1.init.carrier.rcのFelica関連サービス(system/bin/mfscや/system/bin/mfdp)を実行しないKernelを焼き起動する。 →FelicaDeviceLockはかからない(外部アクセス可) => SBLでロックするのではない事が判明
2.Felica関連サービスを有効にして、falica.cのカスタム判定で2(!=1)を返すKernelを焼き実行 →FelicaDeviceLockはかからない(その後小変更にしているうちにLockがかかった) この状態でOficialに戻したところ、Lock解除されず、Recoveryを一旦起動し通常起動でLock解除を確認
※この件については、APP起動がトリガになったのかもしれないし手順ミスがあったのかかもしれない未確定情報です
参考にまでにSC-06Dの調査結果を書いておきます。 挙動がかなり違うため参考にはならないかもしれませんがw
【参考情報】SC-06D custom binary状態でのFelica動作について
SC-06Dでは電源投入直後から外部からのアクセスが不可能となる、 これはbootloaderでlockされていると仮定する(offical binaryでも同様の動作) したがってfelica deviceは初期状態がLockedとなっており、起動の過程でUnlockされている。 補足: mfdp,mfscを起動しない場合、正常時でもLockされたままになる
起動時に/dev/felica_を作成するのはmfdpデーモンからのmessage(netlink)、CONNECTによって作成されるものである 但しcustom状態ではこのCONNECTメッセージが来ないため、/dev/felica_が作成されない
Lockを解除するのはmfscデーモンであるが、上記/dev/felica*が存在しないためLockが解除されない
起動時にダミーとしてCONNECTを送ったところ/dev/felicaが作成され、Lockも解除された(外部アクセス可) Felicaアプリも起動可能になったが、mfdpからのCONNECTが行われていないため、 kernelからのsendmsgが行えないので正常には動作しない
※SC-06Dでの調査はここまでとし紛らわしいので本issueでは議論しない
Felica関連サービス(system/bin/mfscや/system/bin/mfdp)無効Kernelにてadb経由で
としてs-ビス開始した時、以下関数がコールされたのを確認。 https://github.com/kbc-developers/kernel_samsung_exynos4412/blob/android-3.0-v1.0-test/drivers/felica/felica.c#L883
その時のログは
<6>[MFDD] felica_int_poll_open START <6>[MFDD] felica_int_poll_open END <6>felica_int_poll_poll START <6>felica_int_poll_poll END <6>[MFDD] felica_int_poll_read START <6>INT-PIN value is [1][HIGH] <6>[MFDD] felica_int_poll_read END <6>felica_int_poll_poll START <6>felica_int_poll_poll END
felica_smc_read_oemflag() などを詐称しても、時間経過(Sleepかな?)でLockがかかる模様。 少なくとも起動時からLockされない事から方向性は間違ってないと思われ oemフラグ判定コードはまだ存在する可能性が高い。
時間経過(Sleepかな?)でLockがかかる模様。
Lockのログは出ますか?
戻してやってみます! BTA出番だ(笑)
取り急ぎ、もう一回で確定できると思いますが
ただのrebootだけではLockかかってなかったようでしたが、 app起動後rebootのタイミングでLockかかってますね。 (app起動後にsleepして復帰を繰り返すだけだとLockかからず)
確定事項。
Kernelを焼いた時、初回はOK ただし/dev/felica*はできてない。
この状態で再起動(app起動に依存なく)時にLockされて使えなくなる
初回OKなのがよくわかんないですけど、二回目以降はSC-06Dと似た挙動ですね。
https://github.com/kbc-developers/kernel_samsung_exynos4412/issues/2 こちらで進めてしまったけど、 Felica動作について、 sakuramilkさんがSC06Dで解明した方法が SC02Eでも使えることがわかりましたのでクローズします
カスタムカーネルを入れることでStatusが"custom”になっている場合、 DeviceLockがかかり、外部アクセスもできない状態になります。
わかっている事 ・Countに依存しない(Official Kernel/Recoveryに戻すことで使用可能になる) ・SC02Eでは、起動時にBOOT領域、RECOVERY領域をチェックして Statusを変更するため、ddで書き込んでもNG