The problem 12-16 09:18:44.677 6154 22401 E NFCJNI : phLibNfc_Mgt_ConfigureDriver() returned 0x0106[NFCSTATUS_INVALID_DEVICE] 12-16 09:18:44.677 6154 22401 E NFCJNI : phLibNfc_Mgt_Initialize() returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 12-16 09:18:44.678 6154 22401 E NFCJNI : phLibNfc_Mgt_ConfigureDriver() returned 0x0106[NFCSTATUS_INVALID_DEVICE] 12-16 09:18:44.689 6154 22401 E linker : library "/vendor/firmware/libpn544_fw.so" ("/system/vendor/firmware/libpn544_fw.so") needed or dlopened by "/system/lib/libnfc.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/system/app/Nfc/lib/arm:/system/app/Nfc/Nfc.apk!/lib/armeabi-v7a:/system/lib:/system/vendor/lib", permitted_paths="/data:/mnt/expand:/data/data/com.android.nfc:/system/lib:/system/vendor/lib"] 12-16 09:18:44.689 6154 22401 E NFC-HCI : Could not open /vendor/firmware/libpn544_fw.so 12-16 09:18:44.689 6154 22401 D NFCJNI : phLibNfc_Mgt_UnConfigureDriver() returned 0x0000[NFCSTATUS_SUCCESS] 12-16 09:18:44.689 6154 22401 E NFCJNI : phLibNfc_Mgt_Initialize() (download) returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 12-16 09:18:44.689 6154 22401 W NFCJNI : Firmware update FAILED 12-16 09:18:44.689 6154 22401 E NFCJNI : phLibNfc_Mgt_ConfigureDriver() returned 0x0106[NFCSTATUS_INVALID_DEVICE] 12-16 09:18:44.702 6154 22401 E linker : library "/vendor/firmware/libpn544_fw.so" ("/system/vendor/firmware/libpn544_fw.so") needed or dlopened by "/system/lib/libnfc.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/system/app/Nfc/lib/arm:/system/app/Nfc/Nfc.apk!/lib/armeabi-v7a:/system/lib:/system/vendor/lib", permitted_paths="/data:/mnt/expand:/data/data/com.android.nfc:/system/lib:/system/vendor/lib"] 12-16 09:18:44.702 6154 22401 E NFC-HCI : Could not open /vendor/firmware/libpn544_fw.so 12-16 09:18:44.702 6154 22401 D NFCJNI : phLibNfc_Mgt_UnConfigureDriver() returned 0x0000[NFCSTATUS_SUCCESS] 12-16 09:18:44.702 6154 22401 E NFCJNI : phLibNfc_Mgt_Initialize() (download) returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 12-16 09:18:44.702 6154 22401 W NFCJNI : Firmware update FAILED 12-16 09:18:44.702 6154 22401 E NFCJNI : phLibNfc_Mgt_ConfigureDriver() returned 0x0106[NFCSTATUS_INVALID_DEVICE] 12-16 09:18:44.713 6154 22401 E linker : library "/vendor/firmware/libpn544_fw.so" ("/system/vendor/firmware/libpn544_fw.so") needed or dlopened by "/system/lib/libnfc.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/system/app/Nfc/lib/arm:/system/app/Nfc/Nfc.apk!/lib/armeabi-v7a:/system/lib:/system/vendor/lib", permitted_paths="/data:/mnt/expand:/data/data/com.android.nfc:/system/lib:/system/vendor/lib"] 12-16 09:18:44.713 6154 22401 E NFC-HCI : Could not open /vendor/firmware/libpn544_fw.so 12-16 09:18:44.713 6154 22401 D NFCJNI : phLibNfc_Mgt_UnConfigureDriver() returned 0x0000[NFCSTATUS_SUCCESS] 12-16 09:18:44.713 6154 22401 E NFCJNI : phLibNfc_Mgt_Initialize() (download) returned 0x0001[NFCSTATUS_INVALID_PARAMETER] 12-16 09:18:44.713 6154 22401 W NFCJNI : Firmware update FAILED 12-16 09:18:44.713 6154 22401 E NFCJNI : Unable to update firmware, giving up 12-16 09:18:44.763 6154 22401 D NFCJNI : Terminating client thread... 12-16 09:18:44.764 6154 22401 W NfcService: Error enabling NFC The solution (created by Matt Mower) https://paste.ubuntu.com/18137835/ I read the contents of nxp_nfc_full_version[] and nxp_nfc_fw[] using a simple executable linked to libpn544_fw.so. I didn't want to deal with Android denying me the ability to load the library, but I needed a linker available, so I prepared these instructions for use with TWRP. 1) Save http://paste.ubuntu.com/18137145/ as a patch (e.g. pnfw.patch) 2) In your device tree: $ git am /path/to/pnfw.patch 3) Copy the libpn544_fw.so blob to the pnfw/ subdirectory 4) Read the symbols from the libpn544_fw.so blob: $ ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-readelf -Ws vendor/lge/ls990/proprietary/vendor/firmware/libpn544_fw.so Sample output: http://paste.ubuntu.com/18137244/ 5) What matters to me is: a) nxp_nfc_fw has size 66504 b) nxp_nfc_full_version has size 12 6) Edit pnfw/pnfw.c to adjust the size of nxp_nfc_fw_len and nxp_nfc_full_version_len accordingly 7) From the top of your cm tree, lunch for your device and then build the module: mka pnfw 8) For reasons unknown to me, the linker renames the shared lib in the executable, so the following replacement was necessary: $ strings $OUT/recovery/root/sbin/pnfw | grep libpn544_fw libpn544_fw_C3_1_41_SP.so $ sed -i "s|libpn544_fw_C3_1_41_SP.so|libpn544_fw.so\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0|g" $OUT/recovery/root/sbin/pnfw Make sure the replacement string is the same length as the original, hence the \x0 fillers. 9) In TWRP, the linker is in /sbin: $ sed -i "s|/system/bin/linker\x0|/sbin/linker\x0\x0\x0\x0\x0\x0\x0|g" $OUT/recovery/root/sbin/pnfw 10) Push the files to your device $ adb push $OUT/recovery/root/sbin/pnfw /sbin/pnfw $ adb push $OUT/recovery/root/sbin/libpn544_fw.so /sbin/libpn544_fw.so 10) Run the executable (in TWRP): $ adb shell $ pnfw > /tmp/fw.c $ exit $ adb pull /tmp/fw.c ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-readelf -dW vendor/lge/ls990/proprietary/vendor/firmware/libpn544_fw.so produces Dynamic section at offset 0xd014 contains 23 entries: Tag Type Name/Value 0x00000003 (PLTGOT) 0xd0dc 0x00000002 (PLTRELSZ) 8 (bytes) 0x00000017 (JMPREL) 0x390 0x00000014 (PLTREL) REL 0x00000011 (REL) 0x398 0x00000012 (RELSZ) 16 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x6ffffffa (RELCOUNT) 2 0x00000006 (SYMTAB) 0x168 0x0000000b (SYMENT) 16 (bytes) 0x00000005 (STRTAB) 0x288 0x0000000a (STRSZ) 261 (bytes) 0x00000004 (HASH) 0xd4 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libstdc++.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x0000000e (SONAME) Library soname: [libpn544_fw_C3_1_41_SP.so] 0x00000019 (INIT_ARRAY) 0xd000 0x0000001b (INIT_ARRAYSZ) 8 (bytes) 0x0000001a (FINI_ARRAY) 0xd008 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000016 (TEXTREL) 0x0 0x00000010 (SYMBOLIC) 0x0 ./prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-readelf -Ws vendor/lge/ls990/proprietary/vendor/firmware/libpn544_fw.so Symbol table '.dynsym' contains 18 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000cca0 12 OBJECT GLOBAL DEFAULT 8 nxp_nfc_full_version 2: 000003d8 51397 OBJECT GLOBAL DEFAULT 8 nxp_nfc_fw 3: 00000000 0 FUNC GLOBAL DEFAULT UND __cxa_finalize 4: 0000d0f0 0 NOTYPE GLOBAL DEFAULT 13 __dso_handle 5: 0000d000 0 NOTYPE GLOBAL DEFAULT 9 __INIT_ARRAY__ 6: 0000d008 0 NOTYPE GLOBAL DEFAULT 10 __FINI_ARRAY__ 7: 0000ccac 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end 8: 0000ccac 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start 9: 0000d0ec 0 NOTYPE GLOBAL DEFAULT ABS __data_start 10: 0000d0ec 0 NOTYPE GLOBAL DEFAULT ABS _edata 11: 0000d0ec 0 NOTYPE GLOBAL DEFAULT ABS __bss_start 12: 0000d0ec 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__ 13: 0000d100 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__ 14: 0000d100 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__ 15: 0000d100 0 NOTYPE GLOBAL DEFAULT ABS __end__ 16: 0000d100 0 NOTYPE GLOBAL DEFAULT ABS _end 17: 00080000 0 NOTYPE GLOBAL DEFAULT ABS _stack