赞
踩
gpio子系统是linux内核当中用于管理GPIO 资源的一套系统,它提供了很多GPIO相关的API接口。设备驱动程序中使用GPIO之前需要向gpio子系统申请,申请成功之后才可以使用,例如设置GPIO的输入、输出方向,设置GPIO输出高或低电平、读取GPIO输入电平等等。
gpio子系统的主要目的就是方便驱动开发者使用gpio,驱动开发者在设备树中添加gpio相关信息,然后就可以在驱动程序中使用gpio子系统提供的API函数来操作GPIO,Linux 内核向驱动开发者屏蔽掉了GPIO的设置过程,极大的方便了驱动开发者使用GPIO。
Linux内核针对PIN的(复用)配置推出了pinctrl子系统,对于GPIO的配置推出了gpio子系统,所以说到这里就知道了,pinctrl子系统是内核中专门用于管理、配置PIN的一套子系统。
配置PIN的复用功能和电器特性也是通过控制硬件寄存器来实现的,所以 pinctrl子系统最终也是如此。有gpio驱动程序,那必然也有pinctrl驱动程序,pinctrl驱动程序中实现了PIN的配置方法并,并注册到pinctrl子系统,所以pinctrl驱动程序就负责实现配置PIN的底层代码(主要就是寄存器控制),并注册到内核pinctrl子系统中由pinctrl子系统进行统一管理。
在内核源码drivers/pinctrl目录下有很多的 pinctrl-xxx.c文件,它们都是不同SoC所对应的pinctrl驱动程序源文件,例如对于 ZYNQ来说,pinctrl-zynq.c就是它的pinctrl驱动程序文件。
对于ZYNQ来说,我们使用了vivado图形化完成了对PIN的配置并在fsbl阶段将配置信息写入了硬件寄存器中,所以不需要在内核阶段进行配置。
input就是输入的意思,因此input子系统就是管理输入的子系统,所以input子系统就是输入类设备对应的驱动框架,和pinctrl和 gpio子系统一样,都是Linux内核针对某一类设备而创建的驱动框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。为此input子系统分为input驱动层、input核心层、input事件处理层,最终给用户空间提供可访问的设备节点,input子系统框架如图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。