指纹芯片GF5216(汇顶)TEE方案移植(高通8996平台)

news/2024/12/2 20:34:20/

指纹移植步骤

指纹移植分为主要如下步骤:

1. 移植Kernel(APPS)的驱动:主要是创建设备/dev/goodix_fp文件与上电。(对于TZ4.0及更高的版本,
不需要在APPS侧配置spi的clock)
2. 移植NON-HLOS端TZ中的TA(trustzone app):主要是为了安全通信。
3. 增加SElinux的策略文件和服务自启动,增加设置中的xml文件,使得在设置中有指纹的选项。
4. 增加汇顶的HAL指纹库。

移植APPS驱动:

在kernel/drivers/input/增加fingerprint文件夹。
内部包括指纹kernel driver文件。
/drivers/input/Makefile的Makefile中添加对fingerprint的编译
obj-$( CONFIG_GOODIX_FINGERPRINT)  += fingerprint/
/drivers/input/Kconfig 的Kconfig 添加如下所示代
config GOODIX_FINGERPRINTtristate "Goodix Fingerprint"default y---help---Goodix Fingerprint chip GF316M/GF318M/GF3118M/GF518M/GF5118M/GF516M/GF816M/GF3208/GF3206/GF3266/GF3288/GF5206/GF5216/GF5208 TEE driver
dtsi 文件配置:在msm8996.dtsi文件中增加硬件上连接的spi口。比如连接的spi_4(地址7579000)
        spi_4: spi@7579000 { // BLSP1 QUP4 compatible = "qcom,spi-qup-v2";#address-cells = <1>; #size-cells = <0>; reg-names = "spi_physical", "spi_bam_physical";reg = <0x07579000 0x600>,<0x07544000 0x2b000>;interrupt-names = "spi_irq", "spi_bam_irq";interrupts = <0 99 0>, <0 238 0>;spi-max-frequency = <19200000>;qcom,infinite-mode = <0>; qcom,use-bam;qcom,ver-reg-exists;qcom,bam-consumer-pipe-index = <20>;qcom,bam-producer-pipe-index = <21>;qcom,master-id = <86>;qcom,use-pinctrl;pinctrl-names = "spi_default", "spi_sleep";pinctrl-0 = <&spi_4_active>;pinctrl-1 = <&spi_4_sleep>;clock-names = "iface_clk", "core_clk";clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,<&clock_gcc clk_gcc_blsp1_qup5_spi_apps_clk>;};

然后在项目dtsi中增加指纹的节点。因为不需要在APPS端操作指纹通信。所有可以注册platform总线上的设备。具体中断脚和reset脚和电由硬件设计决定。

&soc {goodixfp {compatible = "goodix,fingerprint";interrupt-parent = <&tlmm>;interrupts = <121 0x2008>;avdd-supply = <&pm8994_l18>;goodix,gpio_reset = <&tlmm 50 0>;goodix,gpio_irq = <&tlmm 121 0x1>;};};

Linux driver程序probe完成后,可在/dev目录下看到一个字符设备,名字默认是:
/dev/goodix_fp

移植TA

根据硬件使用的芯片SPI序号在ta/src/app_main.c中做如下配置:
qsee_spi_device_id_t spi_device_id = QSEE_SPI_DEVICE_X;
其中QSEE_SPI_DEVICE_X定义在高通编译环境core/api/securemsm/trustzone/qsee/qsee_spi.h路径下。
工具链安装
确认编译工具已经安装, 例如: RVDS/LLVM/PYTHON/MAKE/GCC etc. 例如 TZ4 一般使用
LLVM 进行编译。
这里写图片描述
2 添加 goodixfp 的源码 src 目录和 build 目录
2.1 添加 goodixfp build

1) 创建目录, 命令是: 
mkdir -p trustzone_images/core/bsp/trustzone/qsapps/goodixfp/build
2) 拷贝 sampleapp 的 SConscript 文件到 build 目录下, 命令是:
cp trustzone_images/core/bsp/trustzone/qsapps/sampleapp/build/SConscripttrustzone_images/core/bsp/trustzone/qsapps/goodixfp/build/SConscript
3) 编辑步骤 2 里面拷贝的 SConscript , vim 命令编辑里面的内容:
 vim trustzone_images/core/bsp/trustzone/qsapps/goodixfp/build/SConscript
将文件里面出现的 smapleapp 使用 goodixfp 代替, 出现的 SAMPLEAPP 则使用 GOODIXFP 代替。
aliases 里面的字段填充'goodixfp'和'all'
2.2 添加 goodixfp src
1) 创建目录, 命令是: mkdir trustzone_images/core/securemsm/trustzone/qsapps/goodixfp2) 进入刚刚的 goodixfp 目录, 命令是:cd trustzone_images/core/securemsm/trustzone/qsapps/goodixfp3) 创建 build 目录, mkdir build4) 创建 build 目录, mkdir src5) 拷贝我们服务器的 ta 内容到客户端, 命令是: 
cp ta/build/ goodixfp.ld build/goodixfp.ld(ld 文件用于 TZ4.0 版本, 不是 TZ4.0.5)6) 拷贝源码文件, 命令是: cp ta/src/* src/7) 拷贝 SConscript 脚本文件到 build 目录, cp ta/build/SConscript goodixfp/build/

在这个过程中汇顶提供的goodixfp.ld有一个错误。应该把rela改为rel

In 
goodixfp/build/goodixfp.ld - rela.dyn:ALIGN(4096)(*.rela.dyn)} 
+ rel.dyn:ALIGN(4096)(*.rel.dyn)} 

QSEE TZ4.0 移植向导(MSM8996)

1) 编辑文件: trustzone_images/core/bsp/trustzone/qsapps/build/secimage.xml;
添加如下内容:
<image sign_id="goodixfp" name="goodixfp.mbn" image_type="elf_has_ht"><general_properties_overrides><sw_id>0x000000000000000C</sw_id><app_id>0x0000000000003331</app_id> //app sign id</general_properties_overrides>
</image>2)编辑文件: trustzone_images /core/securemsm/secrsa/build/SConscript;
添加如下内容:
if env.has_key('GOODIXFP_IMAGE'):env.Append(CPPPATH = "${COREBSP_ROOT}/securemsm/secrsa/env/sampleapp/inc")env.Append(CPPPATH = "${COREBSP_ROOT}/securemsm/secmath/env/sampleapp/inc")env.Append(CPPPATH = "${COREBSP_ROOT}/api/securemsm/trustzone/qsee")env.Append(CPPPATH = "${COREBSP_ROOT}/api/securemsm/crypto")
然后在 elif 添加如下内容:
elif env.has_key('GOODIXFP_IMAGE')env.Append(CCFLAGS = " -03 ")3)编辑文件: trustzone_images/core/kernel/libstd/build/SConscript;
添加 'GOODIXFP_IMAGE' 到 env.AddBinaryLibrary()里面,示例:env.AddBinaryLibrary([‘xxx’,’GOODIXFP_IMAGE’,’xxx’])4)编辑文件 :trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/SConscript:添加 'GOODIXFP_IMAGE' 到 images 或者 env.AddBinaryLibrary()里面.5)编辑文件: trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build
/Sconscript;添加如下内容, 添加位置应该在最后:env.AddBinaryObject('GOODIXFP_IMAGE', IMG_ENTRY_SOURCE)env.AddBinaryLibrary('GOODIXFP_IMAGE','${BUILDPATH}/tzapp_entrylib',LIB_ENTRY_SOURC
ES)然后在 elif 添加内容:elif env.has_key('GOODIXFP_IMAGE'):LIB_ENTRY_SOURCES +=[ '${BUILDPATH}/src/tazpp_lib_main.c',]6)编辑文件: trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build
/Sconscript; 添加 'GOODIXFP_IMAGE' 到 env.AddBinaryLibrary()里面7)编辑文件:
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib
/build/SConscript; 
添加 'GOODIXFP_IMAGE' 到 env.AddBinaryLibrary()里面, 示例:env.AddBinaryLibrary('GOODIXFP_IMAGE', '${BUILDPATH}/tzapp_entrylib',
LIB_ENTRY_SOURCES)8)编辑文件:
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/Sconscript,
添加如下内容:env.AddBinaryLibrary (['GOODIXFP_IMAGE'],biometric_lib, [BIOMETRIC_LIB_SOURCES])9)添加 goodixfp 目录( 通过拷贝 sampleapp) :
需要添加的目录有如下一些( 注意全部需要添加, 否则可能造成编译 TA 出错)
cp -rf
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/sampleapp
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/goodixfpcp -rf
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/sampleapp
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/goodixfpcp -rf trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/sampleapp
trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/goodixfpcp -rf trustzone_images/core/kernel/libstd/build/sampleapp
trustzone_images/core/kernel/libstd/build/goodixfpcp –rf
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib
/build/sampleapp
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib
/build/goodixfpcp -rf trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/sampleapp
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/goodixfp

编译TA命令:在trustzone_images/build/ms目录下:

./build.sh CHIPSET=msm8996 goodixfp

在AMSS目录下修改contents.xml 增加如下代码:

     <file_ref pil_split="goodixfp"><file_name>goodixfp.mbn</file_name><file_path>trustzone_images/build/ms/bin/IADAANAA/</file_path></file_ref>

就可以在编译NON-hlos.bin文件后烧录到系统里。因为在NON-HLOS(TZ)端使用spi通信。所有先要配置ACCESS权限。在rustzone_images/core/buses/qup_accesscontrol/config/QUPAC_8996_Access.xml。修改对应的spi访问权限为 AC_TZ
sample app test spi buses
qseecom_sample_client v smplap32 19 1 4

增加SElinux和服务自启动

在device/qcom/msm8996目录。修改init.target.rc

on fs#goodix fingerprintchown system system /dev/goodix_fp#goodix fingerprint end#goodix fingerprint
service gx_fpd /system/bin/gx_fpd  #star goodix serviceclass late_startuser rootgroup root system

修改msm8996.mk 增加xml文件和编译指纹HAL库。

 PRODUCT_PACKAGES += fingerprintdPRODUCT_COPY_FILES += \frameworks/native/data/etc/android.hardware.sensor.stepdetector.xml:system/etc/permissions/android.hardware.sensor.stepdetector.xml \   frameworks/native/data/etc/android.hardware.sensor.ambient_temperature.xml:system/etc/permissions/android.hardware.sensor.ambient_temperature.xml \    frameworks/native/data/etc/android.hardware.sensor.relative_humidity.xml:system/etc/permissions/android.hardware.sensor.relative_humidity.xml \
frameworks/native/data/etc/android.hardware.sensor.hifi_sensors.xml:system/etc/permissions/android.hardware.sensor.hifi_sensors.xml \
frameworks/native/data/etc/android.hardware.fingerprint.xml:system/etc/permissions/android.hardware.fingerprint.xml

在device/qcom/sepolicy/msm8996/ 把汇顶提供的SElinux 文件增加到这里。另外audit2allow工具必不可少。增加遗漏的策略。这次调试增加了汇顶遗漏的策略如下:

#allow access to firmware
allow gx_fpd firmware_file:dir r_dir_perms;
allow gx_fpd firmware_file:file r_file_perms;#allow ion device
allow gx_fpd ion_device:chr_file r_file_perms;

增加HAL指纹库

在hardware/libhardware/modules/fingerprint/目录下:

mkdir lib64
将汇顶的lib目录下的文件放到lib64目录下。

修改Android.mk:

$(shell mkdir -p $(PRODUCT_OUT)/system/bin/)
$(shell mkdir -p $(PRODUCT_OUT)/system/lib64/)
$(shell mkdir -p $(PRODUCT_OUT)/system/lib64/hw/)$(shell cp -r $(LOCAL_PATH)/lib64/libfp_client.so $(PRODUCT_OUT)/system/lib64/libfp_client.so)
$(shell cp -r $(LOCAL_PATH)/lib64/fingerprint.default.so $(PRODUCT_OUT)/system/lib64/hw/fingerprint.default.so)
$(shell cp -r $(LOCAL_PATH)/lib64/libalgoandroid.so $(PRODUCT_OUT)/system/lib64/libalgoandroid.so)
$(shell cp -r $(LOCAL_PATH)/lib64/libfpservice.so $(PRODUCT_OUT)/system/lib64/libfpservice.so)
$(shell cp -r $(LOCAL_PATH)/lib64/gxfingerprint.default.so $(PRODUCT_OUT)/system/lib64/hw/gxfingerprint.default.so)
$(shell cp -r $(LOCAL_PATH)/lib64/gx_fpd $(PRODUCT_OUT)/system/bin/gx_fpd)

就将指纹库文件增加成功了。(另外msm8996有高通的自有的指纹库。需要删除)
在qcom/proprietary/prebuilt_HY11/target/product/msm8996/Android.mk中,注释掉指纹编译选项,例如:

# add for disable qcom fingerprint hal
#include $(CLEAR_VARS)
#LOCAL_MODULE        := fingerprint.qcom
#LOCAL_MODULE_CLASS  := SHARED_LIBRARIES
#LOCAL_MODULE_SUFFIX := .so
#LOCAL_STRIP_MODULE  := false
#LOCAL_MULTILIB      := 64
#LOCAL_MODULE_OWNER  := qcom
#LOCAL_MODULE_TAGS   := optional
#LOCAL_SRC_FILES     := ../../.././target/product/msm8996/system/vendor/lib64/hw/fingerprint.qcom.so
#LOCAL_MODULE_PATH   := $(PRODUCT_OUT)/system/vendor/lib64/hw
#LOCAL_PROPRIETARY_MODULE := true
#include $(BUILD_PREBUILT)
# add by xipeng.gu for disable qcom fingerprint hal

调试总结:
1.首先可以在APPS端确认指纹硬件OK,测试读取chipid。
2.在TZ调试SPI时要确定TLMMChipset.xml的gpio脚复用功能的设置。最好查看硬件手册。80-NT204-2X Rev. D


http://www.ppmy.cn/news/688157.html

相关文章

AP8851H DC/DC降压 恒压 LED驱动芯片

产品描述 特点 AP8851H 一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能 开关控制、基准电源、误差放大器、过 热保护、限流保护、短路保护等功能&#xff0c; 非常适合在宽输入电压范围具有优良 的负载和线性调整度。 AP8851H 芯片包含每周期的峰值…

AP6256 固件

注&#xff1a;完整文件已上传到该平台&#xff0c;找不到的或有别的正基技术问题下方评论留言 #AP6256_NVRAM_V1.1_08252017 Cloned from bcm94345wlpagb_p2xx.txt NVRAMRev$Rev: 498373 $ sromrev11 vendid0x14e4 devid0x43ab manfid0x2d0 prodid0x06e4 macaddr00:90:4c:c5…

堃博医疗创上市以来新低:年内跌幅超八成,市值累计蒸发90亿港元

撰稿|汤汤 来源|贝多财经 近日&#xff0c;港交所上市公司堃博医疗-B&#xff08;HK:02216&#xff0c;下称“堃博医疗”&#xff09;、三叶草生物-B&#xff08;HK:02197&#xff0c;下称“三叶草生物”&#xff09;的股价双双再创新低。其中&#xff0c;堃博医疗的股价于20…

Scala面向对象【下】

1、特质 Scala 语言中&#xff0c;采用特质 trait&#xff08;特征&#xff09;来代替接口的概念&#xff0c;也就是说&#xff0c;多个类具有相同的特质&#xff08;特征&#xff09;时&#xff0c;就可以将这个特质&#xff08;特征&#xff09;独立出来&#xff0c;采用关键…

【分布式存储】聊聊共识和一致性

在分布式存储系统中&#xff0c;对于提高性能、可用性、可拓展性来说都有相关机制可以保证&#xff0c;比如复制、切片等&#xff0c;但是一旦涉及到分布式系统中选主的问题&#xff0c;就比较难&#xff0c;因为网络是不可靠的&#xff0c;并且可能还有拜占庭将军问题。所以如…

MS5182N(AD7682)驱动开发调试总结(一)

简介 MS5182N芯片是瑞盟科技的一款4通道的16位SAR ADC芯片,其对标的是ADI的AD7682芯片&#xff0c;或者说基本上两者功能一样,可以作为国产替代。另外其MS5189(8通道的)对标的则是AD7689。我此次项目中仅使用了MS5182N 。不过还是吐槽一下,其数据手册做的真是无语,虽然明显有直…

STM32与多台MS5803压力传感器I2C通讯

MS5803压力传感器支持SPI和I2C总线通讯&#xff0c;拥有24位AD转换。能够同时获得压力值和温度值&#xff0c;其中压力测量范围为10-1100mbar&#xff0c;温度的测量范围是-40-85摄氏度。各引脚功能及参数如下&#xff1a; 传感器内部结构图如下&#xff1a; 通讯协议的选择通过…

STM32F4实时时间精确到ms

开发板&#xff1a;STM32F407 1.目的&#xff1a;在屏幕上能显示的实时时间精确到ms&#xff0c;如 时 &#xff1a;分&#xff1a;秒&#xff1a;毫秒&#xff1b; 2.方式&#xff1a;RTC结合systick定时器&#xff0c;由于RTC只能为秒级&#xff0c;所以毫秒需要利用systic…