记一次通过udev自动加在i2c接口触摸驱动过程

背景

       触摸屏作为人机交互的关键设备之一,其稳定性对设备的使用至关重要,通常触摸屏的驱动会编进内核中,但是这会导致一个问题,如果触摸芯片概率性工作不正常会导致触摸驱动加载失败,影响设备的使用,所以需要将触摸驱动改成以模块的形式加载,那又引出另外一个问题:如何在开机之后加载触摸驱动?

开机后自动加载驱动的方式无非就是两种:

1、通过脚本加载

        通过脚本加载有一个好处就是可定制化强,不依赖特定的策略和规则,例如,

  • 如果触摸驱动加载失败可以通过脚本控制重复加载
  • 如果在设备使用过程中触摸失灵,可以通过脚本控制触摸驱动重新加载
  • 等等,其他情况
2、通过udev加载
      使用udev的方式加载,从项目整体视角来看有益于标准化,减少重复造轮子,

本次调试的触摸芯片为: ili2131,触摸驱动的版本为:ilitek_limv5_9_0_2

修改内核配置,生成内核驱动模块,为了快速验证,直接修改Makefile:

//修改前
ccflags-y += -Wall
obj-y += ilitek.o

ilitek-y +=     ilitek_main.o \
        ilitek_platform_init.o \
        ilitek_update.o \
        ilitek_tool.o \
        ilitek_protocol.o \
        ilitek_mp.o


//修改后
ccflags-y += -Wall
obj-m += ilitek.o

ilitek-y +=     ilitek_main.o \
        ilitek_platform_init.o \
        ilitek_update.o \
        ilitek_tool.o \
        ilitek_protocol.o \
        ilitek_mp.o

根据设备树配置修改udev规则,设备树配置 i2c 第三通道 地址 0x41 :

/* touch */
&i2c3 {
        clock_frequency = <400000>;
        pinctrl-names = "default";
        status = "okay";

         ili2131: ili2131@41 { 
        compatible = "tchip,ilitek"; 
        reg = <0x41>; 
        pinctrl-names = "default";
        pinctrl-0 = <&ilitek_ili2131_pins>;

        interrupt-parent = <&gpio4>; 
        interrupts = <1 IRQ_TYPE_EDGE_FALLING>; 
        ilitek,irq-gpio = <&gpio4 1 IRQ_TYPE_EDGE_FALLING>; 
        ilitek,reset-gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>; 
        ilitek,name = "ilitek_i2c"; 


        touchscreen-swapped-x-y;
        touchscreen-revert-y;
        touchscreen-lcm-resolution;

        touchscreen-lcm-resolution-x = <800>;
        touchscreen-lcm-resolution-y = <1280>;


        }; 
};

udev动态加载规则文件:/lib/udev/rules.d/80-drivers.rules

//修改前
root@myd-imx8mm:/lib/udev/rules.d# cat 80-drivers.rules
# do not edit this file, it will be overwritten on update

ACTION!="add", GOTO="drivers_end"

ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}"
SUBSYSTEM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值