OffHostApduService で宣言する AID の NFC オフホスト ルートとして UICC を使用するように、Nexus 5X (ブルヘッド) または Nexus 6P (Angler) で NFC チップセットを構成しようとしています。
編集 2016 年 1 月 17 日: この質問を更新し、Nexus 6P もテストする機会があり、5X とまったく同じように動作するため、Nexus 6P も含めました。そのため、5X で得られたこれまでの調査結果はすべて 6P にも当てはまるようです。
ここでのこの質問に対するMichael Rolandの回答とNexus 6(shamu)のおかげで、Nexus 5(ハンマーヘッド)でこれを行うことができました( GithubリポジトリのNexus 6 bcm2079x構成を参照)。
ただし、Nexus 5X (および 6P) は異なるようです。
- ifixit の分解によると、Nexus 4、5、6 のような Broadcom bcm2079x ではなく、NXP (PN548) の新しいチップセットが含まれています。
- デバイスが Mifare Classic タグを読み取ることができ (Broadcom チップセットは Mifare Classic をサポートしていないため、NXP チップセットが含まれているという仮定を強化します)、デバイス ファイル
/dev/pn548
が存在することを確認できます。 - しかし、奇妙なことに、下に
libnfc-brcm.conf
と構成libnfc-nxp.conf
ファイルの両方が含まれています/system/etc/
(これらは、私の Github リポジトリにもあります)。
出発点として、両方の構成ファイルのトレース/ログ設定を変更しました
- brcm
APPL_TRACE_LEVEL
に設定0x05
- nxp を に
NXPLOG_*_LOGLEVEL
設定します0x03
不思議に思ったのは、BrcmNfcJni
Nexus 5 および 6 で見たものと同様に、起動時に logcat に多くのメッセージが表示されることでした (これは、NXP チップセットを搭載したデバイスでは予期していなかったものです)。
12-11 20:45:36.840 D/BrcmNfcJni( 3434): JNI_OnLoad: enter
12-11 20:45:36.841 I/BrcmNfcJni( 3434): NFC Service: loading nci JNI
12-11 20:45:36.841 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcManager: enter
12-11 20:45:36.841 D/BrcmNfcJni( 3434): PowerSwitch::initialize: level=PS-UNKNOWN (0)
12-11 20:45:36.923 D/BrcmNfcJni( 3434): PowerSwitch::initialize: desired screen-off state=1
12-11 20:45:36.923 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcManager: exit
12-11 20:45:36.923 D/BrcmNfcJni( 3434): register_com_android_nfc_NativeNfcTag
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::RoutingManager(): default route is 0x00
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::RoutingManager(): mOffHostEe=0xF2
12-11 20:45:36.924 D/BrcmNfcJni( 3434): RoutingManager::registerJniFunctions
12-11 20:45:36.924 D/BrcmNfcJni( 3434): JNI_OnLoad: exit
....
....
編集 1: ソースから、これらの「BrcmNfc ..」ログ メッセージがlibnfc-nciライブラリのコードから出力されることを知りました。以前のデバイスでは、NCI ( N FCコントローラー インターフェイスの略) は Broadcom チップセットでのみ使用されていました (これが、コードがログに " Brcm " というプレフィックスを使用する理由だと思います)。しかし、どうやら新しい NXP チップセットもこの標準化されたインターフェイスを使用するようになり (これは良いことです)、NXP チップセットでも「Brcm...」ログ メッセージも表示されるようになりました。
編集 3: 両方の電話 (Nexus 5X と 6P) には、ファームウェア バージョン 10.01.19 (少なくとも Android 6.0.1 リリース) を実行するNXP PN548/C2 NFC チップセットが含まれているようです。
もちろん、NXP pn54x halimpl からの出力もあります。
12-11 20:45:37.407 D/ ( 3434): phNxpLog_InitializeLogLevel: global =1, Fwdnld =3, extns =3, hal =3, tml =3, ncir =3, ncix =3
12-11 20:45:37.408 D/NxpHal ( 3434): Entering phNxpNciHal_init_monitor
12-11 20:45:37.408 D/NxpHal ( 3434): Returning with SUCCESS
12-11 20:45:37.408 D/NxpTml ( 3434): Opening port=/dev/pn54x
12-11 20:45:37.408 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 1
12-11 20:45:37.527 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 0
12-11 20:45:37.647 D/NxpTml ( 3434): phTmlNfc_i2c_reset(), VEN level 1
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Tml Reader Thread Started................
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Read requested.....
12-11 20:45:37.667 D/NxpTml ( 3434): PN54X - Invoking I2C Read.....
....
....
そのため、最初の開始としてlibnfc-nxp.conf
、コメントがUICCまたはSWPへの関係を示しているパラメーターから始めて、ファイルを変更してみました。
# No secure element 0x00
# eSE 0x01
# UICC 0x02
-NXP_DEFAULT_SE=0x03
+NXP_DEFAULT_SE=0x02
A0EC
また、タグを次のNXP_CORE_CONF_EXTN
ように設定します0x01
(コメントは、このタグが SWP1 コネクタを担当していることを示しているため):
# A0EC - SWP1 interface
# 0x00 - Disabled
# 0x01 - Enabled
- A0, EC, 01, 00,
+ A0, EC, 01, 01,
残念ながら、これは機能せず、ホスト システムのオフホスト サービスをターゲットとする APDU をまだ受信しています (この logcat メッセージで示されているように: E/HostEmulationManager( 3434): AID that was meant to go off-host was routed to host.
)。
後の試行で、libnfc-brcm.conf
(上記の質問で Michael Roland によって説明されているように) のパラメーターをいじってみましたが、それでも成功しませんでした。
質問:
- UICCに行くNexus 5Xまたは6PでNFCオフホストルーティングを設定できた人はいますか?
- または、さらなる洞察を探すことができるヒントがいくつかありますか?
- また、PN548 チップセットのデータシートも非常に役立ちます。
編集 2:有効
な解決策はまだ見つかりませんでしたが、今まで試したことをdev1ブランチの下の github リポジトリにプッシュしました。また、各テストの結果の logcat 出力もプッシュしました。ストック Android 6.0.1 でルート化されていない新しい Nexus 5X をテストしています。(編集: その間、テスト用に Nexus 6P も入手しましたが、同じように動作します。) システム パーティションの構成ファイルを変更するために、サイドロードされた回復イメージを一時的に起動します: ( fastboot boot twrp-2.8.7.2-bullhead.img
)。
現時点では、常にこのエラーが発生します(オフホストルーティングターゲットを使用して、オフホストルーティングターゲットとしても試しまし0xf2
た0xf4
):
12-16 09:38:05.524 I/BrcmNfcNfa( 3480): NFA_EeAddAidRouting(): handle:<0xf3>
12-16 09:38:05.524 I/BrcmNfcNfa( 3480): nfa_ee_find_ecb ()
12-16 09:38:05.524 E/BrcmNfcNfa( 3480): Bad ee_handle or AID (len=14)
12-16 09:38:05.524 E/BrcmNfcJni( 3480): RoutingManager::addAidRouting: failed to route AID