复制品4.2 0002和I9300上的NFC

我在用复制品在我的三星SIII(i9300)手机上(请参阅我的早期的 岗位). 在我的假期里复制品项目释放版本4.2-0002作为其最初4.2版本的小更新。我没有预料到任何重大差异,所以我遵循安装说明但不是“擦除数据/出厂重置”我选择了“擦除缓存分区”并重新启动。一切似乎都很好,但我很快发现NFC不起作用。使用亚行日志我可能会收到一些错误消息:

E/NFC-HCI(7022):HCI超时-引发异常-强制重新启动NFC服务F/libc(7022):0xdeadbaad处的致命信号11(SIGSEGV)(代码=1),线程7046(消息)I/DEBUG(1900):*********************************I/DEBUG(1900):构建指纹:“samsung/m0xx/m0:4.1.1/JRO03C/I9300XXDLIB:user/release-keys”I/DEBUG(1900):版本:“12”I/DEBUG(1900):pid:7022,tid:7046,名称:message>>>com.android.nfc<<<

手机会循环尝试启动NFC,并让NFC子系统一次又一次死亡。谈到#replicant频道,paulk很快意识到修复了错误。我必须重建映像才能正常工作,所以我花时间创建了一个基于Debian 7.5的新虚拟机,用于在其上构建副本。作为补充说明复制版本依赖性文档是因为我需要Debianxml林包来避免构建失败和Debianxsltproc程序包以避免在每次生成开始时打印错误消息。很快,我有了自己的新图像并安装了它们,NFC在安装了非免费的libpn544_fw.so代码文件。

在此期间,我注意到有多个libpn544_fw.so代码到处都是文件。我有以下文件:

版本字符串 来源
libpn544_fw_C3_1_26_SP.so文件 互联网
libpn544_fw_C3_1_34_SP.so文件 2013年和2014年在瑞典购买的S3库存ROM(两部手机)
libpn544_fw_C3_1_39_SP.so文件 互联网

(供参考,这些文件的md5sum分别为682e50666effa919d557688c276edc48、b9364ba59de1947d4588f588229bae20和18b4e634d357849edbe139b04c939593。)

如果您没有这些文件中的任何一个可用作/vendor/firmware/libpn544_fw,那么您将收到以下错误消息:

I/NfcService(2488):启用NFCD/NFCJNI(2488):开始初始化E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soE/NFCJNI(2488):phLibNfc_Mgt_Initialize()返回0x00ff[NFCSTATUS_FAILED]E/NFC-HCI(2488):无法打开/system/vender/firmware/libpn544_fw.so或/system/lib/libpn544_fw.soW/NFCJNI(2488):固件更新失败E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFCJNI(2488):固件更新失败E/NFC-HCI(2488):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFCJNI(2488):固件更新失败E/NFCJNI(2488):无法更新固件,放弃D/NFCJNI(2488):phLibNfc_Mgt_UnConfigureDriver()返回0x0000[NFCSTATUS_SUCCESS]D/NFCJNI(2488):正在终止客户端线程。。。W/NfcService(2488):启用NFC时出错

使用第一个(26)文件或最后一个(39)文件时,我的手机似乎无法正常工作,我收到以下错误消息。请注意,以“NFC功能”开头的行中有“Rev=34”,可能表示我需要版本34文件。

I/NfcService(5735):启用NFCD/NFCJNI(5735):开始初始化D/NFCJNI(5735):NFC功能:HAL=8151100,FW=b10122,HW=6620003,型号=12,HCI=1,Full_FW=1,Rev=34,固件更新信息=8D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败D/NFCJNI(5735):下载新固件W/NFCJNI(5735):固件更新失败E/NFCJNI(5735):无法更新固件,放弃D/NFCJNI(5735):phLibNfc_Mgt_UnConfigureDriver()返回0x0000[NFCSTATUS_SUCCESS]D/NFCJNI(5735):正在终止客户端线程。。。W/NfcService(5735):启用NFC时出错

装载34个工作正常。

I/NfcService(2501):启用NFCD/NFCJNI(2501):开始初始化D/NFCJNI(2501):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2501):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2501):D/NFCJNI(2501):>安全元件数量:1D/NFCJNI(2501):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2501):phLibNfc_SE_SetMode()返回0x000d[NFCSTATUS_PENDING]I/NFCJNI(2501):NFC已初始化D/NdefPushServer(2501):启动,线程=空D/NdefPushServer(2501):启动新的服务器线程D/NdefPushServer(2501):关于创建LLCP服务套接字D/NdefPushServer(2501):已创建LLCP服务套接字D/NdefPushServer(2501):即将接受D/NfcService(2501):NFC-EE关闭D/NFC服务(2501):NFC-C开启

有趣的是,我的另一个运行CyanogenMod的S3没有libpn544_fw.so文件,但NFC仍然可以工作。这些信息是:

I/NfcService(2619):启用NFCD/NFCJNI(2619):开始初始化E/NFC-HCI(2619):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFC(2619):固件映像不可用:此设备可能正在运行旧的NFC固件!D/NFCJNI(2619):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2619):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2619):D/NFCJNI(2619):>安全元件数量:1D/NFCJNI(2619):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2619):phLibNfc_SE_SetMode()返回0x000d[NFCSTATUS_PENDING]I/NFCJNI(2619):NFC已初始化D/NdefPushServer(2619):启动,线程=空D/NdefPushServer(2619):启动新的服务器线程D/NdefPushServer(2619):关于创建LLCP服务套接字D/NdefPushServer(2619):创建的LLCP服务套接字D/NdefPushServer(2619):即将接受D/NfcService(2619):NFC-EE关闭D/NFC服务(2619):NFC-C开启

复制品之间的两个NFC相关存储库的差异(外部libnfc-nxp软件包_apps_nfc)和氰化Mod(android外部libnfc-nxpandroid软件包_apps_Nfc)我找到了复制副本中的提交这将丢失固件上的软故障更改为硬故障。我在构建树中手动恢复了该补丁,并重新构建并启动了一个新映像。现在启用NFC会在我的复制手机上打印此内容:

I/NfcService(2508):启用NFCD/NFCJNI(2508):开始初始化E/NFC-HCI(2508):无法打开/system/vendor/firmware/libpn544_fw.so或/system/lib/libpn540_fw_soW/NFC(2508):固件映像不可用:此设备可能正在运行旧的NFC固件!D/NFCJNI(2508):NFC能力:HAL=8150100,FW=b10122,HW=620003,型号=12,HCI=1,Full_FW=1,版本=34,FW更新信息=0D/NFCJNI(2508):phLibNfc_SE_GetSecureElementList()D/NFCJNI(2508):D/NFCJNI(2508):>安全元件数量:1D/NFCJNI(2508):phLibNfc_SE_GetSecureElementList():检测到SMX,句柄=0xabcdefD/NFCJNI(2508):phLibNfc_SE_SetMode()返回0x000d[NFCSTATUS_PENDING]I/NFCJNI(2508):NFC已初始化D/NdefPushServer(2508):启动,线程=空D/NdefPushServer(2508):启动新的服务器线程D/NdefPushServer(2508):关于创建LLCP服务套接字D/NdefPushServer(2508):创建LLCP服务套接字D/NdefPushServer(2508):即将接受D/NfcService(2508):NFC-EE关闭D/NfcService(2508):NFC-C开启

NFC很管用!至少YubiKey近地天体使用Yubico Authenticator应用程序.在我的手机上少了一个非免费的blob。

我仔细检查了一下,手机的电源循环(甚至暂时卸下电池)不会产生任何影响,所以看起来NFC芯片的固件是从工厂加载的。

问题仍然是为什么添加了该承诺。有必要用其他电话吗?我不知道,除了恢复补丁外,S3所有者将让NFC在没有添加非免费软件的情况下使用Replicant。或者,使补丁只应用于需要它的平台,甚至应用于所有非S3构建。

4对“副本4.2 0002和I9300上的NFC”的回复

  1. 正如IRC上所解释的,固件是必需的,因为某些设备附带的固件无法正常工作,从而使NFC芯片处于半加载和不可用状态。更好的解决方案是检查预安装的固件版本,并决定它是否可以作为i使用或需要固件加载。欢迎任何人努力实现这一点。

  2. 你能提供一个链接到你构建的图像吗?我也在尝试让NFC工作,但我不知道如何自己创建图像或如何包含补丁。我将感谢你的帮助!

  3. Pingback:I9300上的复制品4.2 0003 |西蒙·约瑟夫森的博客