本节介绍在Pinctrl子系统中,将会学习哪些内容。
Pinctrl作用
Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的。
一个芯片有成百上千个引脚,这些引用要怎么配置,配置成什么功能,都是通Pinctrl子系统来实现的。
如下图所示,对于一个芯片,有很多个控制器,比如GPIO控制器,I2C控制器,UART控制器,这些控制器都需要操作到引脚。但是不同的控制器,他们需要的引脚配置通常也不同。
要如何实现不同引脚的配置的,就可以使用Pinctrl子系统来配置。
Pinctrl有三大功能:
- 引脚的枚举与命名(Enumerating and naming)
枚举:列出芯片有哪些引脚
命名:各个引脚的名字叫什么 - 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能
- 引脚配置(Configuration):比如上拉、下拉、open drain、驱动强度等
实际上,在芯片内部并没有一个硬件Pinctrl——引脚控制器,但引脚控制器也并不完全是一个软件上的东西,他的背后是有硬件支持的。
首先,引脚控制器是有对应驱动的,芯片引脚控制器的驱动代码,通常是由芯片原厂提供的,是由原厂的BSP工程师编写的,一般的驱动工程师只需要使用就可以了。
通常是在设备树中使用:
- 指明使用哪些引脚
- 指明复用为哪些功能
- 配置为哪些状态
在一般的设备驱动程序中,甚至可以没有Pinctrl的代码。
后续内容
简单的说,后续需要掌握的内容如下:
- Pinctrl驱动程序如何编写,里面的重要结构体是怎么样的
- 分析如何在设备树中使用Pinctrl
- 驱动程序和设备树中的配置是如何联系到一起的,设备树中的配置是如何生效的,很明显内核会帮忙我们调用对应Pinctrl子系统中的代码,我们需要知道是如何实现的,要去分析这个过程
那么,要如何学习这些内容:
- 基于使用的角度驱动工程师要掌握的Pinctrl重要概念
- Pinctrl子系统使用示例
-
主要数据结构与调试方法
-
pincontroller的数据结构构造过程情景分析(会拆分为很多节)
-
根据开发板的设备树信息动态地演示
-
-
client端的数据结构构造过程情景分析(会拆分为很多节)
-
根据开发板的设备树信息动态地演示
-
-
编写一个虚拟的pincontroller驱动程序
其中,1-2主要是说明如何使用(use)Pinctrl子系统;
3-4主要是说明Pinctrl子系统的实现,先说明主要的数据结构,然后根据实际的开发板来动态的演示,跟踪数据结构的构造过程,我们理解这了些数据结构怎么构成,对这个部分的实现也就基本了解了;
5主要是看看设备树中的信息,怎么和Pinctrl子系统产生联系,我们需要来分析这个过程,这个过程同样会设涉及一些数据结构,类似的,我们理解这了些数据结构怎么构成,对这个部分的实现也就基本了解了;
6主要是编写一个虚拟的pincontroller驱动程序,用来加深我们的理解。