gpt4 book ai didi

android - NFC Offhost 路由到 Nexus 5X 和 Nexus 6P 上的 UICC

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:04 26 4
gpt4 key购买 nike

我正在尝试在 Nexus 5X(牛头)或 Nexus 6P(钓鱼者)上配置 NFC 芯片组,以使用 UICC 作为我在 OffHostApduService 中声明的 AID 的 NFC 脱离主机路由。

2016 年 1 月 17 日编辑:我已经更新了这个问题,还包括了 Nexus 6P,因为我也有机会测试它,它的行为与 5X 完全一样。所以之前 5X 的所有发现似乎也适用于 6P。

感谢 Michael Roland 在 this question here 上的回答,我之前在 Nexus 5(锤头)上成功做到了这一点。以及 Nexus 6 (shamu)(参见 Nexus 6 bcm2079x config in my Github repository)。

但是,Nexus 5X(以及 6P)似乎有所不同:

  • 根据 ifixit 拆解,它包含来自 NXP (PN548) 的新芯片组,而不是像 Nexus 4、5 和 6 那样的 Broadcom bcm2079x。
  • 我可以确认设备可以读取 Mifare Classic 标签(这加强了它包含 NXP 芯片组的假设,因为 Broadcom 芯片组不支持 Mifare Classic)和设备文件 /dev/pn548存在
  • 但奇怪的是它同时包含了 libnfc-brcm.conflibnfc-nxp.conf /system/etc/下的配置文件(你也可以在我的 Github 存储库中找到这些)

  • 作为起点,我修改了两个配置文件中的跟踪/日志设置
  • 套装APPL_TRACE_LEVEL0x05 brcm
  • 设置 NXPLOG_*_LOGLEVEL0x03恩智浦

  • 让我感到奇怪的是,我看到了很多 BrcmNfcJni启动期间 log​​cat 中的消息,类似于我在 Nexus 5 和 6 上看到的消息(我不会在带有 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 c Controller i 接口(interface))仅被使用(我猜测Broadcom 的芯片组使用代码的原因)用于日志记录的前缀“Brcm”)。但显然新的 NXP 芯片组现在也使用这个标准化接口(interface)(这很好),现在我们也看到了“Brcm...”日志消息,即使是 NXP 芯片组。

    编辑 3:
    两款手机(Nexus 5X 和 6P)似乎都包含 恩智浦 PN548/C2 NFC 芯片组运行固件版本 10.01.19(至少在 Android 6.0.1 版本中)。

    当然也有来自 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_EXTN0x01 (如注释所示,此标签负责 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 中的参数。 (如迈克尔罗兰在上面提到的问题中所述),但仍然没有成功。

    问题:
  • 是否有人设法在前往 UICC 的 Nexus 5X 或 6P 上配置 NFC 脱离主机路由?
  • 或者也许有一些提示,我可以在哪里寻找进一步的见解?
  • PN548 芯片组的数据表也会很有帮助。

  • 编辑 2:
    我仍然没有找到可行的解决方案,但我将尝试推到了我的 github repository under the dev1 branch 上。 .我还为每个测试推送了生成的 logcat 输出。我正在 Stock Android 6.0.1 上使用新的无根 Nexus 5X 进行测试。 (编辑:同时我也有一个 Nexus 6P 用于测试,但它的行为相同。)为了修改系统分区上的配置文件,我暂时启动到一个旁加载的恢复镜像:( fastboot boot twrp-2.8.7.2-bullhead.img )。

    目前我总是收到此错误(我也尝试过将 0xf20xf4 作为脱离主机路由目标):
    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

    最佳答案

    正如您已经发现的,SWP 线未连接到 UICC 插槽。我们通常不对 Nexus 设备执行此操作,因为我们不支持 AOSP 中 UICC 上的安全元素。一个异常(exception)是 Lollipop 上的 Nexus 6,它支持美国的 SoftCard 移动支付(以及 HCE)。 SoftCard 被 Google 收购后,我们在 Marshmallow 中删除了重新支持 UICC 的代码。

    顺便说一句,我很惊讶这在 N5 上有效 - 它也应该没有连接 SWP。也许这在所有设备上都没有正确完成。

    关于android - NFC Offhost 路由到 Nexus 5X 和 Nexus 6P 上的 UICC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251005/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com