mtk驱动(55)---mtk指纹移植

mtk驱动(55)---mtk指纹移植
mtk指纹移植
1.      硬件连接
看原理图可知,指纹芯⽚有六个只要功能引脚,POWER, RST, MI, MO,CLK, EINT,再dws中将spi的四个引脚和中断脚配置好,mt6753只有⼀组spi即spi0,65-68脚。
7-adca2.软件代码
(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"444gggg
每⾏分别对应:
IO编号: 模式,输⼊上拉选择,输⼊值,输出值,输⼊上拉使能,⽅向,输⼊翻转
指纹模块的中断注册以及申请在dtsi和dws中设置,修改为如下⽅式注册
然后再dtsi中设置
到此spi驱动基本调通,可关闭selinux⽤代理商提供的apk进⾏指纹录⼊识别测试
(6)selinux相关权限及库设置adb shell "cat /proc/kmsg | grep avc" >
selinux权限:
1、/device/mediatek/common/
+ 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/
+ allow platform_app jmt101_device:chr_file{openread write ioctl};
4、/device/mediatek/common/
+ allow radio jmt101_device:chr_file{openread write ioctl};
5、/device/mediatek/common/sepolicy/
+ allow system_app jmt101_device:chr_file{openread write ioctl};
6、/device/mediatek/common/sepolicy/
+ allow untrusted_app jmt101_device:chr_filerw_file_perms;
7、/device/mediatek/
+ chown system system/dev/jmt101
chmod 0666 /dev/jmt101
service fingerprintd /system/bin/fingerprintd
class late_start
user system
8、device/mediatek/
/dev/fc909  0666  system    system
9.Z:\heqian\53_m_base\alps\external\
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_f中查看(7)fingerprintd服务的开启
查看服务状态 ps | grep  system/bin/ fingerprintd
有id说明服务已经开启,如果没有开启可⼿动开启服务验证“fingerprintd &”表⽰后台运⾏,开启服务后可在设置-安全-指纹中录⼊指纹

本文发布于:2024-09-22 05:29:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/235083.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指纹   驱动   开启   权限   代码   服务   上拉   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议