NFC學習—— code編譯和code結構

      對於NFC代碼編譯,目前爲止,我見過兩家不同方案商的書寫方式,都是在device下的XXXX.mk文件中書寫,XXXX不同的方案商不同的產品名稱不同。下面具體來看:

方式A:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml
# NFC packages
PRODUCT_PACKAGES += \
                libnfc \
                libnfc_jni \
                Nfc \
                Tag

方式B:

#NXP NFC 
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml
PRODUCT_PACKAGES += \
        nfc.XXXX \
        libnfc \
        libnfc_jni \
        Nfc \
        Tag 

       對比這兩種方式,可以很明顯發現其中的不同點nfc.XXXX,下面就兩者的不同之處在分析:

       nfc.XXXX 是nfc_hw.c 編譯生成的nfc.XXXX.so包,在out/目錄下。方式A中並沒有把nfc.XXXX放進去,它放在modules.mk中編譯。nfc_hw.c不同的方案也具體放在不同的位置。總之,它的目的是生成nfc.XXXX.so以供調用。

         除了上述之外的東西,還需要在init.rc中配置:

# NFC
    setprop ro.nfc.port "I2C"
         至此,NFC編譯部分都配置完畢了。

         通過以上的分析,NFC 在android 中的code 結構都差不多出來了,下面分析下:  

 客戶端:android提供了兩個API包給apk,分別是android.nfc.techandroid.nfc,實現了NFC的應用接口,代碼路徑frameworks/base/core/java/android/nfc/techframeworks/base/core/java/android/nfc

 服務端:packages/apps/Nfc是一個類似電話本的應用,這個程序在啓動後自動運行,並一直運行,作爲NFC的服務進程存在,是NFC的核心。

在這個程序代碼中,有個JNI庫,供NfcService調用,代碼路徑是packages/apps/Nfc/jni/.編譯文件中,還有個Tag部分,代碼路徑是packages/apps/Tag.

  庫文件:代碼路徑是external/libnfc-nxp,C編寫的庫文件,有兩個庫,分別是libnfc.solibnfc_ndef.solibnfc.so是一個主要的庫,實現了NFC stack的大部分功能,主要提供NFC的服務進程調用。libnfc_ndef是一個很小的庫,主要是實現NDEF消息的解析,供framework調用

    nfc_hw.c:這個文件的具體路徑不確定。

    pn544.c:這個文件是具體nfc芯片的驅動,一般都是drivers下。


由於本人初學,能力有限,有錯誤的地方歡迎指出。

參考文章:

NFC framework introduce(一)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章