Linux设备树 02 ———— 内核笔记

活动地址:CSDN21天学习挑战赛

坚持写作,记录

本周: 2022-08-01——2202-08-07
计划: 完成 Linux设备树和Pinctrl 的学习

注:本篇笔记接上一篇:Linux设备树 01 ———— 内核笔记
因为活动方的大佬给的资料比较细,所以作笔记的时候不想遗落掉资料里面比较好的内容。

Linux设备树和Pinctrl

    • 一、Linux设备树
      • 1.4 Linux设备树的解析
      • 1.5 Linux设备树的调试
    • 二、Pinctrl概述
      • 2.1 Linux Pinctrl子系统提供的功能:
      • 2.1 Pinctrl 的使用
        • Pinctrl调试:

一、Linux设备树

1.4 Linux设备树的解析

kernel会为设备树root节点下所有带’compatible’ 属性的节点都分配并注册一个platform_device

大致过程:

dts->dtb->device_node->platform_devic

Linux设备树 02 ———— 内核笔记_第1张图片
Device Tree中的每一个node节点经过kernel处理都会生成一个struct device_node的结构体, struct device_node最终一般会被挂接到具体的struct device结构体。struct device_node结构体描述如下:

Linux设备树 02 ———— 内核笔记_第2张图片

1.5 Linux设备树的调试

验证设备树是否被写入到设备
cd /proc/device-tree
Linux设备树 02 ———— 内核笔记_第3张图片
Linux设备树 02 ———— 内核笔记_第4张图片

二、Pinctrl概述

Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。

2.1 Linux Pinctrl子系统提供的功能:

(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)顶级模式多路复用控制器

2.1 Pinctrl 的使用

定制名称
默认名称

Client device会通过pinctrl来将pin设置为相应的功能及配置。
Linux设备树 02 ———— 内核笔记_第5张图片
Linux设备树 02 ———— 内核笔记_第6张图片

默认名称解析

在pinctrl子系统的实现中,借助设备驱动模型中的driver_probe_device接口,当device与driver match后,在driver_probe_device->really_probe的接口中,在调用bus的probe接口之前,通过调用pinctrl_bind_pins接口实现dev与pinctrl子系统的绑定,并完成pin相关的复用与配置操作
Linux设备树 02 ———— 内核笔记_第7张图片

定制名称解析

pinctrl_select_state 就是根据我们在 设备树中对 state 的解析配置,
相关 state 中的每一个子节点都被解析成一个 pinctrl_setting,
这些 setting 被统一存放到链表当中,这里被逐个取出判断类型并设置
Linux设备树 02 ———— 内核笔记_第8张图片

Pinctrl调试:

Linux设备树 02 ———— 内核笔记_第9张图片

Linux设备树 02 ———— 内核笔记_第10张图片

你可能感兴趣的:(专题学习,linux,设备树,prictrl)