第二十四讲 Linux串口实验
一、串口驱动框架
两个重要的结构体uart_port和uart_driver:
uart_driver需要驱动编写人员实现,并使用uart_register_driver注册到内核,卸载驱动的时候,使用uart_unregister_driver卸载。
uart_port用于描述一个具体的串口端口,驱动编写人员需要实现uart_port,然后使用uart_add_one_port函数向内核添加一个uart端口,卸载的时候uart_remove_one_port卸载。
uart_port里面有个非常重要的成员变量uart_ops,此结构体包含了针对uart端口进行的所有操作,需要驱动编写人员实现!
串口驱动是和TTY结合起来的。
NXP官方串口驱动入口函数为imx_serial_init,此函数会调用uart_register_driver先先内核注册uart_driver,为imx_reg。
为什么I.MX6ULL的串口为/dev/ttymxc0,1。因为uart_driver的dev_name来确定的。
接下来就是uart_port的处理,NXP自定义了一个imx_port,里面包含uart_port。
uart_ops为imx_pops。
串口接收中断处理函数imx_rxint获取到串口接收到的数据,然后使用tty_insert_flip_char将其放到tty里面。
二、驱动编写与测试
1、修改设备树,添加IO相关信息
2、修改设备树,使能对应的串口
三、minicom移植
Linux下的软件移植,基本都是自己编译源码,步骤都是配置,然后编译,安装
注意:
配置的时候会设置—prefix参数,也就是我们最终安装的位置,如果不设置的话就是默认安装位置。将编译出来的库要放到开发板里面去,
第二十五讲 Linux多点电容触摸屏实验
一、多点电容触摸屏驱动框架
1、电容触摸屏,上报多点触摸信息,通过触摸芯片,比如FT5426,这是一个IIC。多点电容触摸屏本质是IIC驱动。
2、触摸IC一般都是有INT,当检测到触摸信息以后就会触发中断,那么就要在中断处理函数里面读取触摸点信息。
3、得到触摸点信息,linux系统如何使用,input设备,linux系统下有触摸屏上报的流程,涉及到input子系统下触摸信息的上报。
2、触摸协议分为:TypeA和TypeB
TypeA:一股脑全部上报所有触摸点信息,系统去甄别这些信息属于哪个触摸点的。上报方式:
ABS_MT_POSITION_X x[0] //第一个点X轴坐标,ABS_MT_POSITION_X, 使用input_report_abs
ABS_MT_POSITION_Y y[0] //第一个点Y轴坐标,ABS_MT_POSITION_Y,
SYN_MT_REPORT //点与点之间使用SYN_MT_REPORT隔离,使用input_mt_sync
ABS_MT_POSITION_X x[1] //第二个点X轴坐标,ABS_MT_POSITION_X,
ABS_MT_POSITION_Y y[1]
SYN_MT_REPORT
SYN_REPORT //所有点发送完成以后,input_sync
TypeB:适用于触摸芯片有硬件追踪能力的,TypeB使用slot来区分触摸点,slot使用ABS_MT_TRACKING_ID来增加、删除,替换一个触摸点信息。
ABS_MT_SLOT 0 //表示要上报第一个触摸点信息
ABS_MT_TRACKING_ID 45 //通过调用input_mt_report_slot_state。
ABS_MT_POSITION_X x[0] //
ABS_MT_POSITION_Y y[0]
ABS_MT_SLOT 1 //第二个触摸点,使用input_mt_slot。
ABS_MT_TRACKING_ID 46 //input_mt_report_slot_state
ABS_MT_POSITION_X x[1]
ABS_MT_POSITION_Y y[1]
SYN_REPORT //所有点发送完成以后,input_sync
上报触摸信息是通过不同的事件来上报的:ABS_MT_XXX
二、驱动编写与测试
1、驱动主框架是IIC设备,会用到中断,在中断处理函数里面上报触摸点信息,要用到inuput子系统框架,
2、设备树IO修改,IIC节点添加:
INT -> GPIO1_IO09 GPIO
RST -> SNVS_TAMPER9 GPIO
I2C_SDA -> UART5_RXD
I2C_SCL -> UART5_RXD
3、在I2C2节点下添加ft5426
/* zuozhongkai 7寸FT5426 */
ft5426:ft5426@38 {
compatible = "edt,edt-ft5426";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_tsc
&pinctrl_tsc_reset>;
interrupt-parent = <&gpio1>;
interrupts=<9 0>;
reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
status = "okay";
};
1、主题I2C框架准备好
2、复位引脚和中断引脚,包括中断
3、初始化FT5426。
4、input子系统框架
5、在中断服务函数里面读取触摸坐标值,然后上报给系统
三、tslib移植