Linux 驱动开发 / gpio子系统 / 快速入门
时间:2021-08-19 15:23:48
[导读]哈喽,我是老吴,我来继续分享我的学习心得啦。gpio和pinctrl子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。本文目录:一、gpio 与 pinctrl二、内核里如何引用 gpio三、gpio 子系统框架四、应用层如...
哈喽,我是老吴,我来继续分享我的学习心得啦。gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。本文目录:点击查看大图 gpio 的作用:点击查看大图 本文的关注点是 gpio driver --> gpio subsystem core -> gpio consumer 这一路径,读者如果想更深入地了解 pinctrl 子系统,可以参考内核文档:Documentation/driver-api/pinctl.rst。gpio 子系统内核文档:Documentation/driver-api/gpio:
注:本文基于 Linux-4.19。
一、gpio 与 pinctrl
二、内核里如何引用 gpio
三、gpio 子系统框架
四、应用层如何访问 gpio
一、gpio 与 pinctrl
本文主要关注 gpio 子系统,但是老吴认为必要先说明一下 pinctrl 子系统和 gpio 子系统的之间关系。pinctrl 的作用:- 引脚复用,例如某个引脚即可用作为普通的gpio,也可以作为UART的TX;
- 引脚配置,一般包括上下拉、驱动能力等;
- 作为输入功能时,支持读引脚值;
- 作为输出功能时,支持输出高低电平;
- 部分 gpio 还负责接收中断;
| 文档 | 简介 |
|---|---|
| index.rst | 文档目录和源码清单 |
| intro.rst | gpio 简介 |
| driver.rst | 描述如何编写 gpio controller driver |
| consumer.rst | 描述 gpio consumer 如何使用 gpio |
| board.rst | 描述设备如何申请 gpio |
| drivers-on-gpio.rst | 列举一些使用了gpio子系统的常见驱动,例如 leds-gpio.c、gpio_keys.c 等 |
| legacy.rst | 描述 legacy gpio 接口 |
二、内核里如何引用 gpio
2 个步骤:
1) 设备树里添加 gpio mappings
示例:foo_device {
compatible = "packt,gpio-descriptor-sample";
led-gpios = < 




