1. Linux GPIO子系统框架
Linux子系统总共可分为三层:物理硬件层
、硬件驱动层
和硬件驱动抽象层
如下图:(借鉴的图)
分层 | 作用或者含义 |
---|---|
物理硬件层 | 一般会描述各个GPIO控制器,将各个引脚以GPIO号做区分 |
硬件驱动层 | 由芯片厂家根据物理硬件层的特性,将GPIO的特性划分出来,留给驱动抽象层对接 |
驱动抽象层 | 与芯片和平台无关,由用户调用接口向底层注册,达到使用效果 |
2. gpio描述抽象结构体
2.1 gpio_desc
gpio描述
路径:kernel/drivers/gpio/gpiolib.h
该结构体记录各个GPIO的描述符,即对应左下方的gpio_desc结构体,其中gpio_chip指向硬件层的GPIO,flags为一标志位,用来指示当前GPIO是否已经占用,当用gpio_request申请GPIO资源时,flags位就会置位,当调用gpio_free释放GPIO资源时,flags就会清零。label是一个字符