前阵子帮人收拾一台 Z590 平台的机器装完系统头一件事就是开 Libre Hardware Monitor 盯温度。结果打开一看CPU 那一栏只有占用率在跳温度节点整个是空的主板温度和硬盘温度倒是活蹦乱跳。换成别的工具一测CPU Package 温度好端端摆在 40 来度。这就很说明问题了——传感器没坏是 Libre Hardware Monitor 没读到。后来陆续又碰到几台 Intel 11 代处理器的机器症状高度一致有的只显示核心温度不显示封装温度有的干脆一个温度项都没有还有的显示个 0 度或者负数。这篇就把这条线上的坑一次说透从取数原理到三步修复再到怎么验证修没修对全给你捋清楚。不管你是刚装完机的新手还是天天跟硬件打交道的运维照着走一遍基本都能解决。1. 先弄明白 LHM 是怎么把温度读出来的1.1 三条完全不同的取数通道坏一条就少一块数据很多人以为监控软件读温度就是一个 API 调用的事其实背后是三条互不相干的路子任何一条断了你在界面上看到的就是空白或者错值。第一条是CPU 内核自带的数字温度传感器DTS走的是 MSR 寄存器通道。CPU 内部每个核心都有一个温度二极管固件把「距离上限还有多少度」这个偏移量写进特定寄存器软件读出来再做一次减法就得到绝对温度。这条路最准也是所有监控软件显示「CPU Core #1」到「CPU Core #N」「CPU Package」这些项的来源。它的前提是软件必须拿到Ring 0 权限因为读 MSR 指令在用户态是被禁止的。第二条是主板上的 Super I/O 芯片走 SMBus/LPC 通道。主板上那颗小芯片负责采集一堆电压、风扇转速和几个外接热敏电阻的温度CPU 插座附近通常也挂一个。这条路读到的是「主板测到的 CPU 区域温度」比核心温度滞后参考价值有但精度差一截。第三条是ACPI 热区Thermal Zone走 WMI 通道。这是主板固件按规范上报的粗略温度很多消费级主板压根就不实现或者只给一个常量所以你用 PowerShell 查MSAcpi_ThermalZoneTemperature查不到东西是常态不是故障。把这三条理顺了你就明白为什么会出现「主板温度有、CPU 温度没有」这种诡异组合——Super I/O 那条路通了MSR 那条路断了。反过来的情况也存在。修的时候一定先判断断的是哪条别上来就重装软件。1.2 为什么偏偏是 11 代处理器容易哑火Intel 11 代是分两个完全不同的架构的桌面端叫 Rocket Lake移动端叫 Tiger Lake。这两者在温度读取上的实现细节不同但踩坑的逻辑是一致的我总结成三点。第一温度上限TjMax的编码位置和取值在新平台上做了调整。软件算绝对温度靠的是绝对温度 TjMax − 相对偏移量这个公式。老版本软件的型号库里没有新平台的条目TjMax 取到 0 或者取错减出来的结果自然是 0 度、负数或者离谱的高温。这不是传感器没数据是换算的基准值错了。第二500 系主板换了一批新的 Super I/O 芯片。像 Nuvoton 的 NCT6798D、NCT6799DITE 的 IT8688E、IT8689E 这些型号在 0.8.x 时代的软件里根本没有对应的寄存器映射表软件扫描过去不认识主板温度、风扇转速整块就消失了。这类问题的特征是「设备树里连 Mainboard 节点都残缺」。第三权限门槛被系统收紧了。较新的 Windows 版本默认开启了内核隔离相关功能会拦截这类需要底层访问的驱动程序。软件启动看起来一切正常界面也渲染出来了但它拿不到 Ring 0所有走 MSR 的读数静默失败界面上就是一片空白连个错误提示都不给你。1.3 影响范围对号入座看看你在不在圈里我把这几年遇到的案例按平台归了个类你可以直接对照自己的配置。平台类型典型型号常见主板芯片组典型症状桌面 11 代i5-11400/11500/11600、i7-11700、i9-11900 系列B560、H510、Z590温度项全空或只显示 0 度/负数移动 11 代Tiger Lake 低压/标压移动版集成在整机方案里只有 Package 温度核心温度全缺跨代混装11 代 CPU 配 400 系老主板需厂商支持B460、Z490主板温度正常CPU 温度缺失软件版本侧0.8.x 及更早版本不限新型号 Super I/O 完全识别不到还有一个容易被忽略的维度是软件版本区间。同一台机器用旧版打开是空白换成新版可能就正常了也可能是相反的——新版修好了 11 代的 TjMax 换算但你系统里的驱动拦截还在照样读不出来。所以「换版本」和「解权限」这两件事必须分开验证别混在一起做否则出了问题你都不知道是哪一步起的作用。2. 第一步先把权限和驱动这道关打通2.1 别小看「以管理员身份运行」和安装路径这是最容易被跳过、又最容易出问题的一步。Libre Hardware Monitor 这类工具不是装上就能用它每次启动都需要向系统申请加载一个内核态驱动文件目录里那个.sys后缀的文件就是干这个的。普通权限启动时这个申请会被直接拒绝软件不会弹窗报错只是默默把需要底层访问的传感器全部跳过。正确的做法不是每次右键点一下而是把这个动作固化下来。最省事的方案是在快捷方式的属性里勾上「以管理员身份运行此程序」一劳永逸。如果你像我一样喜欢用脚本批量拉起一堆工具可以写个启动器echo off cd /d %~dp0 powershell -Command Start-Process LibreHardwareMonitor.exe -Verb RunAs更优雅的方案是用系统自带的任务计划程序建一个任务触发器设成用户登录操作里指向程序路径同时在「常规」页勾选「使用最高权限运行」。这样开机能自动起、还不用每次点确认框做长期监控特别合适。路径这块有两个硬性要求。一是不要把程序放在压缩包里直接双击运行Windows 对压缩包内文件的处理方式很特殊.sys驱动文件往往解不出来软件自然加载不到驱动。二是路径里别带特殊字符和过长的中文目录某些情况下驱动加载会因为这个失败而且失败得毫无提示。老老实实解压到一个短路径下比如D:\Tools\LHM\能省掉一半玄学问题。注意如果解压后目录里压根找不到.sys文件别怀疑系统是压缩包没解全。有些下载渠道会给一个残缺的包重新下一份完整的即可。2.2 内存完整性和驱动阻止列表是这两年的头号拦路虎如果说权限是第一道门那这个就是第二道而且更隐蔽。较新的 Windows 版本默认开启了一项基于虚拟化的代码完整性保护它会拒绝加载任何未通过微软签名认证的内核驱动。Libre Hardware Monitor 用的驱动显然不在白名单里结果就是软件正常运行、界面正常显示、但所有底层读数全部为空。检查路径很固定打开系统设置里的「Windows 安全中心」进「设备安全性」找到「内核隔离」区域点「内核隔离详细信息」看「内存完整性」这个开关的状态。如果是开的关掉它然后必须重启改完不重启等于没改。同一页面上还有一个「Microsoft 易受攻击驱动程序阻止列表」的选项这个东西在较新的系统版本里会主动拦截一批历史上有安全争议的驱动。如果关了内存完整性还是不行可以试着把这个也关掉。但这里必须把话说清楚这两项都是实打实的安全防护关掉会降低系统对恶意驱动的抵抗能力。我的建议是只在排查阶段临时关闭确认问题解决后如果你不是长期挂着监控可以考虑再打开如果确实需要长期监控那就接受这个取舍并且把软件来源控制在自己信得过的渠道。图形界面点不动的时候也可以用管理员权限的命令行改注册表改完同样要重启# 关闭内存完整性需重启生效 Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity -Name Enabled -Value 0 -Type DWord # 关闭易受攻击驱动阻止列表需重启生效 Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\CI\Config -Name VulnerableDriverBlocklistEnable -Value 0 -Type DWord还有一类情况是杀毒软件或终端防护软件在中间拦截。表现是软件启动瞬间有个一闪而过的报错或者干脆静默退出。这时候去安全软件的拦截记录里翻一下如果看到针对该程序目录下.sys文件的拦截条目把它加入信任区就行。2.3 怎么确认驱动到底加载没有别靠猜用三个手段交叉确认五分钟就能定位到底卡在哪。方法一看程序目录。启动之后观察目录里有没有新增的日志文件或者驱动释放文件有些版本会把驱动释放到系统临时目录启动瞬间能看到。如果目录完全没变化说明程序连驱动释放这一步都没走完。方法二看系统事件日志。打开事件查看器进「Windows 日志」下的「系统」按时间倒序排看看程序启动那个时间点附近有没有驱动加载失败的记录。签名验证失败、加载被策略阻止这类事件这里都会有痕迹错误码通常能直接指向原因。方法三用设备管理器看非即插即用设备。在设备管理器里点「查看」菜单勾上「显示隐藏的设备」然后展开「非即插即用驱动程序」这一节。如果驱动加载成功这里能看到对应的条目加载被拦的条目不存在或者带黄色感叹号。这三步做完你就能确定问题到底是「权限不够」「被系统拦了」还是「被安全软件拦了」后面的处理才有针对性。我在实际排查里最常遇到的是第二种占了七成以上尤其是那种「以前好好的重装系统后就不行了」的案例基本都是这个原因。3. 第二步把传感器源和显示项配对正确3.1 设备树里真正该盯的是哪几个节点权限通了之后软件界面左侧会出现一棵设备树。这棵树的层级结构是「设备 → 传感器类别 → 具体传感器项」很多人看到一堆项就懵了其实只需要盯住三个位置。CPU 节点下的 Temperatures 分类。展开后应该能看到 CPU Core #1 到 CPU Core #NN 等于物理核心数、CPU Core Max、CPU Core Average、CPU Package 这几项。如果这个分类整个不存在那就是第一步的驱动问题没解决。如果分类存在但里面是空的说明驱动在、但 MSR 读取被别的东西干扰。Mainboard 节点下的 Temperatures 分类。这里显示的是 Super I/O 芯片采到的值通常会有「Temperature #1」「Temperature #2」这种编号项具体含义得查主板手册。这一块有数据但 CPU 那块没有基本可以断定是 MSR 通道的问题而不是硬件坏了。CPU 节点下的 Loads 分类。这个是占用率走的是性能计数器不需要底层权限所以它永远都有数据。很多人被它骗了——看到 CPU 节点有内容就以为软件工作正常其实那只是占用率在跳温度压根没读到。还有个小细节值得说某些版本和某些平台上CPU 节点下会多出一些名字很长的项目比如带「Distance」字样的那是「距离温度上限还有多少度」的原始偏移量不是绝对温度别拿它当温度看。看到这个数值随着负载升高而变小说明方向是对的。3.2 从 TjMax 和偏移量算一遍你就懂 0 度和负数怎么来的这一段是整篇文章最「硬」的部分搞懂了它你以后看任何监控软件的异常读数都能一眼判断出问题性质。CPU 内部的温度传感器上报的不是绝对温度而是相对值。具体来说一个寄存器里存着「温度上限」另一个寄存器里存着「当前距离上限还差多少度」。软件要做的是减法绝对温度 TjMax − 相对偏移量举个具体例子。11 代桌面处理器常见 TjMax 是 100 摄氏度。假设当前读到的偏移量是 45那么绝对温度 100 − 45 55 摄氏度负载上去了偏移量变小比如变成 20那么绝对温度 100 − 20 80 摄氏度逻辑很顺对吧。现在问题来了如果软件从型号库里取到的 TjMax 是错的取成了 0会发生什么绝对温度 0 − 45 −45 摄氏度软件内部一般会把负数钳制成 0 显示出来于是你看到的就是一个永远不动的 0 度。这就是「显示 0 度」这个症状的根因——不是读不到是算错了。还有一种情况是有效位判定失败。这类寄存器的高位有个标志位表示这次读数是否可信。如果软件读取时机不对或者被虚拟化层拦截导致读到全零标志位判定为无效软件就直接跳过该项不显示于是你看到的就是「分类在、项缺失」。理解了这一点你就能得出一个重要结论「显示 0 度」和「什么都不显示」是两类不同的问题。前者通常是软件版本或型号库的问题后者通常是权限和驱动的问题。分开处理效率能高一大截。界面表现大概率根因优先处理方向温度分类整个不存在驱动未加载 / 被系统拦截第一步权限与驱动分类存在里面一片空白有效位判定失败 / 被虚拟化层干扰第二步交叉验证 第三步换版本显示 0 度或负数TjMax 取值错误第三步升级版本只有 Package没有 Core核心数识别异常第三步升级版本 换备用读取模式主板温度也缺失Super I/O 型号不认识第三步升级版本3.3 三种独立手段交叉验证别被单一读数骗了修完之后必须验证而且不能只看一个来源否则很容易得出错误结论。验证手段一用 PowerShell 查固件上报的热区。这是完全独立于监控软件的一条路走的是系统的 WMI 接口。打开 PowerShell 跑这段Get-CimInstance -Namespace root/WMI -ClassName MSAcpi_ThermalZoneTemperature | Select-Object InstanceName, {nTempCelsius;e{[math]::Round(($_.CurrentTemperature / 10) - 273.15, 1)}}注意这里的原始单位是十分之一开尔文所以要除以 10 再减 273.15 换成摄氏度这是很多人第一次写会算错的地方。跑完如果返回了数据说明固件至少上报了一个热区如果返回空也不代表机器有问题——相当多的消费级主板压根不实现这个接口这是设计如此不是故障。验证手段二进固件设置界面看硬件监控页。重启进 BIOS/UEFI 设置找硬件监控或者 PC Health 那一栏那里显示的是主板自己采的温度不依赖任何操作系统。如果那里温度正常说明硬件层面没问题纯粹是软件侧的事。这个手段的价值在于排除硬件故障避免你在一台真正散热有问题的机器上折腾软件。验证手段三跑个负载看数值动不动。空载记一个数然后开个压力测试跑两三分钟再看数值。真实的温度读数一定会跟着涨通常能涨二三十度。如果读数纹丝不动哪怕数值看起来很合理比如恒定的 45 度那也说明这个值是假的——很可能是某个固定常量或者读取失败的占位值。这三条交叉下来你对「修没修好」就有确定答案了。我一般还会加一条同时开两个不同的监控工具对比如果两个工具读数差在 3 度以内基本可以信任差出十几度那就得怀疑其中一个的换算基准有问题。4. 第三步版本、固件与软件冲突的补刀4.1 版本选择和目录规范是很多人反复失败的原因前两步做完还是不显示八成是版本问题。这个软件的更新节奏很有意思型号库和寄存器映射表是跟着版本走的新平台的支持往往滞后硬件上市几个月甚至更久。11 代桌面平台刚上市那阵旧版本对它的支持就是不完整的TjMax 取值表里没有对应条目Super I/O 表里也没有 500 系主板的新芯片。所以第一步操作是换成当前的最新稳定版。别用那些来路不明的修改版、汉化版、绿色版这类包经常被替换掉驱动文件或者阉割掉某些功能模块问题会变得更难排查。去项目的官方发布页下原始包解压到本地目录再用。换版本的时候有个细节必须注意新旧版本不要共用一个目录。有些人图省事把新文件覆盖到旧目录里结果残留的旧配置文件还在生效表现就是「换了新版还是一样」。正确做法是新建一个干净目录把新版本解压进去配置全部重新设一遍。配置文件通常就在程序同目录下删掉它等于恢复出厂设置遇到各种诡异问题时这招特别管用。还有一个容易踩的坑是运行库依赖。这类基于 .NET 的工具对运行库版本有要求系统里缺了对应版本程序要么起不来要么起来之后某些功能模块加载失败。表现是界面正常但部分传感器项永远为空。遇到这种情况装一个较新的 .NET 桌面运行时通常能一次性解决。4.2 固件设置里几个容易被忽略的开关软件侧折腾完还是不行就得往固件层看了。这里有几个开关值得确认。硬件监控功能是否启用。部分主板的固件设置里有独立的「硬件监控」开关关掉之后 Super I/O 芯片就不再采集数据操作系统侧自然什么都读不到。这个选项通常在「高级」菜单下的监控相关页面里名字各厂商不太一样找带 Monitor、Health、Sensor 字样的就对了。虚拟化相关功能的影响。开启某些虚拟化功能后底层寄存器的访问路径会经过虚拟化层部分工具在这个环境下读取会失败或者读到无效值。如果你确实不需要这些功能比如不跑虚拟机、不用某些基于虚拟化的安全特性可以临时关掉验证一下。但我得说清楚这只是排查手段验证完该开还是得开长期关掉虚拟化换一个温度读数这笔账不划算。快速启动的影响。系统的快速启动功能会让机器在「关机」时进入一种半休眠状态硬件状态没有被完全重置某些情况下会导致传感器初始化不完整。如果你发现「重启之后正常关机再开机就不正常」那就把快速启动关掉试试这个因果关系虽然听起来离谱但在实际案例里确实出现过。4.3 总线争夺谁在偷偷占用 SMBus这一类问题比较隐蔽症状是「CPU 核心温度正常但主板温度、风扇转速整块消失或者数值乱跳」。原因在于主板上的 SMBus 是一条共享总线除了监控软件还有一堆东西会去访问它灯效控制软件、风扇调速软件、某些外设的管理工具、甚至部分键盘鼠标的驱动。同一时刻只能有一个程序占用总线谁先抢到谁用其他程序读到的就是垃圾数据或者干脆超时失败。排查方法很直接把系统托盘里所有跟硬件相关的常驻程序全部退出包括灯效软件、风扇控制软件、外设管理工具然后重启监控软件再看。如果这时候数据回来了那就一个个往回加加到哪个出问题元凶就找到了。解决思路有两条。一条是错峰使用把监控软件的启动时间延后等灯效软件初始化完了再启动很多时候就能共存。另一条是二选一如果你只是偶尔看看温度那就别让灯效软件常驻反过来如果灯效是刚需那就接受监控软件读不到主板数据这个事实反正 CPU 核心温度走的是 MSR 通道不受总线争夺影响。提示判断是不是总线争夺有个快速方法——看数据是「完全没有」还是「有但乱跳」。完全没有通常是驱动或权限问题有但乱跳、时有时无、数值明显不合理才更可能是总线被抢。5. 速查表和我实际踩过的坑5.1 症状、原因、处置一张表看完排查的时候按这张表从上往下走绝大多数情况三步之内能定位。序号症状表现最可能原因处置动作验证方式1双击没反应或闪退权限不足或运行库缺失管理员运行补装运行时能正常出界面2界面正常只有占用率没温度内核驱动被系统拦截关内存完整性并重启设备管理器能看到驱动条目3主板温度也没有安全软件拦截驱动文件加入信任区目录下驱动文件存在4温度显示 0 度型号库 TjMax 取值错误升级到最新版本数值随负载变化5只有 Package 没 Core核心数识别异常升级版本清空配置重来核心项齐全6主板数据乱跳或时有时无SMBus 被其他软件占用退出灯效/风扇类软件数据稳定不跳变7重启正常关机再开不正常快速启动导致初始化不完整关闭快速启动多次冷启动均正常8固件里温度就异常真实硬件或散热问题清灰、换硅脂、查散热器固件监控页数值正常5.2 我踩过的四个坑个个都花了不少时间坑一以为关了开关就生效忘了重启。这是最蠢也最常见的一个。关完内存完整性直接双击程序还是空白然后开始怀疑人生折腾了半小时才想起来没重启。这类安全特性的开关全部需要重启才生效改完先重启再验证能省掉大量无效排查。坑二在压缩包里直接运行。有个同事把压缩包下到桌面直接双击里面的可执行文件运行界面能出来但温度永远是空的。查了半天权限、查了半天系统设置最后发现目录里根本没有驱动文件。这类工具必须完整解压这是硬性前提没有例外。坑三新版本覆盖装到旧目录配置残留导致假失败。我一度以为新版本也没修好因为换上去症状一模一样。后来把整个目录删掉重新解压配置全部重设一次就正常了。升级这类工具的正确姿势是全新目录 重新配置覆盖安装是给自己找麻烦。坑四拿「距离上限的偏移量」当温度看。有些版本会把原始偏移量也列出来数值大概在 40 到 80 之间看起来特别像温度。我第一次看到还以为温度异常低折腾半天才发现那是距离上限还有多少度方向完全反了。看到数值随负载升高而下降的那不是温度别搞反了。5.3 想长期省心就把启动和查看这两件事自动化排查完只是解决当下想以后不再折腾可以做两件小事。第一件是把启动固化成计划任务前面提过设成登录时触发、最高权限运行。这样每次开机自动起来不用手动点、不用过权限确认框也不会出现「忘了用管理员运行」这种低级失误。第二件是开启程序自带的远程查看功能。较新版本里有个内置的小型 Web 服务开启后可以用浏览器访问本机的一个端口查看传感器数据菜单里找带 Server 字样的选项就能开。这个功能在压力测试的时候特别好用——你全屏跑着测试软件旁边用手机或者另一台机器开个网页就能实时看温度不用来回切窗口。不同版本的菜单名称和默认端口会有差异具体以你手上那版的设置为准。另外建议养成一个习惯换硬件、换系统、换大版本更新之后第一时间打开监控工具确认一遍读数是否正常。很多问题是在环境变动后才出现的早发现早处理比等到机器莫名其妙降频了才回头查要省事得多。我个人在实际操作中的体会是这类「读不到温度」的问题九成以上都不是硬件故障而是权限、版本、配置这三者中某一环没对上。真正需要拆机检查散热的比例很低。所以遇到问题先别慌着怀疑硬件按「权限 → 版本 → 冲突」这个顺序走一遍绝大多数情况下半小时内就能搞定。最后再补一句实在话监控软件读数是给你做参考的不同工具之间差个三五度很正常别为了两三度的差异反复折腾把时间花在确认散热器压没压紧、硅脂涂没涂匀上收益要大得多。
阅读完成 · 觉得有帮助?