1. 概述
本文档旨在说明如何将集创指纹代码快速集成到客户端系统代码里面, 以便客户可以正常使用集创 指纹芯片
1.1 适用范围
● 本文档适用于 android O/P/Q,瓶钵 TEE。
● 适用于集创全系列指纹芯片。
为保证快速顺利完成代码集成工作,请提前准备:
● 样机一台
● 代码中已合入瓶钵 TEE 代码, ENG 版本编译正常,样机刷机后可正常开机
● linux_driver:
● fpsensor:
● hardware:
mtk 平台参考驱动和 dts 修改
指纹库,指纹工模测试依赖库及测试 apk,权限等,为了方便客户的移植操作,这 里做了打包处理,所需内容均集成在此文件夹内
指纹守护进程修改,增加对集创指纹库的加载
移植包文件目录结构如下:
3.1 驱动移植
文件位于移植包的 linux_driver 目录下,包含驱动和 dts 文件
● 修改 makefile,添加指纹驱动的编译
● 修改 dts 文件,配置指纹对应的 gpio 口,一般只需配置复位脚,中断脚两个 gpio
如指纹供电需要控制,请根据平台需要,配置指纹对应的电源 gpio,同时修改驱动中 的上电函数,如不需要,可略过
● 编译 kernel,如果编译报错,可根据报错,对 driver 做出修改
● 编译无误后,下载开机,驱动如果加载成功,则会有 dev/fpsensor 节点生成
如无/dev/fpsensor 节点生成, 请抓取开机的 kernel log,驱动 log 打印关键词: fpsensor 3.2 指纹库文件和 selinux 添加
直接将 fpsensor 文件夹整体复制到客户指定的目录下,如放在vendor 目录,则需做如下修改:
● 修改对应项目的 mk 文件,如修改 device.mk,添加
$(call inherit-product-if-exists,vendor/fpsensor/fpsensor.mk)
● 修改 fpsensor/fpsensor.mk
PACKAGE_PATH := vendor/fpsensor
这里两处修改目的是将指纹库,工模库,测试 apk 等引入编译,可根据实际需要在 fpsensor.mk 中做出选择
fpsensor.mk 文件解析如下:
a) 指纹 ta 文件(必选项) 5b9e0e41-2636-11e1-ad9e0002a5d5c51c.ta,默认没有做平台签名,需客户签名后使用 具体签名方式可咨询瓶钵,一般有两种方式:
1. 在线签名;
2. pem 文件签名,需提供项目对应的 pem 文件,签名命令如下:
./re-sign.py --nkey /path/to/certificate --vendor --in /path/to/ta --out
/path/to/signed_ta
其 中 re-sign.py 为 签 名 工 具 , 存 放 路 径 为 TrustKernel_SDK/ta_kit/scripts/ , /path/to/certificate 为证书路径, /path/to/ta 为原 ta 文件, /path/to_signed_ta 为使用证书签 名后的 ta 文件,指纹 ta 签名后,直接替换原文件即可。
b) 指纹 ca 文件(必选项)
fpsensor_fingerprint.default.so ,请根据平台实际需求,选择 32bit 或者 64bit
c). 指纹工模测试依赖库(可选项)
libfp_ext_svc2.so
vendor.fpsensor.hardware.fpsensorhidlsvc@2.0.so
libchiponeic_fingerprint_factory.so.so
请根据平台实际需求,选择 32bit 或者 64bit,如不需我们提供的工模测试方案,可不选
d). 指纹节点权限文件(必选项)
init.fpsensor.rc
e). 键值映射文件(可选项)
uinput-fpsensor.kl
f).指纹工模测试 APK (可选项)
fpExtensionSvc2
g).指纹工模服务 manifest 修改(可选项)
fpsensor_factory_manifest.xml
● 指纹 sellinux 权限添加
修改 device/mediatek/common/BoardConfig.mk,添加
BOARD_SEPOLICY_DIRS += vendor/fpsensor/sepolicy
修改 hardware/interfaces/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp 文件, 增加对集创指纹库的加载, 可参考发布包里 hardware 目录,主要有两处修改, 建议对比修改 如下:
改动 1:定义各家指纹的 HARDWARE_MODULE_ID
修改前: 修改后:
考虑 到后续 多家指纹 的兼容 处 理 ,我 们软件包里指 纹库 的 HARDWARE_MODULE_ID 名称为 “fpsensor_fingerprint”,如需修改, 请联系我们更新。
改动 2:BiometricsFingerprint::openHal()函数,遍历加载各家的指纹库,并通过在库里读 ID 的操作,识别当前指纹芯片
修改前: 修改后:
以上修改完成后, 可以全编译后刷机,如正常,则开机后在设置-》安全目录中可以看到指纹条 目, 并可以录入指纹, 否则可能是指纹开机没过, 请同时抓取开机的 logcat 和 kernel log , logcat 中
集创指纹关键词为 fpCore,kernel log 中关键词为 fpsensor,可自行分析, 或将相关 log 发给我们协助 处理。
手势功能,目前的实现方式是在指纹 CA 中直接上报,没有经过指纹驱动。
指纹 CA 在开机加载时会注册一个 uinput 设备,名称为: uinput-fpsensor, 并同时注册需要上报的键 值,目前已经支持的键值有:单击、双击、长按、上滑、 下滑、左滑、右滑。如需要,可把需要上报的 键值提供给我们,更新指纹 CA 即可。
如需修改键值, 可以联系我们修改 CA,也可以通过修改 fpsensor.mk,使用 uinput-fpsensor.kl 文件实
现键值转换。
PRODUCT_COPY_FILES += $(LOCAL_PATH)/uinput-fpsensor.kl:system/usr/keylayout/uinput-fpsensor.kl
有两种实现方式可以参考(目前默认方式 1,可根据客户需求做出修改):
● 方式 1:通过指纹 hal 兼容, hal 层多家指纹 CA 的兼容,可参考第 3.3 章节的修改
● 方式 2:通过指纹 driver 兼容:
a). 在各家指纹 driver 的 probe 函数中, 配置 GPIO 完成后, 调用tkcore 预留的 SPI 通信接口函数 (可参考 tkcore 相关文档),读取芯片 ID ,ID 匹配成功,则创建 dev 下的设备节点,否则不创 建
b). 在 BiometricsFingerprint.cpp 文件的 openHal()中,通过判断 dev 下的指纹设备节点是否 存在,加载对应的指纹 CA
如需要使用我们提供的 apk 对指纹进行测试,直接将 fpsensor.mk 中的 factory 有关的注释打开, 重新编译即可
测试入口集成:在客户的工厂测试代码中增加如下指纹代码,可以实现跳转到我们测试 apk 的操 作
static final int FP_TEST_REQUEST_CODE = 150;
Intent testIntent = new Intent();
testIntent.putExtra("config_autoexit", true);//控制是否测试完成后自动退出 activity ,true/fase testIntent.putExtra("config_autotest", true);//控制是否启动 activity 自动执行测试 testIntent.putExtra("config_autoexit_delay_time", 500);
testIntent.putExtra("config_supportTouchTest", true);
testIntent.putExtra("config_showcapturedImg", false);
testIntent.putExtra("config_savecapturedImg", false);
testIntent.setClassName("com.fpsensor.fpSensorExtensionSvc2","com.fpsensor.sensortesttool.sensorTest Activity");
startActivityForResult(testIntent,FP_TEST_REQUEST_CODE);
测试成功返回 RESULT_OK,否则返回 RESULT_CANCEL
若客户暂时不能实现,可以先用 adb 命令,启动测试 apk,确认 apk 运行是否ok,命令如下: adb shell am start com.fpsensor.fpSensorExtensionSvc2/com.fpsensor.sensortesttool.sensorTestActivity
工模测试 APK 正常运行时,界面如下
如果厂测 apk 启动失败,一般是厂测服务的 xml 文件没有添加,请先将 fpsensor.mk 中的 factory 有 关的注释打开,如下图:
如果打开后厂测服务还起不来,请在系统中查找 vendor_framework_compatibility_matrix.xml 文件, 把我们厂测服务的内容添加上去,如下图:
8.1 设置菜单里无指纹条目:
● 确认指纹服务 android.hardware.biometrics.fingerprint@2.1-service 是否有被编译及加载 编译后生成的文件路径:
out/../vendor/bin/android.hardware.biometrics.fingerprint@2.1-service
如 out 目录下无此文件,请修改 fpsensor.mk,将相应注释打开,并重新编译: PRODUCT_PACKAGES += android.hardware.biometrics.fingerprint@2.1-service
● 指纹特性文件是否存在,路径:
vendor/etc/permissions/android.hardware.fingerprint.xml
● 确认 manifest.xml 文件是否有提供指纹服务的描述,错误 log 为:
Cannot find entry
android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint/default in either framework or device manifest.
则需要修改 device 下的 manifest.xml 文件,路径为 device/${VENDOR}/manifest.xml 添加以下代码:
<hal format="hidl">
<name>android.hardware.biometrics.fingerprint</name>
<transport>hwbinder</transport>
<version>2.1</version>
<interface>
<name>IBiometricsFingerprint</name>
<instance>default</instance>
</interface>
</hal>
● logcat 提示 fpCoreHalJni [ERR]: fpTa_entryproxy.cpp send TCI_FP_CMD_INIT Error:-510
这个错误提示的原因是 GPIO 申请失败或读取 HWID 失败,需确认以下问题:
驱动的 DTS 配置及解析;
GPIO 申请是否成功;
芯片供电是否正常;
TA 是否需要签名;
硬件连接是否正常;
● IRQ GPIO 配置有问题,没有触发中断,可以使用 adb shell cat /proc/interrupts 命令 确认中断是否有申请成功,以及在录入界面按压 sensor,指纹中断计数是否有变化
● 中断引脚硬件连接问题