Android手机指纹驱动工作原理

来源:互联网 发布:php 判断不为小数 编辑:程序博客网 时间:2024/05/02 13:48

Question:

为什么指纹支付要将驱动放在TZ里?

Answer:

需要支付功能的放TZ侧,不需要支付功能的放AP侧。

TZ有自己的一个受保护的专用的内存区域, 这个专用的内存区域是需要特殊的权限的。

 

Question:

比方如下,我通过设置已经在手机里录制了很多个指纹,现在我用大拇指按在传感器上来解锁或者支付,这个过程是如何的呢?

Answer:

1. 手机存储的是指纹特征数据,不是存储在指纹IC中,而是存在SoC侧的eMMC/UFS中;

2. 存储的数据加密并由TZ管理, 所以就算Linux(Android)侧拿到也无法解密及使用;

3. 比对过程大致如下:TZ通过SPI从指纹IC采集到指纹(在此是点阵数据,也就是图像),然后在TZ里调用指纹比对库的比对函数,在此函数中有几个重要参数,

a. 指纹模板的指针

b. 指纹模板数

c. 需要比对的指纹图像Buffer指针

比对函数会把匹配度最佳的指纹模板序号及匹配百分比返回,由调用函数来判定是否算比对上了,详细的比对过程见下面描述

4. 所以存在多个模板时,可以只调用一次,或者for(...)调用,取决你调用者,多数实现一般是调用一次。

5. 由于在此过程中SPI通信是瓶颈,快速比对(Quick Match)是先取图的1/4,你可以理解为取Thumbnail类似,然后送去比对,如果结果无法判决,则取回全图,继续比对。

 

       详细的比对过程如下所述:

Android 从 MNC 6.0 开始提供了一部分框架,一般的厂商可以follow Google的Framework, 实现必要的函数,最终的形式就是一个.so文件,由Google Fingerprint framework load 并执行。

一个指纹模板一般100~300K,所以就算10个,也就3M左右的RAM就可以了。对于现在动不动几个G RAM的手机来讲并不是很负担。

Android 发比对请求-->TZ下SPI数据,等手指压下中断-->返回Android侧运行

手指按下中断到达(Android侧)-->调用TZ侧比对流程函数(通过SPI读图-->图像预处理-->调用算法库比对)-->比对结果返回Android。

如果比对正确,Android侧就会解锁或其它操作,否则一般会震动一下,表示失败了;没有震动的话,说明认为没有手指或手指快速离开了,所以没取到数据。

开销比较大的部分是系统调用,即从Android--> 调Linux Driver --> 调smc进入TZ-->执行-->返回。


原创粉丝点击