Linux gpio 子系统分析之一 系统概述

       从今天开始我们将分析gpio子系统,gpio子系统相对来说比较简单GPIO子系统主要涉及如下内容(开启gpio子系统专栏的介绍,主要为了后面进行led子系统的分析,在led子系统的分析时,我们会借助一个虚拟的gpio控制器驱动说明led-trigger以及gpio-led代码的实现,因涉及虚拟gpio控制器的实现,因此先介绍gpio子系统,以便后续分析led子系统时能更好的说明清除)。

        一、GPIO子系统概述

      二、GPIO子系统相关数据结构以及接口说明

      三、完成一个虚拟GPIO控制器驱动

 

 

 

本章主要介绍GPIO子系统相关的架构以及功能说明。

 

一、GPIO相关知识点说明

      针对gpio控制器芯片而言,包括GPIO方向的设置、GPIO 输出值设置、读取GPIO输入方向的值,若支持GPIO中断,则可以设置GPIO中断配置。

我们首先从GPIO控制器与CPU的关联说起,如下图所示,我们主要画了两种方式的GPIO控制器:

  1. SOC内部提供GPIO控制器,而CPU与GPIO控制器之间通过片内总线通信(如低速片内总线APB实现通信);
  2. 借助IO扩展芯片或者其他外设芯片扩展GPIO,下图主要增加了一个IO扩展芯片扩展GPIO(通过IIC总线)

 

Linux gpio 子系统分析之一 系统概述

 

 

     针对SOC自带的GPIO控制器,一般通过寄存器即可实现对GPIO方向配置、GPIO OUTPUT值的读取与设置、GPIO INPUT引脚值的读取;而针对扩展IO芯片,一般通过低速总线(一般iic总线居多)进行通信设置扩展IO的方向与值的设置与获取。

 

 

二、GPIO子系统的软件架构说明

 

     如下即为GPIO子系统的软件架构,以及和其他内核子系统的关联。下面说明一二:

 

  1. 各GPIO控制器驱动完成与GPIO控制器芯片的通信;
  2. GPIO子系统gpiolib向外层提供通用的操作接口,如gpio_request、gpio_set_value、gpiod_get_value、gpiod_direction_input等;
  3. GPIO子系统进行GPIO控制器的注册时,也在sysfs下创建了该gpio控制器相关的目录及属性文件,提供gpio方向、gpio值获取等属性文件的创建,可通过在sysfs目录下对这些文件进行操作,从而完成了针对gpio的配置(应用程序通过vfs提供的系统调用接口,进而即可调用syfs提供的文件操作接口,即可实现对gpio的操作)

 

 

 

Linux gpio 子系统分析之一 系统概述

 

 

 

    本章主要是简要说明gpio子系统相关的信息,让大家对gpio控制器有一个大致的概念,下一章则介绍gpio子系统的实现,并介绍如何实现一个gpio控制器驱动。