• 注册thermal zone设备

    • 函数申明
    • 函数定义thermal_corec
    • 函数使用
      • 功能描述
      • 参数说明
      • 使用注意事项
      • 使用示例
  • 注册cooling device
    • 函数申明
    • 函数定义thermal_corec
    • 函数使用
      • 功能描述
      • 参数说明
      • 使用示例
  • thermal zone 和cool device 绑定

注册thermal zone设备

    thermal_zone_device_register

函数申明:

    #include <linux/thermal.h>

函数定义:thermal_core.c

struct thermal_zone_device*
thermal_zone_device_register(const char *type,int trips,int mask, void *devdata,struct thermal_zone_device_ops *ops,struct thermal_zone_params *tzp,int polling_delay)

函数使用

功能描述

  • 注册一个thermal zone device
  • 在/sys/class/thermal 目录下面创建 thermal_zone[0-*]. 设备节点
  • 创建对应的thermal_zone* 下面对应的文件节点,定义读写函数回调相关tz的ops方法
  • 尝试绑定所有的cool device 到该tz
  • 创建一个工作队列,定时获取温度并采取策略

参数说明

 * @type:       tz设备类型,用来标识不同tz的字符串* @trips:      tz设备支持的触发点个数* @mask:     要求mask 小于trips个数,一般为0* @devdata:    设备私有数据* @ops:        tz设备回调函数,trip num大于0 的情况下,ops 中get_trip_type 和 get_trip_temp 必须不为null* @tzp:       tz的特殊参数,可以用于标识控制策略等* @passive_delay:  passive cooling模式间隔ms数,一般设置为0* @polling_delay: 出发点检测间隔ms数

使用注意事项

 * 不需要这个tz设备的时候需要调用thermal_zone_device_unregister()来注销*  passive cooling 取决于 the .get_trend()函数的返回值* 返回一个指向thermal_zone设备的指针,需要使用IS_ERR来判断返回值

使用示例

if (IS_ERR(thermal)) {dev_err(&pdev->dev,"Failed to register thermal zone device\n");return PTR_ERR(thermal);
}

注册cooling device

thermal_cooling_device_register

函数申明:

    #include <linux/thermal.h>

函数定义:thermal_core.c

struct thermal_cooling_device *
thermal_cooling_device_register(char *type, void *devdata,const struct thermal_cooling_device_ops *ops)
{return __thermal_cooling_device_register(NULL, type, devdata, ops);
}
EXPORT_SYMBOL_GPL(thermal_cooling_device_register);

实际调用的函数是:__thermal_cooling_device_register

static struct thermal_cooling_device *
__thermal_cooling_device_register(struct device_node *np,char *type,void *devdata,const struct thermal_cooling_device_ops *ops)

函数使用

功能描述

  • 注册一个cooling 设备
  • 创建设备节点/sys/class/thermal/cooling_device[0-*]
  • 尝试将自己绑定到所有tz
  • 返回一个指向cooling device 的指针

参数说明

 @np:         指向设备数节点的指针@type:       cooling device的设备类型@devdata:    设备私有数据@ops:        设备操作的回调函数,ops必须定义并且必须至少包含   get_max_state,get_cur_state,set_cur_state方法

使用示例:

cdev = thermal_cooling_device_register("xxxx", NULL, &xxx_cooling_ops);
if (IS_ERR(cdev)) {retval = PTR_ERR(cdev);                            goto err1;
}

thermal zone 和cool device 绑定

在thermal zone 和 cool device 设备注册的时候会分别调用bind_tz(tz)和bind_cdev(cdev) 进行绑定

  1. 让当前tz去和每一个已经注册了的cooling device绑定
  2. 让当前cooling device 去和每一个已经注册了的thermal zone 绑定

这样就可以保证无论两个设备的注册顺序如何都不会出现绑定不成功的意外

  • 绑定规则如下:

    • 遍历thermal_tz_list,如果当前tz 定义了bind 回调函数,就使用该回调函数决定是否绑定成功
    • 如果当前tz没有定义bind 回调函数,则通过tz 注册时候的tzp->tbp 相关规则绑定
    • 如果tzp->tbp 和bind 都没有定义,直接调到下个tz进行绑定

thermal zone相关推荐

  1. MSM8225 thermal设计

    点击打开链接 1.概述 1.1.Thermal综述 笼统的讲,thermal是指移动终端电路板上的温度.Thermal的数值应当维持在合理的温度范围之内,过高的温度会影响用户的使用体验,更高的温度甚至 ...

  2. Linux内核Thermal框架详解十四、Thermal Governor(4)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, "热散由心静,凉生为室空" ...

  3. Linux内核Thermal框架详解十三、Thermal Governor(3)

    接前一篇文章Linux内核Thermal框架详解十二.Thermal Governor(2) 二.具体温控策略 上一篇文章介绍并详细分析了bang_bang governor的源码.本文介绍第2种温控 ...

  4. Linux Thermal机制源码分析之Governor

    一.thermal_init() 在开始源码分析之前,需要先说明一下.Linux 内核代码庞大而复杂,如何 reading the Fxxking source code 相信是很多从事 Linux ...

  5. Linux内核Thermal框架详解十一、Thermal Governor(1)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, 特此致谢! 一.概述 Thermal Gove ...

  6. Android/Linux Thermal框架分析及其Governor对比

    https://www.cnblogs.com/arnoldlu/p/6388151.html 图表 1 Thermal框架 随着SoC性能的快速提升,功耗也极大提高,带来的负面影响是SoC的温度提高 ...

  7. Linux内核Thermal框架详解十二、Thermal Governor(2)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, "热散由心静,凉生为室空" ...

  8. 鸟哥的Linux私房菜(基础篇)- 第二十六章、Linux 核心编译与管理

    第二十六章.Linux核心编译与管理 最近升级日期:2009/09/18 我们说的 Linux 其实指的就是核心 (kernel) 而已.这个核心控制你主机的所有硬件并提供系统所有的功能,所以说,他重 ...

  9. Linux 内核引导选项简介 *********很多常用的受益匪浅

    内核引导选项大体上可以分为两类:一类与设备无关.另一类与设备有关.与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项.比如,如果你想知道可以向 AHA154 ...

  10. 2.6内核的配置与编译

    首先对内核进行菜单配置, 代码: CODE: cd /usr/src/linux make menuconfig 代码成熟度选项, 代码: CODE: Code maturity level opti ...

最新文章

  1. 抽点时间让我们一起来学linux系统
  2. Java、Android基础之—反射
  3. double,float,BigDecimal类型数值的操作
  4. React-Native入门(1)-项目工程初识
  5. 导入jar包到Maven本地仓库(maven install jar)
  6. Oracle11g远程连接配置 visual studio 2003
  7. 怎样修改WIN7下的host文件
  8. CodeIgniter中的FCKeditor的路径问题
  9. redis和mecache和ehcache的特点
  10. 理解Lucene中的Analyzer
  11. [C#]启动外部程序
  12. js上传图片时添加水印
  13. 监狱人员安全防范管理系统软件解决方案
  14. 深度学习蓄势待发,即将“爆破”欧拉方程
  15. VS Code 快速删除多行的部分内容
  16. Ubuntu系统安装时grub修复操作
  17. 【电子通识】薄膜电阻与厚膜电阻的差异
  18. 打败苹果!小米销量跻身全球第二
  19. ACM 广搜 Hero In Maze
  20. python小项目案例-python简单项目实例

热门文章

  1. Unity网格编程篇(四) 三维温度图、热力图
  2. GoLand No Tests Were Run : 不能使用 fmt.Printf() BUG
  3. linux下安装卸载永中office步骤,永中office2012 for Linux的安装
  4. html爆炸动画效果,基于CSS3和GSAP的超酷盒子爆炸动画特效
  5. PyTorch 体验感悟
  6. Centos7 制作系统iso镜像文件
  7. [PTA练习] 愿天下有情人都是失散多年的兄妹(25分)
  8. 怎么设置百度网盘免验证登陆?
  9. 数据处理之异常值处理
  10. 什么是图床如何搭建图床