[kmalloc函数的内幕不对所获取的内存空间清零分配的区域在物理内存中也是连续的flags参数GFP_KERNEL在空闲内存较少时把当前进程转入休眠以等待一个页面分配内存的函数必须

最近搞cpu 内核温度,总算是有点成就了。需要参考的文献有:

PCI Local Bus Specification

AMD相关:

BIOS and Kernel Developer's Guide for AMD Athlon 64 and AMD Opteron Processors

BIOS and Kernel Dveloper's Guide (BKDG) For AMD Family 10h Processor

BIOS and Kernel Dveloper's Guide ( For AMD NPT Family 0Fh Processor

AMD CPUID Specification

...

Intel相关:

Intel A3

...

Core Temp软件相关说明:

Intel and AMD recently published detailed, public information about the "DTS" (Digital Thermal Sensor), which provides much higher accuracy and more relevant temperature reading than the standard thermal diode sensors do

Core Templets you monitor Intel "Core Duo", "Core Solo" (Yonah), "Core 2 Duo", "Core 2 Extreme", "Core 2 Quad", " Pentium E2000" series, "Celeron 400/500" series (Allendale, Conroe, Merom, Kentsfield, Conroe-L respectively), "Xeon 3000/3200/5100/5300" series (Woodcrest, Clovertown respectively) and all AMD K8 (AMD64) and K10 (Phenom, Opteron) series die temperature.

The temperature readings are very accurate as the data is collected from a Digital Thermal Sensor (or DTS) which is located in each individual processing core, near the hottest part. This sensor is digital, which means it doesn't rely on an external circuit located on the motherboard to report temperature, its value is stored in a special register in the processor so any software can access and read it. This eliminates any inaccuracy that can be caused by external motherboard circuits and sensors and then different types of programs trying to read those sensors.

This is how the program works:

MSR), and detects the Tjunction temperature. A different MSR contains the temperature data, this data is represented as Delta in C° between current temperature and Tjunction.

So the actual temperature is calculated like this 'Core Temp = Tjunction - Delta'

The size of the data field is 7 bits. This means a Delta of 0 - 127C° can be reported in theory. But from preliminary tests, the reported temperature doesn't go below 0C°, no matter what kind of cooling was used.

* is: 'CPU Temp** = Value / 8'.

The sensor in AMD CPUs can report temperatures between -49C and 206C.

*K10 = Phenom (Agena), Opteron (Barcelona). The K10 reports a temperature value that is relative to a certain predefined value, it doesn't report the actual processor temperature! So take that into consideration.

**CPU Temp is because the Phenom/Opteron (K10) have only one sensor per package, meaning there is only one reading per processor.

刚接手这个的时候,可以说是一头雾水,完全不知道该怎么搞。首先接触到的就是hwmonitor和core temp 这两款软件,同时看到上面core temp 的说明,可以说知道一点东西了。可以它其中说的amd是在nb的特殊寄存器中,这个到底是什么寄存器了。当时没有去看amd的一些文档,就直接看是逆向hwmonitor和core temp软件,通过动态和静态分析了这两个软件的驱动和应用程序,只能说知道其中他们是在不断的进行端口读写分别是0XCF8和0xCFC这两个端口。你可以上网查找这两个端口是干什么的,之前由于我左右pci 配置空间读取问题,所以对这个两个端口不是很陌生。pci 配置空间相关说明就要看pci 规范了,说的很详细。

之后,看是学习cpu 手册了,因为我的机器是amd的,所以就先或许amd的温度吧。看了很多,刚开始还不知道什么事,慢慢的,就知道其中有一个thermal status register,这个寄存器中保存了当前核心温度。这个寄存器就是core temp所说的nb中的特殊寄存器。那么这个寄存器是如何读取的呢,看来了amd bios and kernel ‘guid 。。。中我们知道这个基础器是Fn3 E4.其中会说的pci配置空间。Fn3 是指读取pci配置空间时要用的到fun 3,而E4就是对应于这个fun 3的偏移为E4。读取这个32bit数据。然后我们就可以解析获取原始的当前温度了。

由于amd对这个寄存器有过修改,因而在解析的时候我们需要知道这是那种型号的。我们看到core temp是能获取k8和k10 的amd内核温度计算公式。那么是什么是k8什么是k10呢。

使用cpuid (eax = 0x1)得到的eax中的family,model,和stepping进行判断。

The Family is an 8-bit value and is defined as: Family[7:0] = ({0000b,BaseFamily[3:0]} + ExtendedFamily[7:0]). For example, if BaseFamily[3:0] = 0Fh and ExtendedFamily[7:0] = 01h, then Family[7:0] = 10h. If BaseFamily[3:0] is less than 0Fh then ExtendedFamily[7:0] is reserved and Family is equal to BaseFamily[3:0].

Model is an 8-bit value and is defined as: Model[7:0] = {ExtendedModel[3:0],BaseModel[3:0]}. For example,

if ExtendedModel[3:0] = 0Eh and BaseModel[3:0] = 08h, then Model[7:0] = E8h. If BaseFamily[3:0] is less

than 0Fh then ExtendedModel[3:0] is reserved and Model is equal to BaseModel[3:0].[1. BusyBox httpd CGI scriptsThe http daemon expects that CGI script is in subdirectory cgi-bin under main web d]

如果family > 0xF,那么就是k10.

而对于k8的是怎么判断的呢,family 为0xF,而除了

/* feature available since SH-C0, exclude older revisions */

(((model == 4) && (stepping == 0)) ||

((model == 5) && (stepping <= 1)))

这些类型的cpu都可以算是k8的。

如何读pci,应该也清楚了,就是通过0xcf8和0xcfc进行读取,但是需要busno,devno,funno和reg,这样才能读取到指定的数据。但是我们并不知道busno和devno啊。而funno就是0x3,而reg就是E4或A4.

首先我们根据cpu类型获取到时k8还是k10.这两种类型的cpu对应的deviceid是不同。k8 为0x1103而k10为1203.通过这两个数据以及baseclass,就可以在遍历过程中得到busno和devno了。后面就是对数据进行解析了。哦。。。还有一点就是在看了bios and kernel书之后,按照它的方式我们发现需要有个diodeoffset来进行校正。而temp(23-14bit)/(23-16bit),diodeOffset的值也是不同的。不管哪种,得到的数据总是有点问题。郁闷了。你想core temp算法确实是按照上面的方式进行的。currtemp =rawtemp/4 - 49 + basetemp;后来,偶然机会发现在linux的内核中有一个k8temp.c这个东西,这个就是获取k8的温度。认真的学习了代码。发现可以正确的获取内核温度。他的方法并不是上面先除4在减49的。而是用上面coretemp说明中的value -49进行的。这个value就是读取的(23-16bit)数据,这个让我有点奇怪,amd温度中说了,currenttemp添加为(23-14bit)。真是搞不清楚。

既然可以通过linux的k8temp.c中的方法获取到,那就这样吧。现在这个k8temp.c已经支持k10了。所以完全可以借用了。有一点需要说的就是,k8temp.c中不断的写端口,以获取其他sensor和core的温度(因为amd有每个core都有2个sensor),但是这个寄存器总是不能写成功。那如何获取其他的core温度呢。这就要使用windows api了。可以通过GetProcessAffinityMask和SetProcessAffinityMask进行。不断改变当前进程所在的核心,来获取不同核的温度。

新的酷瑞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,以检测这个核心的温度。Signature是通过读取MSR_IA32_BIOS_SIGN_ID得到的。

要获取这些驱动通过驱动才能读取。可以参看winio驱动代码。在我的下载资源中提供winio代码。

我想应该说的很明白了。

[简介许多类型的驱动程序编程都需要了解一些虚拟内存子系统如何工作的知识当遇到更为复杂、性能要求更为苛刻的子系统时,本章所讨论的内容迟早都要用到本章的内容分成三个

读取cpu温度的api_获取传感器温度-cpu 温度篇相关推荐

  1. 获取传感器温度-cpu 温度篇

    最近搞cpu 内核温度,总算是有点成就了.需要参考的文献有: PCI Local Bus Specification AMD相关: BIOS and Kernel Developer's Guide ...

  2. python获取cpu温度_获取树莓派的CPU和GPU温度(Python)

    在这篇文章里我将为你展示如何使用Python做一个简单的程序来监视你的树莓派温度.可能你还不知道,树莓派内置了一个传感器你可以用来获取树莓派的CPU和GPU温度. 这对于保护你的设备非常有用,举个例子 ...

  3. STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据

    STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据 市面上常见的模拟温度传感器有TI的LM35系列,然后使用中并不简便.MCP9701是Microchip公司推出的相似的模拟温度传 ...

  4. Windows系统下获取主板各区域温度的命令

    Windows下的WMI里提供了MSAcpi_ThermalZoneTemperature接口的,调用一下即可. WMI即Windows Management Instrumentation,是一个W ...

  5. java ipmi 获取服务器硬件信息(温度,风扇转速,内存数,硬盘数等等)

    本文通过vxipmi.jar获取 官方地址:http://www.veraxsystems.com/en/products/free-ipmi-library-java import java.net ...

  6. Rockchip RK3588获取芯片的实时温度

    Rockchip RK3588获取芯片的实时温度 RK3588的芯片有7路TS-ADC分别对应:芯片中心位置.A76_0/1.A76_2/3.DSU .A55_0/1/2/3.PD_CENTER. N ...

  7. 光纤传感器实验模块_飞秒激光制备异质光纤光栅的温度应变双参数传感器

    引言 光纤光栅传感器可用于温度.应变.压力.浓度等物理量的传感测量,具有抗电磁干扰.体积小.质量小.兼容智能设备等特点.其工作机理是基于波长编码减少解调光路中光源功率波动带来的测量误差,容易实现分布式 ...

  8. linux查看服务器电源风扇,nagios监控vsphere ESXi主机硬件状态(CPU风扇、电源模块、硬盘、温度)...

    nagios监控vsphere ESXi主机硬件状态(CPU风扇.电源模块.硬盘.温度) esxi 的只读账户和密码(本文以chkhardware/chkreadonly为例) 插架下载地址,此地址附 ...

  9. 传感器的温度补偿(温度修正算法)-Senior Mao

    传感器的温度补偿-是使用传感器时常遇到的问题,尤其是需要传感器工作在一个较宽的温度范围时,这个问题更加突出.这里描述的方法是在使用某型冷媒泄漏.压力传感器时,这种方法不一定是最好的,但是它比较简单,适 ...

  10. 电动车控制系统中转速、温度、角位移等传感器信号处理设计方案

    电动车控制系统中转速.温度.角位移等传感器信号处理设计方案 发布时间:2018-02-27 16:58:57 浏览次数:20 次 顺源科技针对当前电动汽车.太阳能/风能发电.轨道交通等节能环保大型项目 ...

最新文章

  1. JS获取HTML元素属性【转】
  2. elasticsearch java对象 驼峰原则_Elasticsearch简介与实战
  3. Spring Boot中配置文件application.properties使用
  4. iomem—I/O映射方式的I/O端口和内存映射方式的I/O端口
  5. Oracle树查询及相关函数
  6. 关于在openstack执行nova get-vnc-console命令,无法得到vnc url并提示服务器超时的问题描述...
  7. 计算机网络中的HTML,计算机网络分类有哪些
  8. 图的简单应用(C/C++实现)
  9. HDU2571 命运【动态规划DP】
  10. 项目开发版本控制----Git
  11. java 网络爬虫_使用Java实现网络爬虫
  12. unity素材三:未来城市场景
  13. 厦门大学继续教育计算机科学毕业难吗,厦门大学工资待遇
  14. Python在WRF模型自动化运行及前后处理中的应用
  15. 西安交通大学城市学院的计算机类专业,西安交通大学城市学院计算机系2020级专业分流会...
  16. LaTeX调整enumerate的间距
  17. qq音乐会员联合会员都有哪些
  18. 网口的标准POE供电
  19. yolov5l.pt下载
  20. 2095: [Poi2010]Bridges 二分+混合图欧拉回路(网络流)

热门文章

  1. 2021年全球与中国飞机飞行控制系统(FCS)行业市场规模现状及企业市场份额分析
  2. 尝试用朴素贝叶斯分析借款信用等级
  3. 目标检测综述学习笔记
  4. spyder pyecharts不显示_飞利浦292E2E评测丨宽屏显示器中的多面手
  5. 一个例子学会自相关互相关的计算
  6. 非均匀采样重建 matlab,对非均匀采样信号进行重采样
  7. FPGA实现cameralink高清相机解码
  8. 【音频处理】之 Matlab 实现信号的时域和频域的滤波
  9. flashfxp中文破解版|flashfxp v5.4绿色破解版下载免注册码(强大的fxp/ftp客户端)
  10. 10kv变电所工程电力监控系统的设计与应用