高通thermal-engine配置文件格式
来源:互联网 发布:吴亦凡rap实力知乎 编辑:程序博客网 时间:2024/05/09 18:56
本文基于高通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
配置文件:
sampling 1000
[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
配置文件:
sampling 2000
[bcl_monitor]
algo_type monitor
descending
sensor bcl
sampling 1000
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
配置文件:
debug
[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
配置文件:
debug
[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
配置文件:
debug
[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。
- 高通thermal-engine配置文件格式
- 高通thermal-engine配置文件格式详解
- 高通thermal-engine配置文件格式
- 高通Thermal Overview之thermal-engine
- 高通Thermal debug
- Google App Engine中Yaml配置文件格式引发的AppConfigNotFoundError问题
- 修改高通linux内核的配置文件
- Android Thermal
- log4j配置文件格式
- web.config配置文件格式
- INI配置文件的格式
- ini配置文件的格式
- INI配置文件的格式
- INI配置文件的格式
- Log4cpp配置文件格式说明
- INI配置文件的格式
- GPSTK 数据配置文件格式
- INI配置文件的格式
- 用Android Studio实现ViewPager加Fragment
- 销售有机农产品的网站
- 页面链接 传递js变量给php控制器
- linux驱动基础开发——linux 内核配置机制
- NodeJS优缺点及适用场景讨论
- 高通thermal-engine配置文件格式
- 【Cocos2d入门教程一】Cocos2d-x环境搭建
- 在android手机chroot的debian linux下无权执行ping命令的问题
- 2705 跳绳游戏
- U-boot分析
- 进制转换
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
- MyEclipse 10, 2013, 2014 破解、注册码
- Machine Learning && Deep Learning Resources