2017-09-28 10 views
2

Google Pixel AOSP 빌드 (android-8.0.0_r3)의 NFC 코드를 연구 중입니다. 나는 다음과 같은 커널의 호출 흐름을 안드로이드 하드웨어 모듈 system\nfc\halimpl\pn54x\nfc_nci.c 모든 방법을 이해할 수 : hw_get_module(NFC_NCI_HARDWARE_MODULE_ID)hardware/interface/nfc/1.0/default/nfc.cpp : HIDL_FETCH_INfc(...)에서 그것을 발견을 통해HOS에서 Application Framework 계층으로 AOSP NFC 장치 호출 흐름

struct nfc_nci_module_t HAL_MODULE_INFO_SYM = { 
    .common = 
     { 
      .tag = HARDWARE_MODULE_TAG, 
      .module_api_version = 0x0100, /* [15:8] major, [7:0] minor (1.0) */ 
      .hal_api_version = 0x00,  /* 0 is only valid value */ 
      .id = NFC_NCI_HARDWARE_MODULE_ID, 
      .name = "NXP PN54X NFC NCI HW HAL", 
      .author = "NXP Semiconductors", 
      .methods = &nfc_module_methods, 
     }, 
}; 

이 하드웨어 모듈은로드됩니다. 이제는 AOSP에서 HIDL_FETCH_INfc(...)이 호출 된 곳을 찾을 수 없으며 다음 계층에 어떻게 연결됩니까?

답변

0

하드웨어와 상호 작용하는 안드로이드 서비스의 경우 다음과 같은 방식으로 연결됩니다. nfc.cpp에서 유사한되는 기능이 있어야한다 :

JNINativeMethod method_table[]= { 
    {"external_name","(I)Z)",(void*)internal_name}, 
}; 

int register_android_server_FlexcanService(JNIEnv* env) 
{ 
    return jniRegisterNativeMethods(env,"com/android/server/MyService",method_table,NELEM(method_table)); 
} 

이 jniRegisterNativeMethods onload.cpp가 호출되고 nfc.cpp는 동일한 폴더에 Android.mk에 첨가

거기에서

public static native boolean external_name(int someVar); 

은 .aidl 바인더 파일이있을 것이다 : 그런 다음 자바 패키지 com.android.server.MyService (코어/자바/COM/안드로이드/서버)에서 네이티브 함수를 호출이있을 것 서비스 메소드를 SDK에 공개하고 결국에는 최상위 Android 앱.

+0

내가 (...) 어떤'jniRegisterNativeMethods이 표시되지 않는'디렉토리에서'하드웨어/인터페이스/nfc' – Consy

+0

당신은 당신이 터미널에 입력하여'jniRegisterNativeMethods'을 찾을 수없는 것은 수행합니다'GREP을 jniRegisterNativeMethods' -r에 하드웨어/인터페이스/nfc 디렉토리? –

+0

예, 하드웨어/인터페이스/nfc 디렉토리에서 찾을 수 없습니다. – Consy

0

Android 7.x에서 NFC JNI는 packages/apps/Nfc/nci/jni /에 있습니다. Android 8.x 소스를 확인하지 않았지만 아직 거기에 있다고 생각합니다.

+0

네가 경로에 대해 옳았다. , 그러나 HIDL_FETCH_INfc (...)가 거기에있는 파일들과 어떻게 연결되는지에 대한 대답은 아직 없다. – Consy

+0

패키지/apps/Nfc/nci/jni /에 'hw_get_module (NFC_HARDWARE_MODULE_ID, & hw_module); 이 있는데, 왜 HIDL_FETCH_INfc가 필요한가요? – ZhouZhuo