NXP i.MX8M纳米SOC热监控单元(TMU)有一个传感器,可以以1°C的分辨率测量芯片温度,并使用软件校准。

内核配置

你可以通过内核配置选项来管理热支持:

  • 温度传感器驱动飞思卡尔i.MX8MM SoCCONFIG_IMX8MM_THERMAL

默认情况下,该选项作为内置选项启用ConnectCore 8M Nano内核配置文件

内核驱动程序

文件 描述

司机/热/ imx8mm_thermal.c

热驱动程序

访问点

跳闸点是指系统在温度域中发生动作的一个点。这个节点只描述点,而不是动作。

Linux热子系统建立了几种类型的触发点:

  • 被动:启动被动冷却(如降低时钟频率)的跳闸点。

  • 活跃的:启动主动冷却(如启动风扇)的跳闸点。

  • :跳闸点,表示已达到紧急温度阈值。

  • 至关重要的:硬件处于危险中的触发点。

设备树绑定和自定义

i.MX8M纳米热器件树绑定记录在文档/ devicetree /绑定/热/ imx8mm-thermal.txt

热监控单元的定义

i.MX8M纳米器件树
Tmu: tmu@30260000 {compatible = "fsl,imx8mm-tmu";Reg = <0x30260000 0x10000>;时钟= <&clk IMX8MN_CLK_TMU_ROOT>;#thermal-sensor-cells = <0>;};

跳闸点和冷却装置的定义

i.MX8M纳米器件树定义默认跳闸点并将CPU核心设置为冷却设备。最重要的是ConnectCore 8M Nano器件树,用于调整SOM的热脱扣点:

ConnectCore 8M纳米器件树
Thermal-zones {cpu-thermal {trips {cpu_alert0: trip0 {temperature = <85000>;迟滞= <2000>;类型= "被动";};Cpu_crit0: trip1{温度= <100000>;迟滞= <2000>;Type = "critical";};};}; };

设备树定义了两个跳闸点:

跳闸点类型 温度

被动

85°C

至关重要的

100°C

芯片支持的最高温度,取决于SOC的热等级:

  • 商业:95°C

  • 工业:105°C

在启动过程中,在U-Boot横幅上检查SOC的热等级。

使用

CPU温度

查询当前CPU温度。

#Cat /sys/class/thermal/thermal_zone0/temp 32000

该命令返回以毫希为单位的温度。

无源跳闸点

当SOC中的温度达到无源跳闸点温度时,SOC产生中断,驱动程序发送通知。其他驱动程序可能订阅此类通知以触发冷却动作,例如降低时钟频率。

在当前的BSP上,当达到被动跳闸点时,GPU驱动程序订阅温度监视器以降低GPU频率。这种情况会对图形应用程序的性能产生影响。

除了订阅之外,在设备树中声明为冷却设备并链接到此跳闸点的设备将采取被动操作。这就是Cortex-A53内核的情况,当它们达到无源跳闸点时,会降低它们的频率。

器件树为无源跳闸点定义了2°C的迟滞。这意味着只有当模具温度低于被动跳闸点2°C时,系统才被认为在正常参数范围内,冷却动作可以取消。

读取被动跳闸点参数:

#Cat /sys/class/thermal/thermal_zone0/trip_point_0_type passive#Cat /sys/class/thermal/thermal_zone0/trip_point_0_hyst 2000#Cat /sys/class/thermal/thermal_zone0/trip_point_0_temp 85000

若要为被动脱扣点设置不同的温度,请将新温度(单位为毫西)写入脱扣点温度描述符:

#Echo 65000 > /sys/class/thermal/thermal_zone0/trip_point_0_temp
通过sysfs对绊点所做的更改在重新引导时不会持久。要进行永久性更改,请修改设备树上的跳闸点温度。

临界跳闸点

当SOC温度达到临界跳闸点温度时,SOC产生中断,驱动器关闭系统以防止损坏硅。

读取临界跳闸点参数:

#Cat /sys/class/thermal/thermal_zone0/trip_point_1_type critical#Cat /sys/class/thermal/thermal_zone0/trip_point_1_hyst 2000#Cat /sys/class/thermal/thermal_zone0/trip_point_1_temp 100000

若要为临界脱扣点设置不同的温度,请将新温度(单位为毫西)写入脱扣点温度描述符:

#Echo 90000 > /sys/class/thermal/thermal_zone0/trip_point_1_temperature
通过sysfs对绊点所做的更改在重新引导时不会持久。要进行永久性更改,请修改设备树上的跳闸点温度。