Análisis completo del marco de huellas dactilares de Android12 (1)

Prólogo: Desde Android 6.0, Google lanzó oficialmente un marco estándar de huellas dactilares de Android, que puso fin a la situación fragmentada de varios fabricantes de huellas dactilares y promovió el desarrollo de huellas dactilares capacitivas en Android; dado que la solución de huellas dactilares fuera de pantalla de Synopsys nació en 2017, más tarde, Goodix y otros fabricantes de huellas dactilares siguieron, y la tecnología de soluciones de huellas dactilares fuera de pantalla de Android surgió en un flujo interminable; sin embargo, a partir de Android 12, Google actualizó el marco de huellas dactilares de Android y agregó soporte para huellas dactilares fuera de pantalla. nuevo marco de huellas dactilares uno por uno. Registre su propio proceso de aprendizaje

Nota: En la actualidad, la modificación del código del marco de huellas dactilares es relativamente grande. El autor tiene android_12.0.0_r34, y el teléfono móvil de prueba utilizado es pixel 3xl

1. Proceso de inicio de huellas dactilares

1. El proceso init analiza el archivo init.rc para iniciar el servicio de huellas dactilares de la capa HAL

init: Setting property 'ro.build.fingerprint' to 'Android/aosp_crosshatch/crosshatch:12/SP1A.210812.016.C2/eng.20221212.113415:userdebug/test-keys'
init: Parsing file /vendor/etc/init/[email protected]...

Desde la salida de registro del teléfono móvil del autor, puede ver que el archivo de inicio de la huella digital es vendor/etc/init/[email protected]

A través del archivo de huella digital init.rc, inicie el archivo ejecutable [email protected] en la ruta /vendor/bin/hw/


 

2. Ejecute el servicio de huellas dactilares de la capa HAL y notifique al entorno TEE Cargue la huella dactilar TA

 

 Del registro anterior, podemos ver dos puntos clave

pid-1297                             D  fpc fingerprint hwbinder service starting
QSEECOM: qseecom_load_app: App with id 2 (fpctzappfingerprint) now loaded

Se puede ver que se inicia el servicio de huellas dactilares de la capa HAL, se llama al código de la capa Hal de la huella dactilar y se notifica al TEE que cargue el nombre

programa de huellas dactilares fpctzapp

Nota: aquí omita temporalmente la explicación de la capa HAL

Resumir:

  • Cuando se inicia el proceso de inicio, analiza el archivo [email protected] e inicia el servicio de huellas dactilares HAL a través de este archivo.
     
  • Durante el proceso de inicio de Fingerprint Service, regrese y notifique a TEE para cargar el programa llamado fpctzappfingerprint

           

3. Inicie el servicio de huellas dactilares de la capa Framework

SystemServerTiming      system_process                       I  StartFingerprintSensor
SystemServiceManager    system_process                       I  Starting com.android.server.biometrics.sensors.fingerprint.Fin...
FintgerprintService     system_process                       E  FingerprintService
FintgerprintService     system_process                       E  onStart

Las líneas 2466 a 2478 del archivo SystemServer.java inician FingerprintService, BiometricService y

Los tres sistemas de capa de Framework de AuthService servirán; el constructor y el método oStart de estos tres servicios de nivel de sistema se llamarán

El constructor de FingerprintService crea un objeto de la clase FingerprintServiceWrapper y, a continuación, el método onStart de FingerprintService llama al método publishingBinderService.

FingerprintServiceWrapper hereda el método IFingerprintService.Stub y, a través del método de publicación de BinderService anterior, inicie este servidor remoto FingerprintServiceWrapper,

A través de los comentarios en la línea 168, sabe que su cliente es FingerprintManager y puede verificar si es correcto más adelante.

    /**
     * Receives the incoming binder calls from FingerprintManager.
     */

Resumir:

  • SystemServer llama al constructor y al método onStart de FingerprintService
  • FingerprintService crea un objeto de la clase FingerprintServiceWrapper en su constructor.Esta
    clase es un servidor remoto Binder
  • FingerprintService inicia el servidor remoto FingerprintServiceWrapper en el método onStart

2. El servicio de huellas dactilares del marco se conecta al servicio de huellas dactilares de la capa HAL

Como se mencionó anteriormente, la huella digital comienza desde el proceso de inicio hasta el proceso de inicio de Framework; el servicio de huellas digitales de capa Hal y el servicio de huellas digitales de Framework se iniciaron respectivamente, pero aún no hay un puente.

FingeprintintService   I  FingerprintServiceWrapper registerAuthenticators

Después de innumerables impresiones de seguimiento de registros, se descubrió que se llamará al método registerAuthenticators de FingerprintServiceWrapper

Luego, a través de la búsqueda de código, se encuentra que será llamado por el método registerAuthenticators de AuthService.java

 Ingrese el archivo AuthService.java, el método registerAuthenticators es el siguiente

 En las líneas de código 690 a 693, se encuentra que la clase de implementación de la interfaz IFingerprintService llama a los registerAuthenticators de la interfaz IFingerprintService; se puede adivinar que este mInjector.getFingeprintService() obtiene el servidor FingerprintServiceWrapper descrito anteriormente como el correspondiente cliente, por lo que a través del método registerAuthenticators finalmente llama al método registerAuthenticators de FingerprintServiceWrapper en el lado del servidor;

 A través del seguimiento, se encuentra que el método onStart llama al método registerAuthenticators de AuthService; por lo que ahora está relativamente claro que también se llama al método onStart de AuthService porque SystemServer llama a AuthService

Resumir:

  • SystemServer llama al constructor y al método onStart de AuthService
  • AuthService llama a su propio método registerAuthenticators en el método onStart y
    llama
    a la función registerAuthenticators del servidor remoto FingerprintServiceWrapper obteniendo el cliente correspondiente al servidor FingerprintServiceWrapper

        

Supongo que te gusta

Origin blog.csdn.net/g241893312/article/details/128362006
Recomendado
Clasificación