返回顶部
首页 > 资讯 > 操作系统 >详解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://lsjlt.com/news/19507.html(转载时请注明来源链接)

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

猜你喜欢
  • 详解linux电源管理驱动编写
    对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。下面,我们可以看看linux是如何处理电源管理驱动的...
    99+
    2022-06-04
    linux 电源管理驱动 linux 电源管理 命令 linux 电源管理
  • 详解linux 驱动编写(sd卡驱动)
    随着sd卡的流行,sd卡在嵌入式设备上使用的场景也越来越多。那下面我们可以看一下,linux驱动框架上是怎么处理sd卡驱动的? 1、代码目录地址 drivers/mmc 2、基本结构 从mmc的代码结构可以看得出...
    99+
    2022-06-04
    linux sd卡驱动 linux驱动编写 linux sd卡
  • 详解linux pwm驱动编写
    pwm方波可以用来控制很多的设备,比如它可以被用来控制电机。简单来说,就是单位时间内的方波越多,那么电机的转速就会越快;反之就越慢。通过这个特性,soc就可以轻松地利用pwm对外设进行自动控制。所以,今天的主题就是pwm...
    99+
    2022-06-04
    linux pwm驱动 linux驱动编写 linux pwm
  • 详解linux lcd驱动编写
    有些嵌入式设备是不需要lcd的,比如路由器。但是,还有些设备是需要lcd显示内容的,比如游戏机、测试仪、智能手表等等。所以,今天我们就看看lcd驱动在linux上是怎么进行的。 1、代码目录 drivers/vide...
    99+
    2022-06-04
    linux lcd驱动 linux lcd驱动框架
  • 详解linux dma驱动编写
    linux下面的驱动虽然什么样的情形都有,但是dma驱动却并不少见。dma可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情了,提高了设备效率。 1、dma驱动在什么地方...
    99+
    2022-06-04
    linux dma驱动
  • 详解linux驱动编写(入门)
    在我离职之前,工作内容几乎不涉及到驱动方面的知识。我所要做的内容就是把客户对设备的请求拆分成一个一个的接口,调用驱动的设置进行配置就可以了。当然,至于驱动下面是怎么实现那就要根据具体情况而定了。比如说,有的驱动是芯片厂商...
    99+
    2022-06-04
    linux驱动编写 linux驱动
  • 详解linux 摄像头驱动编写
    对于现代嵌入式设备,特别是手机来说,摄像头是很重要的一个设备。很多同学买手机,一看颜值,第二就看摄像头拍照如何。所以,从某个角度来说,摄像头是各个厂家主打的应用功能。那么,linux是如何支持摄像头的,我们可以来看一下?...
    99+
    2022-06-04
    linux 摄像头驱动
  • 详解linux 看门狗驱动编写
    看门狗是linux驱动的一个重要环节。某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备。但是,任何软件都不可能100%没有bug。如何保证软件在遇到严重bug、死机的时候也能正常运行呢,那么看门狗就是有效的...
    99+
    2022-06-04
    linux 看门狗驱动 linux 看门狗
  • 详解linux usb host驱动编写入门
    usb协议是一个复杂的协议,目前涉及到的版本就有usb1.0, usb2.0, usb3.0。大家如果打开kernel usb host目录,就会发现下面包含了ohci,uhci,ehci,xhci,whci等多种形式的...
    99+
    2022-06-04
    linux usb host驱动 linux usb驱动 linux usb host
  • linux nand flash驱动编写
    很长一段时间,nand flash都是嵌入式的标配产品。nand flash价格便宜,存储量大,适用于很多的场景。现在很普及的ssd,上面的存储模块其实也是由一块一块nand flash构成的。对于linux嵌入式来说,...
    99+
    2022-06-04
    linux nand flash驱动 linux nand flash nand flash驱动
  • linux 触摸屏驱动编写
    早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多。但是随着触摸屏手机、即智能手机的流行,触摸屏基本成了手机的标配。所以,今天可以看看触摸屏驱动在linux上是如何进行的。 1、驱动目录 drivers/inpu...
    99+
    2022-06-04
    linux 触摸屏驱动 linux 触摸屏 linux驱动编写
  • Linux 块设备驱动代码编写
    按照ldd的说法,linux的设备驱动包括了char,block,net三种设备。char设备是比较简单的,只要分配了major、minor号,就可以进行读写处理了。相对而言,block和net要稍微复杂些。net设备姑...
    99+
    2022-06-04
    Linux 块设备驱动 linux 块设备
  • 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
  • Android开发教程之电源管理详解
    本文实例讲述了Android电源管理。分享给大家供大家参考,具体如下: 一、 相关概念 1. 出于节电的需要,一般应用在用户一段时间无操作的情况下屏幕变暗,然后进入休眠状态 2...
    99+
    2022-06-06
    电源管理 程之 电源 android开发 教程 Android
  • Linux中PCI设备驱动程序怎么编写
    编写Linux中的PCI设备驱动程序涉及以下几个步骤:1. 确定PCI设备的ID:使用`lspci`命令或者在`/sys/bus/p...
    99+
    2023-09-22
    Linux
  • Linux驱动之platform总线详解
    目录1、platform 总线简介1.1、linux 驱动的分离和分层思想1.1.1、Linux 驱动的分离1.2、platform 平台驱动模型2、platform 框架2.1、platform 总线2.2、platf...
    99+
    2022-06-04
    Linux驱动中的platform总线分析
  • 如何理解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
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作