Linux的GPIO子系统驱动框架由三个主要部分组成:① GPIO控制器驱动程序、②gpio lib驱动程序 ③GPIO字符设备驱动程序: 使用gpiochip_add/gpiochip_add_data向系统注册gpio_chip, 这些都是半导体原厂要做的,设备商只需要使用即可。 2.0 gpio控制器源码分析 drivers/gpio/gpio-mxc.c就是 I.MX6ULL的 GPIO 控制器驱动...
gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。 本文目录: 代码语言:javascript 复制 一、gpio 与 pinctrl 二、内核里如何引用 gpio 三、gpio 子系统框架四、应用层如何访问 gpio 一、gpio 与 pinctrl 本文主要关注 gpio 子系统...
属性<function>-gpios里的<function>由使用者自行决定的, 例如上述例子中的<function>为 led,在 gpio consumer driver 里可以通过 "led" 这个字符串,配合偏移值来获取这一组 gpio 里的任一 gpio。 至于如何标志是硬件上的哪一个引脚,是由平台相关的 gpio controller driver 的设备树节点里的#gpio-cells的值来...
gpio_chip抽象了关于GPIO执行申请、释放、方向设置、IO电平输出等接口,特定SoC芯片的GPIO控制器驱动程序需要实现这些接口,从而使设备驱动程序可以正常使用gpio; 3.12.0版本之后,社区对于GPIO子系统进行了重构,内核对于gpio的管理从基于gpio num的方式,修改为基于“opaque handlers”的方式,下面是gpiolib重构时代码提交信息:...
对于给定的电路板,每个GPIO都用于某个特定的目的,如监控 MMC/SD 卡的插入/移除、检测卡的写保护状态、驱动 LED、配置收发器、模拟串行总线、复位硬件看门狗、感知开关状态等等。 1.2 GPIO子系统框架 在linux内核中,要想使用GPIO口,首先就要了解gpiolib,linux内核对GPIO资源进行了抽象,抽象出来的概念就是gpiolib。
Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的 ...
我更倾向使用GPIO系统这个名字来代替GPIO driver这个名字,GPIO driver仅仅包含了pin signal状态控制和读取的内容,而GPIO系统包括了pin multiplexing、pin configuration、GPIO control、GPIO interrupt control等内容。本文主要是以3.14内核作为例子,讲述linux kernel中GPIO系统的软件框架。
注: 所有文章基于linux-3.13以上,本系列主要介绍 GPIO的一些基本知识,驱动操作GPIO的接口,应用层通过sysfs操作GPIO的接口,GPIO一些debug信息查看,以及对高通相关GPIO的寄存器操作。分享给刚刚接触外设bsp的小伙伴们。当然后面有时间还会分享GPIO子系统框架和pinctrl子系统框架,先知道黑盒怎么使用,然后咱再打开仔细瞅瞅。
(具体原因看下面这篇文章) Linux 驱动挂载顺序分析 gpio 可以看出其实两者软件框架一样的,主要是 HW Abstract layer 具体实现不一样。 你以为两者是分离的,实际上不是的,gpio 子系统是基于 pinctrl 子系统的,gpio 的 API 接口的实现很多都是基于 pinctrl子系统的函数。