活动地址:CSDN21天学习挑战赛
坚持写作,记录
…
本周: 2022-08-01——2202-08-07
计划: 完成 Linux设备树和Pinctrl 的学习
注:本篇笔记接上一篇:Linux设备树 01 ———— 内核笔记
因为活动方的大佬给的资料比较细,所以作笔记的时候不想遗落掉资料里面比较好的内容。
kernel会为设备树root节点下所有带’compatible’ 属性的节点都分配并注册一个platform_device
大致过程:
dts->dtb->device_node->platform_devic

Device Tree中的每一个node节点经过kernel处理都会生成一个struct device_node的结构体, struct device_node最终一般会被挂接到具体的struct device结构体。struct device_node结构体描述如下:

验证设备树是否被写入到设备
cd /proc/device-tree


Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。
(1)管理系统中所有的可以控制的pin,在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin。
(2)管理这些pin的复用(Multiplexing)。对于SOC而言,其引脚除了配置成普通的GPIO之外,若干个引脚还可以组成一个pin group,行程特定的功能。pin control subsystem要管理所有的pin group。
(3)配置这些pin的特性。例如使能或关闭引脚上的pull-up、pull-down电阻,配置引脚的driver strength。
在高通、MTK平台上, pinmux管脚复用控制器,是TLMM(Top-Level Mode Multiplexer)顶级模式多路复用控制器
定制名称
默认名称
Client device会通过pinctrl来将pin设置为相应的功能及配置。


默认名称解析
在pinctrl子系统的实现中,借助设备驱动模型中的driver_probe_device接口,当device与driver match后,在driver_probe_device->really_probe的接口中,在调用bus的probe接口之前,通过调用pinctrl_bind_pins接口实现dev与pinctrl子系统的绑定,并完成pin相关的复用与配置操作

定制名称解析
pinctrl_select_state 就是根据我们在 设备树中对 state 的解析配置,
相关 state 中的每一个子节点都被解析成一个 pinctrl_setting,
这些 setting 被统一存放到链表当中,这里被逐个取出判断类型并设置


