TA集成
1. 在集创北方给的移植包中找到已经编译好的TA文件 fngap64_5.1.mbn
将 fngap64_5.1.mbn 放到 trustzone_images/build/ms/bin/FATAANAA下,在这里我把 fngap64_5.1.mbn 改了一个名 fngap64.mbn
在 Divar.LA.3.0/contents.xml 找到smplap64.mbn,跟在后面添加
<file_ref ignore="true" pil_split="fngap64">
<file_name>fngap64.mbn</file_name>
<file_path>trustzone_images/build/ms/bin/FATAANAA/</file_path>
</file_ref>
2. 在Divar.LA.3.0/common/sectools/config/divar/divar_secimage.xml 同样找到smplap64.mbn,跟在后面添加, 其中 app_id改成和其他不一样的
<image sign_id="fngap64" name="fngap64.mbn" image_type="elf_has_ht">
<general_properties_overrides>
<sw_id>0x0000000C</sw_id>
<anti_rollback_version>0x00000000</anti_rollback_version>
<app_id>0x0000A113</app_id>
</general_properties_overrides>
<pil_split>true</pil_split>
<meta_build_location>$(FILE_TYPE:file_ref, ATTR:pil_split, VAR:fngap64)</meta_build_location>
</image>
3. 重新编译打包NON-HLOS.bin
cd Divar.LA.3.0/common/build
python build.py
4.验证,
重新烧写 Divar.LA.3.0/common/build/ufs/bin/asic/NON-HLOS.bin, emmc的项目在emmc目录下
adb shell "ls /vendor/firmware_mnt/image/fngap64*" 有东西则说明TA已经编译进NON-HLOS.bin
驱动集成
1.
将驱动放入内核目录,由于gki2.0都是编译为ko,在Kconfig里默认default m即可,编译完成后生成fpsensor_spi_tee.ko
kernel_platform/msm-kernel/drivers/input/fpsensor_tee_driver
2. 配置DTS
khaje-qrd.dtsi
&soc {
// add for fingerprint
fingerprint_gpio {
compatible = "qcom,fingerprint-gpio";
interrupt-parent = <&tlmm>;
interrupts = <83 0x2008>;
fp-gpio-reset = <&tlmm 104 0x0>;
fp-gpio-int = <&tlmm 83 0x2008>;
fp-gpio-power = <&tlmm 36 0x0>;
status = "okay";
};
};
HAL集成
1.
在device/qcom/bengal_515/ 下创建目录 fingerprint
创建fingerprint.mk添加以下内容
$(call inherit-product, $(LOCAL_PATH)/fpsensor/fpsensor.mk)
PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.fingerprint.xml:vendor/etc/permissions/android.hardware.fingerprint.xml
PRODUCT_PACKAGES += android.hardware.biometrics.fingerprint@2.1-service
PRODUCT_PACKAGES += android.hardware.biometrics.fingerprint@2.1-service.rc
2.
创建fpsensor目录
创建fpsensor.mk添加以下内容
LOCAL_PATH := device/qcom/bengal_515/fingerprint/fpsensor
# HAL lib
PRODUCT_COPY_FILES += $(LOCAL_PATH)/lib64/hw/fpsensor_fingerprint.default.so:vendor/lib64/hw/fpsensor_fingerprint.default.so
#selinux
BOARD_SEPOLICY_DIRS += device/qcom/bengal_515/fingerprint/fpsensor/sepolicy
3.
将集创高通android_qsee移植包中的sepolicy和lib64目录拷贝过来
在device/qcom/bengal_515/bengal_515.mk 中添加上面新加的mk
$(call inherit-product, $(LOCAL_PATH)/fingerprint/fingerprint.mk)
4.
在device/qcom/bengal_515/init.target.rc中添加DAC权限
on boot
chown system system /dev/fpsensor
chmod 664 /dev/fpsensor
5.
解决fpsensor_fingerprint.default.so编译报错
现在google希望elf格式的文件走android.bp来拷贝,由于fpsensor_fingerprint.default.so是通过PRODUCT_COPY_FILES来拷贝,会编译报错,为了省事直接把下面注释掉。(正规的办法是要把fpsensor_fingerprint.default.so写到android.bp中)
59 #check_elf_prebuilt_product_copy_files := true
60 #ifneq (,$(filter true,$(BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES)))
61 #check_elf_prebuilt_product_copy_files :=
62 #endif
或者添加
BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES += true
6.
更改指纹默认的HARDWARE_MODULE_ID
hardware/interfaces/biometrics/fingerprint/2.1/default/BiometricsFingerprint.cpp
FINGERPRINT_HARDWARE_MODULE_ID改为fpsensor_fingerprint,才能匹配fpsensor_fingerprint.default.so
fingerprint_device_t* BiometricsFingerprint::openHal() {
//if (0 != (err = hw_get_module(FINGERPRINT_HARDWARE_MODULE_ID, &hw_mdl))) {
if (0 != (err = hw_get_module("fpsensor_fingerprint", &hw_mdl))) {
}
移除高通指纹
SM6225在Android14上默认编译了高通的fingerprint,需要去除
1.
vendor/qcom/proprietary/prebuilt_HY11/target/product/bengal_515/Android.mk
+#ifeq ($(wildcard vendor/qcom/proprietary/biometrics/fingerprint),)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := QFingerprintService
+#LOCAL_MODULE_OWNER := qcom
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_CLASS := APPS
+#LOCAL_CERTIFICATE := platform
+#LOCAL_MODULE_SUFFIX := .apk
+#LOCAL_SRC_FILES := ../../.././target/product/bengal_515/vendor/app/QFingerprintService/QFingerprintService.apk
+#LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/app
+#include $(BUILD_PREBUILT)
+#endif
+
+#ifeq ($(wildcard vendor/qcom/proprietary/biometrics/fingerprint),)
+
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := QFPCalibration
+#LOCAL_MODULE_OWNER := qcom
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_CLASS := APPS
+#LOCAL_CERTIFICATE := platform
+#LOCAL_MODULE_SUFFIX := .apk
+#LOCAL_SRC_FILES := ../../.././target/product/bengal_515/vendor/app/QFPCalibration/QFPCalibration.apk
+#LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/app
+#include $(BUILD_PREBUILT)
+#endif
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := qfp-daemon
+#LOCAL_MODULE_OWNER := qcom
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_MODULE_CLASS := EXECUTABLES
+#LOCAL_SHARED_LIBRARIES := libbase libbinder_ndk android.hardware.biometrics.fingerprint-V2-ndk android.hardware.biometrics.common-V2-ndk libc libcutils liblog libutils vendor.qti.hardware.fingerprint@1.0 libqfp-service libhidlbase libhidltransport libc++ libm libdl
+#LOCAL_SRC_FILES := ../../.././target/product/bengal_515/vendor/bin/hw/qfp-daemon
+#LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/bin/hw
+#LOCAL_PROPRIETARY_MODULE := true
+#include $(BUILD_PREBUILT)
+#endif
+#include $(CLEAR_VARS)
+#LOCAL_MODULE := libqfp-service
+#LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+#LOCAL_SHARED_LIBRARIES := libc libcutils liblog libutils libhidlbase libhidltransport vendor.qti.hardware.fingerprint@1.0 libbase libbinder_ndk android.hardware.biometrics.fingerprint-V2-ndk android.hardware.biometrics.common-V2-ndk libc++ libm libdl
+#LOCAL_MODULE_SUFFIX := .so
+#LOCAL_STRIP_MODULE := false
+#LOCAL_MULTILIB := 64
+#LOCAL_MODULE_OWNER := qcom
+#LOCAL_MODULE_TAGS := optional
+#LOCAL_SRC_FILES := ../../.././target/product/bengal_515/vendor/lib64/libqfp-service.so
+#LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/lib64
+#LOCAL_PROPRIETARY_MODULE := true
+#include $(BUILD_PREBUILT)
+#endif
2.
vendor/qcom/proprietary/prebuilt_HY11/target/product/bengal_515/prebuilt.mk
+#PRODUCT_PACKAGES_DEBUG += QFPCalibration
+#PRODUCT_PACKAGES += qfp-daemon
+#PRODUCT_COPY_FILES += vendor/qcom/proprietary/prebuilt_HY11/target/product/bengal_515/vendor/etc/init/qfp-daemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/qfp-daemon.rc
+#PRODUCT_PACKAGES += qfp-daemon.xml
+#PRODUCT_PACKAGES += libqfp-service
Framework & APP 修改
HIDL接口是google要废弃掉的东西,Android14指纹默认也是AIDL HAL,需要使用HIDL HAL要修改qssi代码
1.
qssi/frameworks/base/core/res/res/values/config.xml
<string-array name="config_biometric_sensors" translatable="false" >
- <!-- <item>0:2:15</item> ID0:Fingerprint:Strong -->
+ <item>0:2:15</item> <!-- ID0:Fingerprint:Strong -->
2.
qssi/packages/apps/Settings/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
public void onEnrollmentProgressChange(int steps, int remaining) {
- mNextClicked = true;
- proceedToEnrolling(true /* cancelEnrollment */);
+ mNextClicked = false;
+ proc
至此指纹功能已经移植完成,设置菜单中出现指纹选项,集创北方移植包中剩下的为指纹测试的东西,如果工厂MMI没有需求可以不要。
Debug
1.
TZ log抓取 cat /proc/tzdbg/qsee_log 以前的路径为/d/tzdbg/qsee_log
2.
如果调试不知道主控指纹 spi 口应该选哪一路, 可以用如下命令测试:
adb shell qseecom_sample_client v smplap32 19 1 5
19: 表示测试 SPI
1: 表示测试次数
5: 表示 SPI5
3.
如果TA没有运行,可以手动加载TA
adb shell qseecom_sample_client –v fngap64 0 1