[失敗]Cyanogenmod 10.1 な HTL22 の Felica と NFC を動かす

先日 Cyanogenmod 10.1 な HTL22 で Felica と NFCが動かないのは Nfc.apk が HTL22 で使用されているNFCチップに対応していない為だという記事を書いたが
調査を進めていくうちに新たな事実がわかったのでここにまとめ。
同じチップを搭載した他の端末を ROM 焼きする際にも役に立つと思われる。

NFCソースの解析 - Android Memo Wiki

上記のサイトを読んだところ、Nfc.apk から呼び出される libnfc.so がチップ固有のライブラリであることがわかった。
CyanogenModに付属している libnfc.so は pn544 専用のライブラリなので HTC J One HTL22 の cxd2235 では正しく動作しない。
海外版の One は pn544 を搭載しているため正しく動作する。

以上のことを踏まえると、cxd2235 に対応しており尚且つ CyanogenMod の Nfc.apk から呼び出し可能な libnfc.so があれば、 Cyanogenmod 10.1 な HTL22で Felica と NFCを動かす事が出来ると考える。

なお、NFC対応が欲しいためにHTL22を購入したのでNFCをオミットする考えは無い。
NFC無いのでよければISW13HT買うわ

今後はライブラリをとっかえひっかえしていくことになるだろう。

2013/9/20追記

libnfc*.soはチップ固有であるだけで無く、デバイス固有でもあることが分かった
UART のポート番号などが埋め込まれているためチップが一致していても正しく動作しない。
ソースが公開されていない以上、元のデバイスからファイルを移植する以外道は無いだろう

またさらにチップ自体のロックをどうにかして解除する必要がある。
NFCチップのロックを司る下記のapkと関連するframeworkを移植する必要があると思われる。
移植作業を行っているがまだうまくいっていないのが現状である。

Xperiaの場合

  • NfcLock.apk
  • Settings.apk
  • Bootinfo.apk
  • SmartcardService.apk

HTCの場合

  • Settings.apk
  • KDDI_Felicalock.apk
  • SmartcardService.apk

ファイルを持ってくる候補

  • SO-02E_10.1.D.0.343_system.zip
  • HTL22_GooglePlayEdition_PortROM_GSM_1.0.zip
  • RUU_M7_WLJ_JB_50_KDDI_JP_1.05.970.2_Radio_1.23.11.0510_unsigned_htcsoku_PN07IMG.zip

実験してみた

実験1 libnfc.so と libnfc_ndef.so だけを差し替える。

すべて cannot locate symbol が出る。
libnfc_jni.soから呼び出すシンボルが無いって事だ。
ちょっと差し替えるだけでいけるほど甘くは無いな

実験2 libnfc_jni.soも書き換える

これもエラー
RegisterNatives failed for なんたらかんたらと出る
ライブラリととapk内の呼び出しが合ってないと駄目なようだ

実験3 Nfc.apk のネイティブライブラリを呼び出してる部分も書き換える

駄目なら書き換えれば良いじゃない
と言うわけで CyanogenMod と HTL22_GooglePlayEdition_PortROM の smali を合成してみました。
書き換えた物をこのページの末尾に「system.rar」として添付してあります。


実験を進めていく家にどう逆立ちしても動かない事が分かったので消しました。

だがまだ動きません。
エラーも出ないのでよくわかりません。

誰かデバッグとフィードバックお願いします。。

フィードバックは sora (sor593)さんはTwitterを使っています までどうぞ。

HTC Sense 5環境が意外と快適なので無理して移植しなくて良いよね。と言うことで全てのプロジェクト凍結。

メモ

CM10なHTL22に追記したueventd.rc

# felica device file nodes
/dev/felica            0666   nfc   nfc
/dev/felica_pon        0666   nfc   nfc
/dev/felica_cen        0666   nfc   nfc
/dev/felica_rfs        0444   nfc   nfc
/dev/felica_rws        0666   nfc   nfc
/dev/felica_int        0444   nfc   nfc
/dev/felica_int_poll   0400   nfc   nfc
/dev/felica_uid        0222   nfc   nfc

# snfc device file nodes
/dev/ttyHS1            0660   nfc   nfc
/dev/snfc_pon          0660   nfc   nfc
/dev/snfc_cen          0660   nfc   nfc
/dev/snfc_rfs          0660   nfc   nfc
/dev/snfc_intu         0660   nfc   nfc
/dev/snfc_intu_polling 0660   nfc   nfc
/dev/snfc_auto_polling 0660   nfc   nfc
/dev/snfc_hsel         0660   nfc   nfc

HTL22のFleicaデーモンなどの仕込み方

CM10なHTC Jをおサイフ対応させる | hello.c

人柱用zipファイル(動きません logcatを眺めるだけです。

HTL22のRUUからブチ抜いて改造したNfc.apkを含むzipファイルをページの末尾にうpしました。

実験3の「system.rar」とは別のやり方で作った物です。

「cm10-felica-htl22-test3-2_signed..zip」です。Recoveryから焼く形式です。

「cm-10.1-20130906-UNOFFICIAL-m7wlj.zip」以降の日付のバージョンと互換性があります。

なんか良いとこまで行ってる気がしますが動いてません('A`)

2013/09/07 v2

DBG=falseとかみつけたからDBG=trueにしてみた

だが動かない物は動かない

2013/09/20

Settings.apk KDDI_Felicalock.apk SmartcardService.apk等も移植したzipファイルに差し替え (cm10-felica-htl22-test3-2_signed.zip

CyanogenMod10.1のAPKやframeworkの改変した部分のソースを「smail-mod.rar」としてうp

誰かデバッグとフィードバックお願いします。。

フィードバックは sora (sor593)さんはTwitterを使っています までどうぞ。

大事なことなので(ry

ċ
SO-04E_10.1.1.D.2.31_NotSure-kernel.elf.ramdisk.gz
(1782k)
Sora Kumo,
2013/09/13 8:58
ċ
cm10-felica-htl22-test3-2_signed.zip
(18255k)
Sora Kumo,
2013/09/19 22:53
ċ
smail-mod.rar
(465k)
Sora Kumo,
2013/09/20 2:05
Comments