Qualcomm 플랫폼에서 QSEE 기반 지문인식 방안 이식의 2구동 이식

본고는 구동 이식의 과정만 소개하고 기술 분석은 하지 않는다.
 
1. 드라이버 컴파일링이 통과하여 정상적인 운행을 검증한다. 
먼저 회사에서 손잡이의 구동을 순조롭게 컴파일하여 정상을 검증하였다.고객 현장에 가서 다시는 편집할 수 없는 문제가 발생하지 마라. 
이식
드라이버는 파이프를 끊고 파이프를 복원하는 등 dts의 설정 내용을 읽을 수 있기 때문에 먼저 dts를 설정해야 한다.
파일kernel/msm - 3.18/arch/arm64/boot/dts/qcom/msm8953-chipsailing을 추가합니다.dtsi
이 파일은 주로 리셋 파이프, 중단 파이프,spi 파이프 를 설정합니다.주로 다음과 같습니다.
&soc {
	chipsailing_fp {
	compatible = "chipsailing,fingerprint";
	spi-max-frequency = <1000000>;
	input-device-name = "cs3511";
	interrupt-parent = ;
	interrupts = <48 0x0>;

	chipsailing,gpio_rst    = ;
	chipsailing,gpio_irq      = ;

	clock-names = "iface_clk", "core_clk";
	clocks = ,
	;

	pinctrl-names = "chipsailing_spi_active",
			"fingerprint_reset_active",
			"fingerprint_reset_suspend",
			"fingerprint_irq";

	pinctrl-0 = ;
	pinctrl-1 = ;
	pinctrl-2 = ;
	pinctrl-3 = ;
	};
};

&tlmm {
	chipsailing_spi_active: chipsailing_spi_active{
		mux {
			pins = "gpio135", "gpio136", "gpio137", "gpio138";
			function = "blsp_spi7";
		};
		config {
			pins = "gpio135", "gpio136", "gpio137", "gpio138";
			drive-strength = <2>;
			bias-disable = <0>;
		};
	};
	fps_reset_high: fps_reset_high{
                mux {
                        pins = "gpio140";
                        function = "gpio";
                };
                config {
                        pins = "gpio140";
                        drive-strength = <2>;
                        bias-disable = <0>;
                        output-high;
                };
        };
	fps_reset_low: fps_reset_low{
		mux {
			pins = "gpio140";
			function = "gpio";
		};
		config {
			pins = "gpio140";
			drive-strength = <2>;
			bias-disable = <0>;
			output-low;
		};
	};
	fps_irq: fps_irq {
		mux {
			pins = "gpio48";
			function = "gpio";
		};
		config {
			pins = "gpio48";
			drive-strength = <2>;
			bias-disable = <0>;
			input-enable;
		};
	};

};

msm8953-chipsailing.dtsi는 판급의 dts msm8953-mtp에 의해dts 파일은 다음과 같이 C-언어 헤더 파일과 비슷한 형식으로 구성되어 있습니다.
#include "msm8953.dtsi"
#include "msm-pmi8950.dtsi"
#include "msm8953-mtp.dtsi"
#include "msm8953-pmi8950.dtsi"
#include "msm8953-camera-sensor-mtp.dtsi"
#include "msm8953-goodix.dtsi"
#include "msm8953-chipsailing.dtsi"

3. 이식 구동
3.1 드라이브 디렉토리 구조
chipsailing/
├── cf_ctl.c
├── cf_ctl.h
├── Kconfig
└── Makefile

3.2 절차
1)chipsailing 디렉터리를kernel/drivers/input에 복사하고kernel/drivers/input/Makefile 추가 수정
obj-y  +=chipsailing

이것은 비교적 폭력적인 방법으로 구동을 내부에 강제로 컴파일하는 것이다.원하지 않으면 Kconfig를 컴파일하여 선택합니다.
kernel/msm-3.18/drivers/input/chipsailing/Kconfig 내용은 다음과 같습니다.
config CHIPSAILING_FINGERPRINT
        tristate "generic chipsailing fingerprint driver"
        default n
        help
        add support for chipsailing fingerprint driver.

2)kernel/msm-3.18/drivers/input/Makefile 수정, 추가
 obj-$(CONFIG_CHIPSAILING_FINGERPRINT) += chipsailing/

3)kernel/msm-3.18/drivers/input/Kconfig 수정, 추가
source "drivers/input/chipsailing/Kconfig"

4)arch/arm64/configs/msmcortex 수정defconfig, 추가
CONFIG_CHIPSAILING_FINGERPRINT=y

5)arch/arm64/configs/msmcortex-perf 수정defconfig, 추가:
CONFIG_CHIPSAILING_FINGERPRINT=y

설명: 4) 5) 단계는 해당하는 보드 수준 config 파일에서 CONFIG 를 정의합니다.CHIPSAILING_FINGERPRINT라는 매크로는 플랫폼에 따라 프로젝트마다 수정할 수 있는 파일이 다르기 때문에 해당하는 프로젝트에 따라 수정해야 한다.
4. 디버깅 디테일
1. 만약에 여러 개의 지문이 이 프로젝트에 적용되고 친구가 디버깅을 다 했다면 발 관리 자원의 점용을 피하기 위해 그들의 드라이브를 컴파일하지 마세요.
2, 컴파일 boot.img 녹음 후 구동이 정상적이지 않다고 어떻게 판단합니까?
1) 장치 결점 보기,/dev/csspi는 드라이브가 만든 결점입니다. 정상적인 상황에서는 존재해야 합니다.
 ls /dev/cs_spi
 /dev/cs_spi

2) 등록 중단 여부를 확인할 때 cf 키워드가 표시됩니다.irq.
cat /proc/interrupts | grep cf_irq
297:          3   mt-eint   9  cf_irq

3) sys 결점을 살펴보면 내부 핵 공간이 중단 신호를 구동 공간에 보고하는 것과 관련이 있다.
 ls /sys/devices/platform/cs_spi/ -l
 -rw-r--r-- root     root         4096 2015-01-02 00:24 driver_override
 -rw-rw---- root     root         4096 2015-01-01 00:02 irq
 -r--r--r-- root     root         4096 2015-01-02 00:24 modalias
 drwxr-xr-x root     root              2015-01-01 00:01 power
 lrwxrwxrwx root     root              2015-01-02 00:24 subsystem -> ../../../bus/platform
 -rw-r--r-- root     root         4096 2015-01-01 00:01 uevent

3. 구동 로그 보기
키워드:chipsailing
1) 실시간 로그 보기
cat /proc/kmsg | grep chipsailing  //     log

adb shell "cat /d/tzdbg/qsee_log | grep chipsailing" //  TA log

2)log시스템에 저장된log파일 보기
Qualcomm의 로그 도구인 QTI Logkit을 열면 로그를 저장합니다. 이것은 mtklog와 차이가 없습니다.
log 경로:/data/user/0/com.qualcomm.qti.logkit/files
디렉토리 구조:
.
├── logdata
│   └── Session_02-10_0446-3444414627
│       ├── out-Bootup-kmsg0.txt.zip
│       ├── out-Bootup-logcat0.txt.zip
│       ├── out-Diag0.isf.zip
│       ├── out-Diag1.isf.zip
│       ├── out-eHLOSCommand_ContLogcatEvents0.txt.zip
│       ├── out-eHLOSCommand_ContLogcatEvents1.txt.zip
│       ├── out-eHLOSCommand_ContLogcatRadio0.txt.zip
│       ├── out-eHLOSCommand_ContLogcatRadio1.txt.zip
│       ├── out-kmesg0.txt.zip
│       ├── out-kmesg1.txt.zip
│       ├── out-kmesg2.txt.zip
│       ├── out-logcat0.txt.zip
│       ├── out-logcat1.txt.zip
│       ├── out-logcat2.txt.zip
│       ├── out-msg_hash_088e96f5-9aa6-8b9a-48fc-a74849229247.qdb.zip
│       └── Package.xml
└── temp                          //          log
    ├── Bootup-kmsg0.txt          //   log    mtk_log  kernel.boot
    ├── Bootup-logcat0.txt        //logcat   log    mainlog.boot
    ├── kmesg2.txt                
    ├── kmesg3.txt
    ├── kmesg8.txt
    ├── kmesg9.txt
    ├── logcat2.txt
    ├── logcat3.txt
    ├── logcat8.txt
    └── logcat9.txt

좋은 웹페이지 즐겨찾기