OS:android7.1
代碼移植
一.驅動部分
1.dts:
&i2c4 { status = "okay"; nfc: nfc@28 { compatible = "firefly,pn544"; reg = <0x28>; ven-gpio = <&gpio5 18 GPIO_ACTIVE_HIGH>; irq-gpio = <&gpio8 1 IRQ_TYPE_LEVEL_HIGH>; rst-gpio = <&gpio8 2 GPIO_ACTIVE_HIGH>; }; };
2.驅動代碼,直接用之前5.1時候調的,代碼路徑如下:kernel/drivers/nfc/pn544/pn544.c、pn544.h
3.驅動 移植完后,在 dev 目錄下會生成一個 pn544 的節點:
crw-rw---- 1 nfc nfc 10, 58 2020-03-20 19:12 pn544
二.上層的移植
請在驅動的通的情況下移植上層代碼
1. external\libnfc-nci 直接替換對應目錄的
2. packages\apps\Nfc 直接替換對應目錄的
3. frameworks\base\nxp-nfc-gsma 放到frameworks\base\ 目錄下
4. frameworks\base\core\java\android\nfc直接替換對應目錄的
5 frameworks\base\core\java\com\nxp 直接放到frameworks\base\core\java\com\
6 frameworks\base\core\java\com\vzw直接放到frameworks\base\core\java\com\
7. hardware\libhardware\include\hardware\nfc.h 與對應目錄下的 nfc.h 對比將差異部分合入
8. frameworks\base\Android.mk 與原來的對比 將 NFC 相關的合入,如下,請檢查
core/java/android/nfc/IAppCallback.aidl \ core/java/com/nxp/nfc/gsma/internal/INxpNfcController.aidl \ core/java/com/nxp/nfc/INxpNfcAdapter.aidl \ core/java/com/nxp/nfc/INxpNfcAdapterExtras.aidl \ core/java/com/nxp/nfc/INfcVzw.aidl \ core/java/android/nfc/INfcAdapter.aidl \ core/java/android/nfc/INfcAdapterExtras.aidl \ core/java/android/nfc/INfcTag.aidl \ core/java/android/nfc/INfcCardEmulation.aidl \ core/java/android/nfc/INfcFCardEmulation.aidl \ core/java/com/nxp/nfc/INfcDta.aidl \ core/java/com/nxp/nfc/INxpNfcAccessExtras.aidl \ core/java/android/nfc/INfcUnlockHandler.aidl \ core/java/android/nfc/ITagRemovedCallback.aidl \ frameworks/base/core/java/android/nfc/Tag.aidl \ frameworks/base/core/java/android/nfc/NdefRecord.aidl \ frameworks/base/core/java/android/nfc/NdefMessage.aidl \ packages_to_document := \ android \ com/nxp/nfc \ com/nxp/intf \ com/nxp/nfc/gsma/internal \ // 這里有三項 javax/microedition/khronos \ org/apache/http/conn \ org/apache/http/params
9.device\rockchip\common\device.mk添加如下編譯規則:
#NFC MODULE wmc add for nfc # NFC packages PRODUCT_PACKAGES += \ NfcNci \ libnfc-nci \ libnfc_nci_jni \ nfc_nci.pn54x.default \ com.gsma.services.nfc \ com.android.nfc_extras PRODUCT_COPY_FILES += \ frameworks/native/data/etc/com.nxp.mifare.xml:system/etc/permissions/com.nxp.mifare.xml \ frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml \ frameworks/native/data/etc/com.android.nfc_extras.xml:system/etc/permissions/com.android.nfc_extras.xml \ frameworks/native/data/etc/android.hardware.nfc.hce.xml:system/etc/permissions/android.hardware.nfc.hce.xml \ frameworks/native/data/etc/android.hardware.nfc.hcef.xml:system/etc/permissions/android.hardware.nfc.hcef.xml PRODUCT_COPY_FILES += \ external/libnfc-nci/halimpl/pn54x/libpn548ad_fw.so:vendor/lib/libpn548ad_fw.so \(注意這個路徑,接下面12點詳述) external/libnfc-nci/halimpl/pn54x/libnfc-nxp.conf:system/etc/libnfc-nxp.conf \ external/libnfc-nci/halimpl/pn54x/libnfc-brcm.conf:system/etc/libnfc-brcm.conf
10.system/core/rootdir/init.rc中添加如下:
on post-fs-data #NFC wmc add for nfc mkdir /data/nfc 0770 nfc nfc mkdir /etc/param on boot #NFC setprop ro.nfc.port "I2C" chmod 0660 /dev/pn544 chown nfc nfc /dev/pn544
11.libpn548ad_fw_1A_32bit.so 改名成 libpn548ad_fw.so 和 libnfc-nxp.conf、libnfc-brcm.conf
放到 external\libnfc-nci\halimpl\pn54x 目錄下。
12.廠家提供的文檔和以往的5.1系統移植,都是把libpn548ad_fw.so拷貝到system/vendor/firmware路徑下,但是現在7.1的sdk,
並沒有對應的這個目錄。解決辦法是修改源碼,修改對應的路徑讓它可以找到libpn548ad_fw.so就可以了。現定把
libpn548ad_fw.so拷貝到vendor/lib下面,對應的源碼修改如下:
1.external\libnfc-nci\halimpl\pn54x\common\phNfcCommon.h -//#define FW_DLL_ROOT_DIR "/system/vendor/firmware/" +#define FW_DLL_ROOT_DIR "/vendor/lib/" 2.external\libnfc-nci\halimpl\pn54x\dnld\phDnldNfc.c 把所有的pathName = "/system/vendor/firmware/libpn548ad_fw.so"(有兩處) 改為:pathName = "/vendor/lib/libpn548ad_fw.so";
13.編譯的時候發現,報錯一大堆,無法識別一些添加的包名,解決方法如下:
build\core\tasks\check_boot_jars\package_whitelist.txt下添加:
com\.vzw\.nfc\.dos com\.vzw\.nfc com\.nxp\.nfc com\.nxp\.nfc\.gsma\.internal com\.nxp\.intf
這樣就可以順利編譯過了。
注:移植完后,請務必 make clean后,再全編