1. 程式人生 > >Android 8.0 學習(17)---Android8.0中對指紋的新要求

Android 8.0 學習(17)---Android8.0中對指紋的新要求

我們先來看一張指紋在Android6.0版本上的架構層次圖:


指紋應用層,也就是手機上的指紋設定,這是Android系統層定義的指紋管理入口。

1system/core/rootdir/init.rc啟動system/core/Fingerprintd指紋的守護程序


fingerprintd的程式碼實現如下目錄:


FingerprintdIFingerprintDaemon遠端服務,註冊到serivcemanager

2SystemServer 會啟動指紋的系統服務FingerprintService

framework層中的FingerprintService調fingerprintd服務,呼叫FingerprintDaemonProxy.cpp裡面的方法。

/frameworks/base/services/java/com/android/server/SystemServer.java

mSystemServiceManager.startService(FingerprintService.class);

Android系統在載入SystemServer,啟動FingerprintService指紋系統服務。

/frameworks/base/services/core/java/com/android/server/fingerprint/FingerprintService.java

3FingerprintSetvice呼叫fingerprintd的介面,與fingerprint Hal

層通訊

/frameworks/base/core/java/android/hardware/fingerprint/

fingerprintd的程式碼FingerprintDaemonProxy.cpp會開啟HAL層。


4fingerprint Hal通過指紋廠商的驅動程式訪問指紋硬體。

在這一層,如果不在TEE中實現,則是指紋HAL層庫,直接訪問指紋硬體驅動。

目前Google要求指紋必須在TEE中實現,因此此處的HAL層也可以稱之為指紋CA

一般情況下,指紋CA程式碼會在如下目錄,

/hardware/libhardware/include/hardware/fingerprint.h

/hardware/libhardware/modules/fingerprint

不同廠商的TEE系統,指紋廠商必須進行適配。

5,指紋TA

由於在TEE系統已經接管了指紋硬體SPI介面,因此指紋TA中封裝了操作指紋函式介面。

那指紋驅動現在還有啥作用?

\kernel-3.18\drivers\misc\mediatek\fingerprint\

主要是GPIO的設定以及裝置服務操作等等。


Android O版本對指紋有啥特別要求?

我們前面也介紹過《Android O新特性之Treble介紹》,在Android O以及以後的版本當中,Android更新了框架,引入了一套叫HIDL的語言來定義FreameworkHAL之間的介面。

Android O 沒有了fingerprintd
fingerprintService.java 呼叫HIDL介面,HIDl介面的實現類可以由指紋廠家自行去實現。

BiometricsFingerprint.cpp 檔案是IBiometricsFingerprint介面的實現類。

BiometricsFingerprint.cpp 檔案,會在建構函式中去開啟HAL。其他沒變。

文章以指紋分析作為一個例子,主要是闡述Android8.0新版本架構給vendor廠商帶來的改變。也就是說以後的VTS測試將是各廠商需要重點關注的。