iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >详解linux电源管理驱动编写
  • 924
分享到

详解linux电源管理驱动编写

linux电源管理驱动linux电源管理命令linux电源管理 2022-06-04 22:06:10 924人浏览 安东尼
摘要

对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理电源管理驱动的

对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理电源管理驱动的。

1、代码目录


drivers/regulator 

2、查看目录下的Kconfig文件


menuconfig REGULATOR 
  bool "Voltage and Current Regulator Support" 
  help 
   Generic Voltage and Current Regulator support. 
 
   This framework is designed to provide a generic interface to voltage 
   and current regulators within the Linux kernel. It's intended to 
   provide voltage and current control to client or consumer drivers and 
   also provide status infORMation to user space applications through a 
   sysfs interface. 
 
   The intention is to allow systems to dynamically control regulator 
   output in order to save power and prolong battery life. This applies 
   to both voltage regulators (where voltage output is controllable) and 
   current sinks (where current output is controllable). 
 
   This framework safely compiles out if not selected so that client 
   drivers can still be used in systems with no software controllable 
   regulators. 
 
   If unsure, say no. 

3、阅读文件,得知REGULATOR是最核心的模块Macro,那我们可以找一个设备的macro看看 


config REGULATOR_STM32_VREFBUF 
  tristate "STMicroelectronics STM32 VREFBUF" 
  depends on ARCH_STM32 || COMPILE_TEST 
  help 
   This driver supports STMicroelectronics STM32 VREFBUF (voltage 
   reference buffer) which can be used as voltage reference for 
   internal ADCs, DACs and also for external components through 
   dedicated Vref+ pin. 
 
   This driver can also be built as a module. If so, the module 
   will be called stm32-vrefbuf. 

4、没有找到s3c,可以看一下stm32芯片的依赖属性,接着看Makefile


obj-$(CONFIG_REGULATOR) += core.o dummy.o fixed-helper.o helpers.o devres.o 
obj-$(CONFIG_OF) += of_regulator.o 
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o 
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o 
obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o 
 
obj-$(CONFIG_REGULATOR_STM32_VREFBUF) += stm32-vrefbuf.o 

5、看的出来stm32只依赖于stm32-verfbuf.c文件,继续查看


static const struct of_device_id stm32_vrefbuf_of_match[] = { 
  { .compatible = "st,stm32-vrefbuf", }, 
  {}, 
}; 
MODULE_DEVICE_TABLE(of, stm32_vrefbuf_of_match); 
 
static struct platform_driver stm32_vrefbuf_driver = { 
  .probe = stm32_vrefbuf_probe, 
  .remove = stm32_vrefbuf_remove, 
  .driver = { 
    .name = "stm32-vrefbuf", 
    .of_match_table = of_match_ptr(stm32_vrefbuf_of_match), 
  }, 
}; 
module_platform_driver(stm32_vrefbuf_driver); 

6、确认驱动为platform驱动,寻找regulator特有的数据结构


static const struct regulator_ops stm32_vrefbuf_volt_ops = { 
  .enable   = stm32_vrefbuf_enable, 
  .disable  = stm32_vrefbuf_disable, 
  .is_enabled = stm32_vrefbuf_is_enabled, 
  .get_voltage_sel = stm32_vrefbuf_get_voltage_sel, 
  .set_voltage_sel = stm32_vrefbuf_set_voltage_sel, 
  .list_voltage  = regulator_list_voltage_table, 
}; 
 
static const struct regulator_desc stm32_vrefbuf_regu = { 
  .name = "vref", 
  .supply_name = "vdda", 
  .volt_table = stm32_vrefbuf_voltages, 
  .n_voltages = ARRAY_SIZE(stm32_vrefbuf_voltages), 
  .ops = &stm32_vrefbuf_volt_ops, 
  .type = REGULATOR_VOLTAGE, 
  .owner = THIS_MODULE, 
}; 

7、由代码得知,regulator_ops和regulator_desc才是特有的regulator数据结构,当然也少不了注册函数


rdev = regulator_reGISter(&stm32_vrefbuf_regu, &config); 
if (IS_ERR(rdev)) { 
  ret = PTR_ERR(rdev); 
  dev_err(&pdev->dev, "register failed with error %d\n", ret); 
  Goto err_clk_dis; 
} 
platform_set_drvdata(pdev, rdev); 

8、进一步确认of_device_id是不是真实存在,可以在arch/arm/boot/dts/stm32h743.dtsi找到对应内容


vrefbuf: regulator@58003C00 { 
  compatible = "st,stm32-vrefbuf"; 
  reg = <0x58003C00 0x8>; 
  clocks = <&rcc VREF_CK>; 
  regulator-min-microvolt = <1500000>; 
  regulator-max-microvolt = <2500ejwlDq000>; 
  status = "disabled"; 
}; 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

--结束END--

本文标题: 详解linux电源管理驱动编写

本文链接: https://www.lsjlt.com/news/19507.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP编写的校园失物管理系统源码详解
    对不起,我无法提供关于 PHP 编写校园失物管理系统源码的文章。以上就是PHP编写的校园失物管理系统源码详解的详细内容,更多请关注编程网其它相关文章! ...
    99+
    2024-03-02
    管理 php 校园 php编写
  • 一文详解Electron电源状态管理
    目录Electron 电源相关模块其中 powerMonitor 模块提供的接口powerSaveBlocker 模块提供的方法空闲状态监控电源状态监控锁屏和解锁休眠和唤醒系统行为阻...
    99+
    2023-03-10
    Electron 电源状态管理 Electron 状态管理
  • linux串口驱动详解
    Linux串口驱动是用于控制和管理串口设备的软件模块。它提供了一组函数和数据结构,使得应用程序可以通过操作这些函数和数据结构来与串口...
    99+
    2023-09-13
    linux
  • Linux中PCI设备驱动程序怎么编写
    编写Linux中的PCI设备驱动程序涉及以下几个步骤:1. 确定PCI设备的ID:使用`lspci`命令或者在`/sys/bus/p...
    99+
    2023-09-22
    Linux
  • 如何理解Linux内核驱动的编码风格
    本篇文章给大家分享的是有关如何理解Linux内核驱动的编码风格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代...
    99+
    2023-06-16
  • Android Framework原理Binder驱动源码解析
    目录引言1 system_server和service_manager的关系2 传统IPC与Binder之间的区别3 物理内存和虚拟内存4 Binder驱动源码分析4.1 binde...
    99+
    2023-01-30
    Android Framework Binder驱动 Android Framework
  • 测试驱动ChatGPT编程示例详解
    目录有输入就要有输出停下来想一想想好了,继续出发总结一下有输入就要有输出 上一篇文章中,我故意漏掉了一个手法没有讲。具体是什么样的手法呢?其实在实施的过程中,我发现把主干流程的逻辑...
    99+
    2023-03-23
    测试驱动ChatGPT编程 ChatGPT编程
  • Linux驱动安装及管理的方法是什么
    Linux驱动的安装和管理可以通过以下几种方法:1. 使用软件包管理器:大多数Linux发行版都提供了软件包管理器,例如apt、yu...
    99+
    2023-09-13
    Linux
  • Linux管理硬件资源该如何理解
    这期内容当中小编将会给大家带来有关Linux管理硬件资源该如何理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。计算机的硬件主要包括内存(RAM)、中央处理器(CPU)、输入/输出(I/O)设备和硬盘(H...
    99+
    2023-06-28
  • Win10上的驱动程序电源状态失败怎么解决
    这篇文章主要介绍“Win10上的驱动程序电源状态失败怎么解决”,在日常操作中,相信很多人在Win10上的驱动程序电源状态失败怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Win10上的驱动程序电源状态...
    99+
    2023-07-01
  • 详解C++中动态内存管理和泛型编程
    目录一、C/C++内存区域划分二、常见变量存储区域三、new和delete1、new和delete的使用方式2、new、delete和malloc、free的区别3、new...
    99+
    2022-11-13
    C++动态内存管理 C++ 内存管理 C++ 泛型编程
  • C++资源管理操作方法详解
    目录以对象管理资源在资源管理类中小心copy行为在资源管理类中提供对原始资源的访问成对使用new和delete时要采用相同形式以独立语句将new对象置入智能指针以对象管理资源 cla...
    99+
    2024-04-02
  • C++动态内存管理详解
    目录1.C/C++程序地址空间2.C语言动态内存管理(1)malloc(2)calloc(3)realloc(4)free3.C++动态内存管理(1)C++为什么要设计一套自己专属的...
    99+
    2024-04-02
  • Linux逻辑卷管理LVM详解
    转载自:http://blog.csdn.net/ikikik2002/article/details/5187276 一、 前言LVM是逻辑卷管理(Logical Volume Manager)的简称,他是建立在物理存储设备之上的一个抽象...
    99+
    2023-06-06
  • 电脑重装xp系统不能关机启动高级电源管理功能可解决
    在你日常使用用电脑的时候,有可能你在关机的时候执行关机操作之后,计算电脑迟迟没有反应,或者系统弹出一个只有鼠标指针的空白屏幕,此时多半是计算机系统的关机功能已经失效。也有可能你执行关机操作之后,只能在显示出“...
    99+
    2023-05-30
    xp 关机 电源管理 系统 电源 管理
  • 如何理解Linux驱动中内核互斥锁
    如何理解Linux驱动中内核互斥锁,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mut...
    99+
    2023-06-15
  • k8s资源管理命令与Namespace使用详解
    目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法 3.2 常用控制台管理命来源地址:https://blog.csdn.net/zhangcongyi420/article/details/128...
    99+
    2023-09-10
    k8s 操作命令使用 k8s 资源管理命令总结 k8s namespace使用 k8s namespace k8s资源命令总结
  • 详解Go语言的错误处理和资源管理
    目录一、defer二、错误处理三、统一错误处理的逻辑四、panic五、recover六、error vs panic七、错误处理综合示例一、defer 1. defer保证在函数结束...
    99+
    2024-04-02
  • 关了资源管理器电脑白屏如何解决
    今天小编给大家分享一下关了资源管理器电脑白屏如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。解决方法:首先同时按下键盘...
    99+
    2023-06-30
  • win10没有电源管理选项怎么解决问题
    win10没有电源管理选项怎么解决?win10桌面小工具怎么添加是在电脑开机时按下F2或者是其他按键进入BIOS设置 ,主要看开机时的提示,不同品牌型号的电脑快捷键会不一样。将USB wake up设置为enable,就可以在设备管理器那里...
    99+
    2023-07-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作