一 指纹调试思路,总纲
二 硬件原理图
三 如何确认是否移植好finger驱动?
a)probe函数调试的初始化是否成功,打印信息确认
b)查看设备节点是否生成
/dev/sunwave_fp
c)SPI通信是否成功,
1)确认 pin脚初始化是否正确,是否被占用,cs,clk,rst,miso,mosi,eint等,android8.1对应的gpio路径:
cat /sys/bus/platform/drivers/mediatek-pinctrl/10005000.pinctrl/mt_gpio
2)检查平台的spi通道是否和硬件spi pin脚保持一致,spi-padmacro = <0>;
spi0: spi@1100a000 {
compatible = "mediatek,mt6763-spi";
cell-index = <0>;
spi-padmacro = <0>;
dma_addrmask = <36>;
reg = <0 0x1100a000 0 0x1000>;
interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_LOW>;
clocks = <&infracfg_ao INFRACFG_AO_SPI0_CG>;
clock-names = "main";
clock-frequency = <109000000>;
clock-div = <1>;
};
spi-padmacro设定参考平台的table
code 匹配,spi初始化要确保调用成功,如下
static struct spi_board_info spi_board_devs[] __initdata = {
[0] = {
.modalias = "sunwave-fp",
.bus_num = 0,
.chip_select = 0,
.mode = SPI_MODE_0,
},
};
3) 首先读取ic的chip id,与ic厂沟通,需要读取哪些id 寄存器,在probe加入对应的打印信息,如果能够正常读取到, 说明 DTS 配置及 SPI通迅是正常的(中断 PIN 暂时不能确定)。其次,也可以将miso mosi短接,测试SPI自发自收通信是否成功,
SPI自发自收平台测试如下,
Control virtual spi device which register on platform to send message with slave device.
adb shell
cd /sys/bus/spi/drivers/test_spi/spix.1------x confirm by you Pin design.For example:Use SPI1_CLK_B pin(MT6797),it is spi1.1.
echo -w com_mod=1 > spi------------config dma mode(0----fifi mode,1----dma mode)
echo -w len=8 > spi_msg-------send 8byte data,default date is 0x12345678.If use -w cmd,len value must multiple of four,for example:8,It will circulation send 0x12345678。
If pin miso and mosi is disconnect or connect but send fail,you will find next log.
If send success,you won't found.Then you can test hardware signal use oscilloscope.
通信失败的参考log如下,
当然,也可以自己写一些spi通信测试的小程序,后续整理后会持续更新。
若读取异常可以判断此时 SPI 不通,可以按照如下步骤去排查:
1. 确认模组的供电是否正常;
2. 检查 SPI 的电平时序是否正常:
3. 檢測miso mosi是否接反,可以用邏輯分析儀確認;
4. 确认指纹单模组是否正常;
d)确认finger interrupt中断是否注册成功
cat proc/interrupts
中断设备节点绑定
finger_irq_node = of_find_compatible_node(NULL, NULL, "mediatek,fingerprint-eint");// "mediatek,sunwave_fp"
ctl_dev->irq_num = irq_of_parse_and_map(finger_irq_node, 0);
如果没有 1)软件排查,查看irq注册函数,绑定的设备名是否成功等
2)硬件排查,用示波器等实测是否有模组硬件中断
四 so库合成与验证
1)Android M/N 系统重启 fingerprintd 进程,Android O 以上 系统重启 android.hardware.biometrics.fingerprint@2.1-service 进程,可以在平台code里面直接关闭selinux权限(比手动验证更保险),也可以手动关闭setenforce 0,然后参考文档把so库push到对应的路径,验证指纹是否能正常启动,正常录取指纹。
2)手动验证ok,那接下来的就是so库的移植,以及selinux权限的问题。