mtk 驱动(55)---mtk指纹移植
mtk指纹移植
1. 硬件连接
看原理图可知,指纹芯片有六个只要功能引脚,POWER, RST, MI, MO,CLK, EINT,再dws中将spi的四个引脚和中断脚配置好,mt6753只有一组spi即spi0,65-68脚。
2.软件代码
(1) 拿到代码后将代码放在alps\kernel-3.18\drivers\input\fingerprint文件夹,如果没有此文件夹,新建fingerprint,并解决编译中出现的各种错误
这里出现了几个错误,都是头文件引用找不到的问题,再makefile中将索要包含的头文件目录指定一下就可以解决
ccflags-y +=-I$(srctree)/drivers/spi/mediatek/$(MTK_PLATFORM)
ccflags-y +=-I$(srctree)/drivers/misc/mediatek/include
ccflags-y +=-I$(srctree)/drivers/misc/mediatek/include/mt-plat
ccflags-y+=-I$(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include
ccflags-y+=-I$(srctree)/drivers/misc/mediatek/mach/mt6735/magc6753_65u_1_m0/dct/dct/
ccflags-y += -I$(srctree)/drivers/spi/mediatek/mt6735/
ccflags-y += -DMT6735
其他头文件未包含错误,可通过搜索将函数所在的.h文件找到并在C文件中include
将驱动中的spi总线号写为0,否则无法加载spi驱动
(2) 将库文件替换alps\out\target\product\magc6753_65u_1_m0\system\lib64\hw\fingerprint.default.so
在.fc_spi.c中将char* uevent_env_str[2] = {"FC909_STATE=WAKEUP", NULL};
改为char* uevent_env_str[2] = {"FC909_STATE=WAKEUP", NULL};
因为库里面写的节点是jmt101,指纹模块启动后会通过库去度这个字段,匹配之后才能开始采集数据
(3)在alps\device\mediatek\mt6735\device.mk中加入PRODUCT_PACKAGES +=fingerprintd
可自动编译至system/bin目录下
(4)解决完编译问题后配置dts和dtsi文件,由于mt6753只有一组spi0,所以dtsi文件里面我们最多只能配一组,通过查看代码后发现,spi0平台驱动挂载会在指纹驱动初始化的时候自动加载, dts里每一个&后面的节点再dtsi里面都要对应定义
/* fingerprint start */
&fc909{
debounce = <86 0>;
pinctrl-names="finger_rst_low","finger_rst_high","default";
pinctrl-0 = <&finger_rst_low>;
pinctrl-1 = <&finger_rst_high>;
pinctrl-2 = <&finger_pins_default>;
status = "okay";
};
&pio {
finger_rst_low: finger_rst_low@gpio83 {
pins_cmd_dat {
pins = <PINMUX_GPIO83__FUNC_GPIO83>;
slew-rate = <1>;
bias-disable;
output-low;
};
};
finger_rst_high: finger_rst_high@gpio83 {
pins_cmd_dat {
pins = <PINMUX_GPIO83__FUNC_GPIO83>;
slew-rate = <1>;
bias-disable;
output-high;
};
};
finger_pins_default:fp_pins_default{
pins_cmd_dat {
pins = <PINMUX_GPIO83__FUNC_GPIO83>;
slew-rate = <1>;
bias-disable;
output-high;
};
};
};
(5)dts设置完成之后,可通过adb shell 查看相关节点
与dtsi中 spi0:spi@1100a000{
compatible= "mediatek,mt6753-spi";
cell-index= <0>;
spi-padmacro= <0>;
reg= <0x1100a000 0x1000>;
interrupts= <GIC_SPI 118 IRQ_TYPE_LEVEL_LOW>;
};相对应
Fc-input指纹节点
adb shell"cat /sys/devices/virtual/misc/mtgpio/pin"
第一位均为1说明gpio在spi状态,如果不在spi状态有可能dts里io被复用发生冲突了同时也可改变gpio状态
Tochange GPIO status:
adb shell "echo \"-w=99:0 1 0 0 0 1 0\">/sys/devices/virtual/misc/mtgpio/pin"
每行分别对应:
IO编号: 模式,输入上拉选择,输入值,输出值,输入上拉使能,方向,输入翻转
指纹模块的中断注册以及申请在dtsi和dws中设置,修改为如下方式注册
然后再dtsi中设置
到此spi驱动基本调通,可关闭selinux用代理商提供的apk进行指纹录入识别测试
(6)selinux相关权限及库设置adb shell "cat /proc/kmsg | grep avc" >avc_log.txt
selinux权限:
1、/device/mediatek/common/sepolicy/device.te
+ type jmt101_device,dev_type;
2、/device/mediatek/common/sepolicy/file_contexts
+ /dev/ jmt101 u:object_r: jmt101_device:s0
3、/device/mediatek/common/sepolicy/platform_app.te
+ allow platform_app jmt101_device:chr_file{openread write ioctl};
4、/device/mediatek/common/sepolicy/radio.te
+ allow radio jmt101_device:chr_file{openread write ioctl};
5、/device/mediatek/common/sepolicy/system_app.te
+ allow system_app jmt101_device:chr_file{openread write ioctl};
6、/device/mediatek/common/sepolicy/untrusted_app.te
+ allow untrusted_app jmt101_device:chr_filerw_file_perms;
7、/device/mediatek/mt6735/init.mt6735.rc
+ chown system system/dev/jmt101
chmod 0666 /dev/jmt101
service fingerprintd /system/bin/fingerprintd
class late_start
user system
8、device/mediatek/mt6735/ueventd.mt6735.rc
/dev/fc909 0666 system system
9.Z:\heqian\53_m_base\alps\external\sepolicy\fingerprintd.te
allow fingerprintdpermission_service:service_manager find;
allow fingerprintdself:netlink_kobject_uevent_socket {create bind read write};
allow fingerprintd jmt101_device:chr_file{open read write ioctl};
selinux权限添加说明
[ 275.373172] (1)[253:logd.auditd]type=1400audit(1262304448.940:180): avc:denied { create }for pid=3886comm="fingerprintd" scontext=u:r:fingerprintd:s0 tcontext=u:r:fingerprintd:s0tclass=netlink_kobject_uevent_socket permissive=0
scontext=u:r:fingerprintd 这个r:后面代表是哪个进程缺少权限
tcontext=u:r:fingerprintd 这个r:代表那个节点缺少权限
如果scontext=u:r: 和tcontext=u:r:后的名字相同,进程后面要写self
像这样allowfingerprintd self:netlink_kobject_uevent_socket {create bind read write};
tclass=netlink_kobject_uevent_socket “tclass”后面节点的文件类型
denied { create }大括号里面表示缺少什么权限,如果还缺说明权限,可根据avc log进行添加
权限设置完之后可在Z:\heqian\53_m_base\alps\out\target\product\magc6753_65u_1_m0\obj\ETC\sepolicy_intermediates\policy.conf中查看
(7)fingerprintd服务的开启
查看服务状态 ps | grep system/bin/ fingerprintd
有id说明服务已经开启,如果没有开启可手动开启服务验证“fingerprintd &”表示后台运行,开启服务后可在设置-安全-指纹中录入指纹
https://blog.csdn.net/baidu_38411100/article/details/78782799
mtk 驱动(55)---mtk指纹移植相关推荐
- MTK 驱动(69)---MTK平台 电池驱动相关
MTK平台 电池驱动相关 MTK平台 电池驱动 一.相关代码路径(mt6755/Android6.0) alps/kernel-3.18/drivers/misc/mediatek/include/m ...
- MTK 驱动(64)---Mtk touch panel驱动/TP驱动详解
Mtk touch panel驱动/TP驱动详解 TP还算是比LCM好理解的多. 在启动过程中,先注册/mediatek/custom/command/kernel/touchpanel目录下的具体驱 ...
- MTK 驱动(100)---GPS调试宝典
GPS 基本知识 Ø 1.1)GPS定位和网络定位有什么不同? GPS定位是需要卫星参与的,设备借助搜到的卫星讯号,来计算出来设备的位置. 网络定位是指利用基站.WIFI MAC,获取一个粗略的位置 ...
- 详解关于MTK驱动开发学习教程
MTK驱动开发学习教程是本文要介绍的内容,主要是来了解MTK的驱动开发的过程,文章中很详细的讲解了这个问题,具体内容来看本文详解. 一.Charge Parameters. 1.相关文件chr_par ...
- MTK驱动(53)---平台DTS文件匹配过程
MTK平台DTS文件匹配过程 1. lk中platform paramter lk阶段会从boot image 解析出dtb数据,然后通过atag方式将dtb数据传递给了内核. 在mtk平台lk ...
- 高通SM4350平台指纹移植流程
本文总结了高通sm4350平台指纹移植流程,厂家一般会提供移植文档,本文档可作为补充: 准备工作: 1.把指纹模组扣到主板上的SPI连接器上 2.高通sm4350平台,Android R版本全代码,全 ...
- 高通sm4350平台指纹移植
本文总结了高通sm4350平台指纹移植流程,厂家一般会提供移植文档,本文档可作为补充: 准备工作: 1.把指纹模组扣到主板上的SPI连接器上 2.高通sm4350平台,Android R版本全代码,全 ...
- 一牛网:MTK芯片大全,MTK资料下载,MTK开发工具
一牛网 MTK芯片资料分类(2G,3G,4GWIFI,平板,射频,路由器,穿戴等芯片) 为大家分享一篇集锦资料,方便大家学习,下载,分享. MTK资料下载:http://bbs.16rd.com/ci ...
- 51驱动AS608光学指纹识别模块 12864显示
51驱动AS608光学指纹识别模块 12864显示 AS608光学指纹识别模块 模块工作原理 1.指纹特征 2.指纹处理 模块参数 引脚说明 实验程序 硬件设备和接线 程序讲解 按键 主函数 实验步骤 ...
最新文章
- JavaScript如何声明对象、函数以及对象中的函数(即方法)
- CentOS7下Firewall 开放指定端口
- 双开虚拟机(一个是克隆的)网卡起不来...启动网卡报错..
- 数据库建模模板、菜单显示出问题解决方案
- 爬取某一微博用户所有文本文件或者是视频图片文件
- java的mock测试框架
- 单例模式-3.透明的单例模式
- 多个ip对应的是同一个mac_Python3+Scapy安装使用 + 查询本机对应网卡,IP,MAC代码...
- FreeSurfer Tutorial Datasets训练数据配置
- 亚马逊、Facebook、Google 等科技公司为何越来越难招到人了?
- 十六进制高低位转换,返回十进制数
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- http之httpClient工具类
- ASP.NET人力资源管理系统源码大型HR源码
- 【今日头条测试开发笔试】部分题目总结
- ic 卡获取帐号apdu指令_发送获取银行卡卡号的APDU命令
- 计算机目录排版的文章,自动生成目录,论文排版看这一篇就够了
- 风袖第一阶段小程序wx.request封装
- 昨天发现的一些ip黑名单
- 【Android App】二维码的讲解及生成属于自己的二维码实战(附源码和演示 超详细必看)
热门文章
- 数值计算方法(五)——迭代法求方程根
- 数字图像处理(四)——图像编码技术(一)
- 风险评估资产重要性识别_什么是风险分析,如何识别和评估风险?
- java实验检查危险品代码_2019JAVA第六次实验报告
- 《深入理解 Spring Cloud 与微服务构建》第七章 负载均衡 Ribbon
- 64位内核开发第14将,路径的相互转换以及获取.
- Python day13文件的读写
- java并发(3)ThreadLocal的使用及实现原理(实现原理)
- 词根 sent/sens
- Android Studio 复制粘贴图片到drawable文件夹没有效果 - 解决方法