输入设备种类很多,有GPIO按键、鼠标、电阻触摸屏、电容触摸屏、USB键盘、遥控手柄等等。 安装它能产生的数据类型,可以分为(前面3项比较容易理解,后面的就属于扩展了):
Linux input子系统,分为三篇文章,第一篇:Linux input子系统的概念,第二篇:Linux input子系统的代码分析(input core),第三篇:Linux input子系统的驱动程序编写。
我们使用HAL库来开发项目,如果框架设计的好的话,在rtos上面代码不需要改动太多。
在此节之前,我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机制、异步通知、同步互斥/非阻塞、定时器去抖动。 其中驱动框架如下: 1)写file_op
什么是input子系统?不管是什么操作系统,都有一个程序是用于管理各种输入设备的,打个比方,生活中使用的电脑键盘、鼠标就是输入设备,小到日常生活中无可避免的智能手机,智能手机上的触摸屏,按键也是输入社备。那么操作系统是怎么管理这些输入设备的呢?这里还是以最常用的操作系统Linux来进行讲解
============= 1.触摸屏原始数据解析 ===================
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
GPIO名为"General Purpose Input/Output",通用目的输入/输出,就是常用的引脚。
触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏的异常分析。
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taobao.com/ (淘宝) https://weidongshan.tmall.com/(天猫)
传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如 pin 功能冲突)。pinctrl 子系统就是为了解决这个问题而引入的,pinctrl 子系统主要工作内容如下:
先来了解什么是输入设备? 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。
一、 问题背景 最近研究了一下Android手机上用户操作的模拟方法, 有一些心得与大家分享下。 之所以去研究Android手机上用户操作的模拟方法,是因为最近做毕业设计,想尝试开发Android的UI自动化测试。最开始使用MonkeyRunner来录制脚本,开发过程中发现在MonkeyRunner上录制时,模拟拖拽的操作不方便。 接着我又尝试自己通过Monkey中的同样的方法进行用户操作的模拟,结果运行的时候出了Injecting to another application requires INJE
该文章介绍了如何通过Linux的配置文件/etc/udev/rules.d/99-com.rules来识别和配置硬件设备,包括触摸板、键盘、鼠标等。作者通过一个实际的例子,展示了如何通过修改/etc/passwd文件来设置用户的UID和GID,以及通过修改/etc/group文件来设置用户的GID。此外,文章还介绍了如何在嵌入式设备中通过移植Linux内核来支持硬件设备的驱动,以及如何在嵌入式设备中使用Qt来开发图形界面应用程序。
这篇文章介绍在Linux下如何编写FT5X06系列芯片驱动,完成触摸屏的驱动开发, FT5X06是一个系列,当前使用的具体型号是FT5206,它是一个电容屏的触摸芯片,内置了8位的单片机(8051内核),完成了坐标换算等很多处理,在通过IIC,SPI方式传递给外部单片机。
linux中input子系统与I2C子系统类似,也被主观分成三部分:输入驱动、输入设备和输入核心。
SPI总线由四根通信线组成,全双工、主从方式串行同步通信,一次传输8bit,高位在前,低位在后。
在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。
所以GPIO、I2C应该是并列的关系,它们能够使用之前,需要设置IOMUX。有时候并不仅仅是设置IOMUX,还要配置引脚,比如上拉、下拉、开漏等等。
本节的触摸屏驱动也是使用之前的输入子系统 1.先来回忆之前第12节分析的输入子系统 其中输入子系统层次如下图所示, 其中事件处理层的函数都是通过input_register_handler()函数注册
参考文档: a. 内核 Documentation\devicetree\bindings\Pinctrl\ 目录下: Pinctrl-bindings.txt
/*输入子系统分析 input.c*/ /*1. 为什么需要输入子系统? 由于我们平时用的输入设备比较杂乱,比较多。 比如: 鼠标,键盘, 触摸屏等。 当我们写驱动的时候都需要注册字符设备文件或者混杂设备文件。所以出现了一种机制。 这种机制就是把各种输入设备定义为input_device。 把处理这种设备的函数定义为input_handler。 这个样以来,程序员只需要操作input_device,而input_handler则是已经为各种设备做好的处理函数了。 这样的好处是对所有的设备进行
继上一篇:https://cloud.tencent.com/developer/article/1054078 一、驱动流程解析: 1、模块加载: 1 static struct of_device_id stk_match_table[] = { 2 { .compatible = "stk,stk3x1x", }, 3 { }, 4 }; 5 6 static struct i2c_driver stk_ps_driver = 7 { 8 .driver =
4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI、低电平有效的从机选择线NSS。
电源管理(Power Management)在 Linux Kernel 中,是一个比较庞大的子系统,涉及到供电(Power Supply)、充电(Charger)、时钟(Clock)、频率(Frequency)、电压(Voltage)、睡眠/唤醒(Suspend/Resume)等方方面面。
要使用pinA来控制LED,首先要通过Pinctrl子系统把它设置为GPIO功能,然后才能设置它为输出引脚、设置它的输出值。
内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,并把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架。
很多同学可能会认为输入系统是不是和View的事件分发有些关联,确实是有些关联,只不过View事件分发只能算是输入系统事件传递的一部分。这个系列讲的输入系统主要是我们不常接触的,但还是需要去了解的那部分。
鸿蒙是一套完整的、普通人可以直接使用的操作系统,跟Windows、安卓、IOS类似。 常见的错误观点是把鸿蒙跟Linux放在一起来对比,这不对:
比如103,就得确定它属于哪一组GPIO,再确定它属于这一组里面的哪一个引脚,所以我们得到了前面两项:group、pin。
学习 I2C 和 SPI 驱动的时候,针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。
要想弄明白世界的本质,就要追根溯源;代码也是一样的道理; 最近调试几个sensor驱动,alps sensor驱动、compass sensor驱动、G-sensor驱动都是一样的架构; 一、基于in
在消费类电子中,功耗是很重要的,甚至项目后期一直在调功耗,看看哪里还可以再省电。由此就有了 Linux 电源管理子系统,该子系统包含很多方面:什么时候可以降帧、什么时候可以关掉其他 CPU core、系统运行时如果某外设很少用需要让它运行时休眠、系统休眠时要保证哪些外设可以唤醒系统。
鸿蒙是一套完整的、普通人可以直接使用的操作系统,跟Windows、安卓、IOS类似。
很多学员有过STM32的学习经验,他们手上的开发板很多,LCD也很多。 一个LCD还挺贵的,不能浪费。 各家的LCD引脚顺序都不一样,所以别家的LCD不能直接接到100ASK_IMX6ULL开发板,需要转接板。 大部分单片机学员都是使用正点原子、野火的板子,有他们的屏。 针对这两家的屏,我们做了转接板,如下:
PCF8591是一个IIC总线接口的ADC/DAC转换芯片,功能比较强大,这篇文章就介绍在Linux系统里如何编写一个PCF8591的驱动,完成ADC数据采集,DAC数据输出。
创龙科技TL570x-EVM是一款基于TI Sitara系列AM5708 ARM Cortex-A15 + 浮点DSP C66x处理器设计的异构多核SoC评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
介绍 Sunxi 平台上 TWI 驱动接口与调试方法,为 TWI 模块开发提供参考。
创龙科技SOM-TL5728F是一款基于TI Sitara系列AM5728(双核ARM Cortex-A15 +浮点双核DSP C66x) + Xilinx Artix-7 FPGA处理器设计的高端异构多核工业级核心板。核心板内部AM5728与Artix-7通过GPMC、I2C通信总线连接,并通过工业级高速B2B连接器引出千兆网口、PCIe、USB 3.0、SATA、GTP等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
vivo是一家28年专注通信行业的科技公司,秉承“本分”价值观专注于通信行业发展,通过不断地实践和科技创新,打造了一系列具有行业里程碑意义的产品,比如Hi-Fi手机,屏幕指纹手机,以及微云台防抖、120W闪充、影像芯片、蓝河操作系统,以及位列全球多个权威榜单的蓝心AI大模型。
Pinctrl驱动由芯片厂家的BSP工程师提供,一般的驱动工程师只需要在设备树里:
在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。驱动模型中的总线可以是真是存在的物理总线(USB总线,I2C总线,PCI总线),也可以是为了驱动模型架构设计出的虚拟总线(Platform总线)。为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型的设备与驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。
创龙科技SOM-TL570x是一款基于TI Sitara系列AM5708 ARM Cortex-A15 + 浮点DSP C66x处理器设计的异构多核SoC工业级核心板。通过工业级B2B连接器引出千兆网口、PCIe、GPMC、USB 3.0等高速通信接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
随着ARM芯片技术的高速更新迭代,越来越多工业应用场景都使用ARM架构实现,ARM既可跑操作系统(Linux、FreeRTOS等)满足复杂应用需求,亦可跑裸机满足高实时等应用需求。由于ARM生态系统十分完善,因此在人机交互、网络通信、文件系统管理方面,有着得天独厚的优势。
为了对多种不同类型的输入设备进行统一的处理,内核在字符设备驱动上抽象出一层,即输入子系统。
I2C(Inter-Integrated Circuit BUS)是I2C BUS简称,中文为集成电路总线,是目前应用最广泛的总线之一。和IMX6ULL有些相关的是,刚好该总线是NXP前身的PHILIPS设计。
领取专属 10元无门槛券
手把手带您无忧上云