您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux regulator子系统分析之二 从数据结构理解系统实现

时间:2020-06-26 11:59:57  来源:  作者:

 

针对linux 内核各子系统学习而言,在理解了各子系统的实现背景后,再从数据结构入手,可快速理解其子系统的实现流程。因此本章我们从regulator子系统的数据结构入手,从而理解regulator子系统的实现。本章的提纲如下:

一、数据结构间的关联说明

 

二、各数据结构介绍

 

一、数据结构间的关联说明

在上一章中,我们说明针对regulator子系统,包括regulator device(电源提供者)、电源管理芯片(pmic)、电源使用者(consumer)、电源域等几个概念。而在regulator子系统的实现中,则抽象了数据结构regulator_device(表示一个regulator device)、regulator(对应一个电源使用者 consumer),然后围绕这两个数据结构,又定义了regulator_map、regulator_enable_gpio、regulator_desc、regulator_ops、regulator_constraints、regulator_config、regulator_init_data、regulator_consumer_supply等数据结构。稍后我们一一展开说明。

 

如下图所示,表示数据结构struct regulator_map、struct regulator、struct regulator_dev的关联图,下面我们详细说明下这张图的意义:

  1. 系统中所有注册的struct regulator_dev类型的变量,均会添加到链表regulator_list中,而这些操作由接口regulator_register实现。
  2. 在regulator_register接口中,针对一个regulator device的所有使用者,均为其创建struct regulator_map类型变量,并将其插入regulator_map_list链表上,而struct regulator_map中包含该使用者的名称(使用者对应的设备名称、使用类型、regulator_dev类型的指针指向该电源的提供者);
  3. 当电源的使用者(对应的device驱动)在驱动接口中调用regulator_get,申请一个电源使用信息时,则根据该设备的名称、supply名称,在regulator_map_list上查找对应struct regulator_map类型的变量,并创建struct regulator类型的变量,并将其加入到struct regulator_dev的consumer_list链表中,从而实现下图struct regulator、struct regulator_dev的关联(它们之间的关联,需要借助注册在regulator_map_list链表的regulator_map类型变量)。
  4. 若该regulator_dev通过gpio进行enable/disable的控制,则在调用接口regulator_register接口进行regulator_dev的注册时,则创建对应struct regulator_enable_gpio类型变量的创建,并注册到链表regulator_ena_gpio_list中。

下图的数据结构间的关联主要借助接口regulator_register、regulator_get实现。而在regulator_register接口中实现regulator_dev、regulator_map的关联时,还涉及数据结构regulator_enable_gpio、regulator_desc、regulator_ops、regulator_constraints、regulator_config、regulator_init_data、regulator_consumer_supply的关联(这在数据结构regulator_dev中说明)

 

Linux regulator子系统分析之二 从数据结构理解系统实现

 

二、各数据结构介绍

 

本章主要介绍数据结构regulator_dev、regulator_map、regulator等数据结构

 

regulator_dev相关数据结构说明

struct regulator_dev包含多个数据结构,因此我们将这几个数据结构间的关联进行说明。如下图所示即为regulator_dev相关的数据结构的关联图。

struct regulator_config相关数据结构

struct regulator_config相关数据结构主要用于描述regulator_dev的所有使用者信息,以及该regulator_dev的输出参数信息,具体说明如下:

  1. struct regulator_consumer_supply表示一个regulator_dev的使用者描述,包含使用者对应的设备名称(也可为空)、supply名称,通过这些描述信息,在调用接口regulator_register接口进行regulator_dev的注册时,则根据该数据结构描述的信息,完成上面所说的struct regulator_map类型变量的注册,以便调用regulator_get时可实现struct regulator类型变量的创建;
  2. 若该regulator_dev通过gpio进行enable/disable的控制,则需要对该gpio进行描述(包含gpio号、gpio使能状态、gpio状态是否为invert等),在调用接口regulator_register接口进行regulator_dev的注册时,则创建对应struct regulator_enable_gpio类型变量的创建,并注册到链表regulator_ena_gpio_list中。
  3. 数据结构struct regulation_constraints描述该regulator dev相关的配置信息,包括最小输出电压、最大输出电压、初始模式、是否支持suspend state(suspend to memory、suspend to disk、suspend standby状态等)

 

struct regulator_desc相关数据结构

主要涉及struct regulator_desc、struct regulator_ops,具体说明如下:

  1. struct regulator_desc描述该regulator device的类型(电压、电流、电流和电压)、中断id、支持的输出电压个数、操作类型(可改变电压等)、输出模式(fast、normal、idle、standby等);若该regulator device在注册的时候支持通过regmap进行配置(如该regulator device可通过spi、iic接口访问,则可以通过spi/iic对应的regmap接口访问该regulator device的寄存器,进行配置操作),则需要定义enable_reg、enable_mask、Apply_reg等参数的信息,以便通过regmap进行配置

 

Linux regulator子系统分析之二 从数据结构理解系统实现

 

以上介绍的是数据结构间关联的说明,下面对几个数据结构进行简要说明:

 

struct regulator_desc

该数据结构是一个regulator_dev的描述信息:

  1. regulator的名称;
  2. 若该regulator device是由别的的regulator device提供的电源(即该regulator device是另一个regulator device的使用者),则supply_name表示提供电源的regulator device名称;
  3. 说明该regulator device可提供的输出电压个数、支持的输出电压列表、单步电压调节值等
  4. 该regulator device的操作接口(struct regulator_ops,包括设置电压、设置电流、输出使能等接口)
Linux regulator子系统分析之二 从数据结构理解系统实现

 

struct regulation_constraints

该数据结构描述regulator device的约束信息,定义如下:

  1. 输出电压范围;
  2. 输出电流范围;
  3. 该regulator device支持的模式(fast、normal、idle、standby等);
  4. 该regulator device支持的操作模式,包括change volt、change current、change bypass mode等;
  5. 该regulator device支持的suspend 状态下的输出控制(如在suspend to disk状态下的输出控制等);
Linux regulator子系统分析之二 从数据结构理解系统实现

 

struct regulator_dev

该数据结构表示一个regulator device,定义如下;

  1. 该regulator device的描述信息,struct regulator_desc类型的变量,描述regulator_dev的电压输出信息、操作信息(使能去使能接口、电压设置与获取接口、电流设置与获取接口);
  2. 该regulator_dev所有使用者的信息(consumer_list链表上的regulator成员);
  3. 该regulator_dev是另一个regulator_dev的使用者,则通过supply作为使用者信息;
  4. 该regulator_dev是否支持通过regmap访问;
  5. notifier链表,用于regulator_dev状态变化的通知链;

 

Linux regulator子系统分析之二 从数据结构理解系统实现

 

 

struct regulator

该数据结构表示一个regulator device的使用者,包括是否一直使能、是否使用bypass模式(bypass模式指regulator device输入电压直接作为输出,不做限制)、电压范围、电流值、设备属性信息、该regulator对应的supply名称等。

Linux regulator子系统分析之二 从数据结构理解系统实现

 

本章主要介绍regulator 子系统的数据结构,相对来说结构体比较多,但是我们要梳理主线,其主线即是文章开头的数据结构关联图,主要抓住regulator_dev、regulator、regulator_map这几个数据结构即可。其他的数据结构主要是为了建立这三个数据结构间的关联(借助regulator_register、regulator_get)。



Tags:Linux regulator   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
针对linux 内核各子系统学习而言,在理解了各子系统的实现背景后,再从数据结构入手,可快速理解其子系统的实现流程。因此本章我们从regulator子系统的数据结构入手,从而理解regu...【详细内容】
2020-06-26  Tags: Linux regulator  点击:(58)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(40)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条