Android 瓶钵集创北方指纹模块代码移植

1. 概述

本文档旨在说明如何将集创指纹代码快速集成到客户端系统代码里面, 以便客户可以正常使用集创 纹芯片

1.1 适用范围

本文档适用于 android O/P/Q,瓶钵 TEE

 适用于集创全系列指纹芯片。

1.2 移植准备

为保证快速顺利完成代码集成工作,请提前准备:

 样机一台

代码已合入瓶钵 TEE 代码, ENG 版本编译正常,样机刷机后可正常开机

2. 文件清单

 linux_driver:

fpsensor:

 hardware:

mtk 平台参考驱动dts 修改

指纹库,指纹工模测试依赖库及测试 apk,权限等,为了方便客户的移植操作,这 里做了打包处理,所需内容均集成在此文件夹内

指纹守护进程修改,增加对集创指纹库的加载

移植包文件目录结构如下:

3. 移植步骤

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

3.3 修改 BiometricsFingerprint

修改 hardware/interfaces/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp 文件, 增加对集创指纹库的加载, 可参考发布包里 hardware 目录,主要有两处修改, 建议对比修改 下:

改动 1:定义各家指纹的 HARDWARE_MODULE_ID

前:                                       修改后:

考虑 到后续 多家指纹 的兼容 处 理 ,我 们软件包里指 纹库 的 HARDWARE_MODULE_ID 名称为 fpsensor_fingerprint”,如需改, 请联系我们更新。

改动 2:BiometricsFingerprint::openHal()函数,遍历加载各家的指纹库,并通过在库里读 ID 操作,识别当前指纹芯片

前:                                       修改后:

4. 编译打包验证指纹基本功

以上修改完成后, 可以全编译后刷机,如正常,则开机后在设置-》安全目录中可以看到指纹条  并可以录入指纹, 否则可能是指纹开机没过, 请同时抓取开机的 logcat  kernel log ,  logcat  

集创指关键词为 fpCorekernel log 中关键词为 fpsensor,可自行分析, 或将相关 log 发给我们协助 处理。

5. 指纹支持上报手势

手势功能,目前的实现方式是在指纹 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

6. 指纹兼容处理

有两种实现方式可以参考(目前默认方式 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

7. 添加指纹工模测试 (可选项,不需要可以不用添加)

如需要使用我们提供的 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. 纹功能移植过程中常见问题

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 是否需要签名;

硬件连接是否正常;

8.2  可以进入指纹界面,录入没有反应:

●   IRQ GPIO 配置有问题,没有触发中断,可以使用 adb shell cat /proc/interrupts 命令 确认中断是否有申请成功,以及在录入界面按压 sensor,指纹中断计数是否有变化

   中断引脚硬件连接问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linzhimunan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值