本文基于高通msm8939/8994平台文档及源码。

​ 说明文档: vendor/qcom/proprietary/thermal-engine/readme.txt;

​ 源码文件: venror/qcom/proprietary/thermal-engine/thermal_config_v2.c;

​ 实际配置文件: vendor/qcom/proprietary/thermal-engine/thermal-engine.conf。

​ 关注源码文件的global_table,pid_table, tm_table, ss_table, v_table, eq_table声明。其中global_table为全局配置选项,对应2.1中的算法实例标签之前的部分;pid_table对应pid算法配置格式;tm_table对应monitor算法配置格式;ss_table对应ss算法配置格式;v_table对应virtual算法配置格式;eq_table对应equilibrium配置格式(此格式暂时未见使用)。

配置文件基本格式

​ {debug} //可选,若有此选项表示使能调试信息

​ sampling // 默认采样率,以ms为单位

​ [<算法实例标签>] // 算法实例标签

​ algo_type // 算法类型,必须是算法实例的第一个字段

​ disable //可选, 用于默认情况下禁止该算法实例起作用

​ …

算法类型

​ 算法类型共有4种: monitor, pid, ss, virtual。每种的格式各不一样。

算法类型对应thermal_config.h(vendor/qcom/proprietary/thermal-engine/inc)中的algo_type枚举类型,实际上有5种,除以上4种外,还有一个equilibrium类型。但从algos数组声明(thermal_configi_v2.c)可以看出,equilibrium还未被使用。

monitor算法配置格式

​ [<算法实例标签>]

algo_type          monitor
sensor                 <传感器名称>
sampling            <采样率(ms)>
descending                 //       可选,默认门限是升序,有此字段后门限顺序为降序
thresholds     <门限值(mC/mA)>
thresholds_clr  <清除门限值>
actions        <达到门限时的动作,多个动作时用'+'连接>
action_info    <动作额外信息,多个额外信息间用'+'连接>

pid算法配置格式

​ [<算法实例标签>]

algo_type          pid
sampling            <采样率(ms)>
sensor                 <传感器名称>
device                <被PID算法调制的设备>
set_point           <PID算法调整的目标值(mC/mA)>
set_point_clr     <PID算法停止调整的值>
p_const              <PID算法中的P常量>
i_const               <PID算法中的I常量>
d_const              <PID算法中的D常量>
i_samples          <积分组件报错时的积分样本数>
dev_units_per_calc  <积分算法输出调整单元值(每次调整的值)>

ss算法配置格式

​ [<算法实例标签>]

algo_type          ss
sampling            <采样率(ms)>
sensor                 <传感器名称>
device                <被PID算法调整的设备>
set_point           <PID算法调整的目标值(mC/mA)>
set_point_clr     <PID算法停止调整的值>
time_constant  <当当前和上一个错误采样值相等时的延迟调整系数>
device_max_limit     <设备最大值(mC/mA)>            // 可选

virtual算法配置格式

该算法实际作用是用已存在的传感器模拟出一个新的传感器。

​ [<虚拟传感器名字>]

algo_type          virtual
trip_sensor        <传感器名称>
​set_point           <当高于此温度时,虚拟传感器开始polling模式>
set_point_clr     <当高于此温度时,虚拟传感器停止polling模式>
sensors               <用于计算温度总和的传感器数组>
weights               <权重值数组>
sampling            <默认采样率>

配置文件字段解释

thresholds取值

​ ‘thresholds’/‘thresholds_clr’/‘actions’/'action_info’接受最多8级以空格分开的门限。

action取值

‘none’:

​ actions: 无动作

​ action_info: 忽略

‘report’:

​ actions: 报告"穿过门限消息"给UI

​ action_info: 忽略

备注:

"穿过门限消息"以每行独立的格式报告给THERMALD_UI(一个抽象的本地socket);

清除或触发门限会导致消息上报,比如n+1级门限被清除或者触发了n级门限;其它

动作是达到门限时才触发;

参数按以下顺序发送:sensorname, temperature, current_threshold_level, is_trigger。其中:

current_threshold_level为当前被触发/清除的门限;is_trigger为true时表示触发,为false

时表示清除。

‘cpu’:

​ actions: 调整cpu频率

​ action_info: cpu最大允许频率,单位:KHz

‘cpuN’:

​ actions: 调整第N个cpu频率

​ action_info: cpuN最大允许频率,单位:KHz

‘hotplug_N’:

​ actions: 拔掉第N个cpu(cpu_down)

​ action_info: 0: 插上cpu(cpu_up), 1:拔掉cpu(cpu_down)

‘lcd’:

​ actions: 限制lcd亮度

​ action_info: lcd最大亮度,取值范围:0-255

‘modem’:

​ actions: 请求限制modem功能

​ action_info: modem的限制级别,取值范围:0-3

‘fusion’????)

​ actions: 请求限制 fusion modem功能

​ action_info: fusion modem的限制级别,取值范围:0-3

‘battery’:

​ actions: 限制电池充电电流

​ action_info: 电池充电电流限制级别,取值范围:0-3

‘gpu’:

​ actions: 调整gpu频率

​ action_info: gpu最大允许频率,单位:KHz

‘wlan’:

​ actions: wlan(无线局域网)限制

​ action_info: WLAN限制级别,取值范围0-4

‘shutdown’:

​ actions: 关机

​ action_info: 关机延迟时间,单位:ms

备注:

​ 从gen_dev_list变量声明(vendor/qcom/proprietary/thermal-engine/devices/devices.c)可以看出,还有如下取值:‘vdd_restriction’, ‘kernel’, ‘camera’,‘camcorder’, ‘vdd_dig_swmode’,‘opt_curr_req’,

‘venus’,‘modem_cx’。从gen_dev_list及hotplug_dev_list可以总结出各action字段及动作函数的对应关系:

动作名称 执行动作函数 动作信息
‘cpu’ cpu_all_action() 最大频率
‘cpuN’ cpu_action() 最大频率
‘hotplug_N’ hotplug_action() 1级
‘wlan’ wlan_action() MAX_WLAN_MITIGATION_LEVEL(4)
‘battery’ battery_action() MAX_BATTERY_MITIGATION_LEVEL(3)
‘lcd’ lcd_action() 255级亮度
‘shutdown’ ts_shutdown_action() UINT32_MAX
‘none’
‘report’ ts_report_action()
‘modem’ modem_action() 3
‘fusion’ fusion_modem_action() 3
‘vdd_restriction’ vdd_restriction_action() 1
‘kernel’ kernel_mitigation_action() 1
‘camera’ camera_action() MAX_CAMERA_MITIGATION_LEVEL(10)
‘camcorder’ camcorder_action() MAX_CAMCORDER_MITIGATION_LEVEL(10)
‘vdd_dig_swmode’ vdd_dig_automode_diable_action() 1
‘opt_curr_req’ optimum_current_request_action 1
‘mdp’ mdp_action() MAX_MDP_MITIGATION_LEVEL(3)
‘venus’ venus_action() MAX_VENUS_MITIGATION_LEVEL(3)
‘modem_cx’ modem_cx_limit_action() 3
‘gpu’ gpu_action() 最大频率

表 1 action属性

device取值

‘cpu’:

​ actions: 调整cpu频率

​ action_info: cpu最大允许频率,单位:KHz

‘cpuN’:

​ actions: 调整第N个cpu频率

​ action_info: cpuN最大允许频率,单位:KHz

备注:

​ device还可取以下值: ‘gpu’, ‘clusterN’

配置文件示例

示例1

配置文件:

[PMIC_THERM_MON]
algo_type        monitor
sensor           PMIC_THERM
sampling         5000
thresholds       40200          45000      50000
thresholds_clr   38000          43000      48000
actions          cpu+report       cpu       cpu
action_info      1188000+0      368640     245760

描述:

  1. 默认采样率为1s;

  2. PMIC_THERM传感器采样率为5s;

  3. 当温度升到到40.2度以上时,触发门限1,调节cpu最大允许频率为1188000KHz,在本例中,由于此频率是最大值,因此实际无动作;同时上报此消息,action_info值0被忽略;

  4. 当温度降低到38度以下时,清除门限1,并上报此消息;

  5. 当温度升高到45度以上时,触发门限2,调节cpu最大允许频率为368640KHz;

  6. 当温度降低到43度以下时,清除门限2,调节cpu最大允许频率为1188000KHz。

示例2

配置文件:

[bcl_monitor]
algo_type        monitor
descending
sensor           bcl
sampling        2000
thresholds       100         0
thresholds_clr   500        100
actions           report         report
action_info       0            0

描述:

  1. 使能调试信息输出;

  2. 默认采样率为2s;

  3. 对于电池电流限制(battery current limit)传感器,采样率为1s;

  4. 当电池电流升到imax - 100mA时,触发门限1,并上报此消息;

  5. 当电池电流降到imax - 500mA时,清除门限1,并上报此消息;

  6. 当电池电流升到imax时,触发门限2,并上报此消息;

  7. 当电池电流降到imax -100mA时,清除门限2,并上报此消息。

示例3

配置文件:

[TEST_PID]
algo_type          pid
sensor             tsens_tz_sensor0
device             cpu
sampling           1000
set_point          85000
set_point_clr      65000
p_const            1.0
i_const            1.0
d_const            1.0
i_samples          10
dev_units_per_calc 10000

描述:

  1. 使能调试信息输出;

  2. 本PID算法实例标签为TEST_PID;

  3. 使用tsens_tz_sensor0传感器;

  4. 被调节设备是CPU;

  5. 采样率为1s;

  6. set_point值是PID调节算法的门限值和PID算法的设定值;

  7. set_point_clr是停止PID调节算法的门限值;

  8. p_const, i_const, d_const是PID等式中的p,i,d常量;

  9. i_samples是PID等式中的积分错误采样次数;

  10. dev_units_per_calc 10000 kHz(设备是CPU,因此单位是kHz)是PID输出增加的步进值(即按10000KHz为步长调整??);

示例4

配置文件:

[virtual_sensor-0]
algo_type             virtual
​sensor                tsens_tz_sensor8
set_point             35000
set_point_clr         30000
sensors               tsens_tz_sensor1  tsens_tz_sensor5
weights               40  60
sampling              250[Test-PID]
algo_type             pid
sensor                virtual-sensor-0
device                cpu1
sampling              250
set_point             55000
set_point_clr         50000
p_const               1.25
i_const               0.8
d_const               0.5
i_samples             10
dev_units_per_calc    5000

描述:

  1. PID实例Test-PID基于virtual-sensor-0的结果;

  2. virtual-sensor-0需要用户手动定义;

  3. trip_sensor 用来指示虚拟传感器何时开始进入polling模式(轮询),trip_sensor必须为常规传感器,不能为另外一个虚拟传感器;

  4. set_point是trip sensor的门限值,当高于此门限值时,trip sensor将从中断模式进入轮询模式,轮询频率由虚拟传感器的sampling字段设置;

  5. set_point_clr是trip sensor的门限值,当低于此门限值时,trip sensor将停止轮询模式然后等待下一个门限事件;

  6. weights给定了传感器数组的权重值;

  7. 虚拟传感器的set_point必须小于pid算法的set_point,以便当达到set_point时pid能收到通知,另外,如果虚拟传感器未进入轮询模式,pid将不能获取到它的温度;

  8. 如果tirp sensor不支持从中断模式到查询模式的改变,第8条可以被忽略。此时虚拟传感器的采样率将应该和pid的采样率一致。

示例5

配置文件:

[bcm_monitor]
algo_type             monitor
sensor                bcm
sampling              1000
thresholds            70000         90000                 // 注意,单位为m%
thresholds_clr        69000         89000
actions               cpu             cpu
action_info           768000       384000

描述:

  1. 使能调试信息输出;

  2. 当采样电流达到imax的70%时,门限1触发,调整cpu最大允许频率为768000KHz;

  3. 当采样电流达到imax的90%时,门限2触发,调整cpu最大允许频率为384000KHz;

  4. bcm仅支持2级门限调节;

  5. 有效的门限值取值为:40000,50000,60000,70000,80000,90000。

示例6

pix3 Android 10.0.0 中配置的config内容如下:

[SS-SKIN-HIGH-CPU4]
algo_type ss
sampling 2000
sensor fps-therm-adc
device cpu4
set_point 39000
set_point_clr 38000
device_max_limit 1996800
time_constant 0[SS-SKIN-MID-CPU4]
algo_type ss
sampling 2000
sensor fps-therm-adc
device cpu4
set_point 41000
set_point_clr 40000
device_max_limit 1689600
time_constant 0[SS-SKIN-LOW-CPU4]
algo_type ss
sampling 2000
sensor fps-therm-adc
device cpu4
set_point 43000
set_point_clr 42000
device_max_limit 1363200
time_constant 0[HOT-SKIN-VIRTUAL]
algo_type               virtual
trip_sensor             fps-therm-adc
sensors                 gpu0-usr cpu0-silver-usr
list_cnt                2
weights                 1 -1
set_point               40000
set_point_clr           37000
sampling                1000
math                    0[VIRTUAL-SS-GPU-SKIN]
algo_type               ss
sensor                  HOT-SKIN-VIRTUAL
device                  gpu
sampling                1000
set_point               8000
set_point_clr           2000
device_max_limit        414000000[SKIN-MONITOR]
algo_type       monitor
sampling        1000
sensor          fps-therm-adc
thresholds      45000               47000               57000
thresholds_clr      43000               45000               56000
actions         cpu0+cpu4+gpu         cpu0+cpu4+gpu         shutdown
action_info     979200+1056000+414000000  748800+825600+257000000       1[BATTERY-MONITOR]
algo_type           monitor
sampling            2000
sensor          fps-therm-adc
thresholds          39000       41000       43000       48000
thresholds_clr      38000       40000       42000       46000
actions         battery     battery     battery     battery
action_info     1       2       3       4[MNH-MONITOR]
algo_type           monitor
sampling            2000
sensor          fps-therm-adc
thresholds          45000       47000
thresholds_clr      44000       46000
actions         mnh     mnh
action_info     3       4[MODEM-MONITOR]
algo_type       monitor
sampling        1000
sensor          fps-therm-adc
thresholds      48000           53000
thresholds_clr      45000           51000
actions             modem+modem_proc       modem+modem_proc
action_info     1+1                    3+3

高通thermal-engine配置文件格式详解相关推荐

  1. 高通驱动树中的GPIO详解

    高通驱动树中的GPIO详解 reference:https://blog.csdn.net/baidu_37503452/article/details/80257441 Drive Strength ...

  2. 配置文件格式详解之终极无惑

    文章目录 1.键值对 2.JSON 2.1 JSON 语法 2.2 JSON 实例 2.3 JSON 解析 3.XML 3.1 XML 语法 3.2 XML 实例 3.3 XML 解析 4.YAML ...

  3. 使用HeartBeat实现高可用HA的配置过程详解

    一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 ...

  4. Ubuntu成长历程-内核配置menuconfig详解(二)

    Ubuntu成长历程-内核配置menuconfig详解(二) Ubuntu成长历程-内核配置menuconfig详解(二) ---Device Drivers 说实话,这部分涉及的内容实在太多了,就不 ...

  5. CRY ENGINE 3 引擎详解

    转载的. CRY ENGINE 3 引擎详解 "在今年,2009 年CRYTEK 宣布 CRY ENGINE 成功的移植到了家用机的 PS3 以及 Xbox360 平台,在 GDC2009 ...

  6. 第20节 核心交换机配置热备份详解及实验演示—基于Cisco Packet Tracer

    核心交换机配置热备份详解及实验演示 1 网络规划 1.1 核心交换机的重要性及作用 1.2 对核心交换机做热备份 2 拓扑图分析 2.1 网络环路问题及解决方案 2.1.1 网络环路问题 2.1.2 ...

  7. php.ini配置中文详解

    php.ini配置中文详解 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目 ...

  8. 华为交换机关机方法_华为交换机启动配置命令详解大全

    华为交换机启动配置命令详解大全 1.自动保存配置 [Huawei]set save-configuration ? backup-to-server  Back up the configuratio ...

  9. Rsync配置参数详解-什么是Rsync

    1.什么是Rsync-Rsync配置参数详解 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"R ...

最新文章

  1. 《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
  2. Java 访问RabbitMQ
  3. php接收多层数组中文乱码解决
  4. 计算机硬件的维护知识,计算机硬件维护知识
  5. [mybatis]缓存_缓存原理图
  6. 程序出错后 程序员给测试人员的20条高频回复
  7. [转]一个故事讲清楚NIO
  8. 百兆以太网口通信速率_千兆以太网的传输速度
  9. HTML网页设计制作大作业(div+css)~ 环境保护(5个页面)
  10. 机器人动力学与控制学习笔记(十一)————机器人凯恩方程动力学建模
  11. 袖珍计算机英语手册,英语袖珍迷你系列-中考英语速记手册.pdf
  12. sk hynix 固态硬盘 管理_5GB/s极速狂飙——希捷酷玩FireCuda520 PCIE4.0固态硬盘体验...
  13. html5页面风格,H5页面设计风格大盘点!
  14. 遇到电脑中病毒了怎么办
  15. PageHelper关闭count语句优化
  16. 【老罗笔记】哪来的天才——练习中的平凡与伟大
  17. ubuntu 超好用截图和标记图片工具shutter
  18. 山东省第三届ACM省赛
  19. UE4学习监督——基本动画
  20. ubuntu连不上校园网

热门文章

  1. win10无法开启适用于linux的windows的子系统,重启后一直撤销申请
  2. SSH远程ubuntu【无公网IP、内网穿透】 1-3
  3. ERP实施工程师必备知识体系及职业操守
  4. 【深度优先搜索】leetcode 1905. 统计子岛屿
  5. 冒泡排序和纯指针的冒泡排序
  6. MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据
  7. Linux下github的下载和使用
  8. SANER 2018 论文阅读- Dissection of a Bug Dataset: Anatomy of 395 Patches from Defects4J
  9. 醋泡三宝可以吃出长寿
  10. python做菜单_python实现三级菜单