檢測膝上型電腦的主機板,cpu,硬碟的溫度

2021-06-16 14:34:14 字數 2359 閱讀 7054

**

其實不算原創,資料幾乎都是通過 google 來自 internet :)

前段時間買了 hp-dv1702 膝上型電腦, 酷睿單核 cpu, 5400 轉硬碟, 看電影挺不錯的. 酷睿 cpu支援 speedstep 技術, 不忙的時候總是工作在 800mhz 左右,發熱量小,bios 設定風扇啟動溫度為 cpu 75度,平常工作中一天下來風扇也幾乎不轉,硬碟的溫度比較高,從網上查到左手邊熱是這款本本的通病。

筆者的想法是讓風扇在硬碟達到48、9度的時候讓風扇轉動起來,到設定的溫度停下,並可以看到主機板、cpu、硬碟的溫度。在風扇控制完成以後,檢測系統溫度的問題就顯出來了,一邊用別人的軟體看系統溫度,一邊手工來控制風扇的停和轉動,累。

1、主機板溫度的檢測

膝上型電腦的bios和台式電腦有一些區別,通常本本的bios acpi 會有乙個熱度表述區(thermalzone) 或其它acpi定義的溫度檢測區域,讀出這個區域的數值,就得到當前主機板上溫度感測器的值,xp/2000 支援acpi,所以很方便讀到。但台式電腦基本沒有thermalzone,要監測溫度,需要掃瞄系統匯流排。

主機板溫度在wmi中有兩個名字:1、root/cimv2/win32_temperatureprobe  2、root/wmi/msacpi_thermalzonetemperature 先檢測 win32_temperatureprobe 是否有物件,如沒有再檢測 msacpi_thermalzonetemperature 然後讀取成員 currenttemperature 為當前溫度,criticaltrippoint 為臨界溫度。此溫度是以絕對 0 度開始並以 1/10 度增加,公式如下

當前攝氏度 = (currenttemperature - 2732) / 10

2、硬碟溫度的監測

檢測硬碟溫度的工具或軟體,都是通過 s.m.a.r.t來讀取,對硬碟直接 deviceiocontrol 或者 wmi 都可以得到smart值.smart 資料儲存於 wmi 中 root/wmi/msstoragedriver_atapismartdata 命名空間中,其中屬性 'vendorspecific' 包含有硬碟溫度的資料,這是ata標準定義的。可能你讀出這些資料來會有些困惑,其實這是乙個結構,第乙個和第二個位元組代表 smart 版本資訊,從第三個位元組起定義 smart 的屬性,每個屬性為12位元組長,每個屬性的第一位元組為當前屬性定義,0x09 定義已經使用的小時數, 0xc2 為溫度屬性,第五位元組表示當前溫度。結構如下

struct smartattriubtes

struct vendorspecific

如筆者硬碟讀取如下數值,有些就省略了 ;

排列如下

win2000 不支援此 wmi 屬性,只能通過 deviceiocontrol 得到,如何實現請看考附錄 smart 的opensource 連線

3、cpu 的溫度檢測

新的酷瑞cpu和amd的cpu 內部都整合有溫度感測器dts (digital thermal sensor),每個核心有乙個,以前的移動cpu好像也支援溫度探測,但手頭沒有這樣的cpu沒法做測試.amd 的溫度值儲存在 nb 暫存器中,酷瑞cpu 的 dts 值儲存在 msr 0x19c 中,可以通過 rdmsr 來讀取

這裡只說酷睿cpu的讀取過程

intel 定義 eax=6 執行 cpuid, 然後測試 eax 第一位是否為1,如果為1表示cpu支援dts ,當然之前應該以 eax=0 執行 cpuid 檢測 eax 支援的最大命令數,如果小於6就肯定不支援dts。

讀取dts:1 以 ecx=0xee 執行 rdmsr 指令, 測試 eax 的第30位是否為 1, 如果為 1 表示溫度計算的初始值為 85 度否則表示從100度開始計算,這個值稱為 tjunction. 然後以 ecx=0x19c 執行 rdmsr 指令, eax 的 16:23 位為表示當前dts 值,這個值並不代表當前溫度,而要以下面公式計算.

當前cpu溫度 = tjunction - dts

注意 signature 為 0x6f1, 0x6f0的 cpu dts 值直接代表當前溫度而不用tjunction 相減. 而 signature 小於等於 0x6f4 的 tjunction 一直為100, 如果你是雙核的cpu 可以使用 setprocessaffinitymask api 來指定執行的cpu,以檢測這個核心的溫度。呵呵,我就不用啦,本本是單核的

另 rdmsr 指令需要執行在 0 級的**才能執行.所以寫乙個簡單的驅動也是必須的.

呵呵,很少寫文,不通順之處請包含,enjoy!

s.m.a.r.t 的 opensource

在 intel **上的罵站,可以看到關於 dts 和 tjunction 的一些資訊

core temp 講述她是如何工作的

關於 msstoragedriver_atapismartdata

測試cpu速度,開源

檢測膝上型電腦的主機板,cpu,硬碟的溫度

其實不算原創,資料幾乎都是通過 google 來自 internet 前段時間買了 hp dv1702 膝上型電腦,酷睿單核 cpu,5400 轉硬碟,看電影挺不錯的.酷睿 cpu支援 speedstep 技術,不忙的時候總是工作在 800mhz 左右,發熱量小,bios 設定風扇啟動溫度為 cpu...

檢測膝上型電腦的主機板,cpu,硬碟的溫度

其實不算原創,資料幾乎都是通過 google 來自 internet 前段時間買了 hp dv1702 膝上型電腦,酷睿單核 cpu,5400 轉硬碟,看電影挺不錯的.酷睿 cpu支援 speedstep 技術,不忙的時候總是工作在 800mhz 左右,發熱量小,bios 設定風扇啟動溫度為 cpu...

檢測膝上型電腦的主機板,cpu,硬碟的溫度

其實不算原創,資料幾乎都是通過 google 來自 internet 前段時間買了 hp dv1702 膝上型電腦,酷睿單核 cpu,5400 轉硬碟,看電影挺不錯的.酷睿 cpu支援 speedstep 技術,不忙的時候總是工作在 800mhz 左右,發熱量小,bios 設定風扇啟動溫度為 cpu...