【问题标题】:How do I access a specific register of my Intel chipset?如何访问我的英特尔芯片组的特定寄存器?
【发布时间】:2013-08-11 19:58:44
【问题描述】:

我想读取我的英特尔芯片组的“TSTR”寄存器(热传感器温度计读取寄存器)。 我发现__readmsr 函数是我所需要的。 我还设置了内核驱动程序,因为该功能仅在内核模式下可用。

但我不知道如何访问注册表... 在芯片组的datasheet 中,在第857 页中说明了寄存器的偏移地址为TBARB+03h

我怎样才能使用这个地址?那里有可以帮助我的教程吗?

谢谢!

【问题讨论】:

  • 看起来其实是个PCI寄存器
  • “这些热内存映射配置寄存器的基本内存在 TBARB (D31:F6:Offset 40h) 中指定。”最后一位十六进制确实是 PCI 设备配置空间中的偏移量

标签: windows assembly kernel driver intel


【解决方案1】:

据我所知,尝试做完全相同的事情,__readmsr 确实是访问寄存器的正确命令:

http://msdn.microsoft.com/en-us/library/y55zyfdx%28v=VS.100%29.aspx

但是我正在开发 i5,以及英特尔的文档
http://www.intel.com/content/www/us/en/intelligent-systems/piketon/core-i7-800-i5-700-desktop-datasheet-vol-2.html
建议像 MC_RANK_VIRTUAL_TEMP 条目之类的东西是寄存器,所以它应该可以工作,所以你可能走在正确的轨道上.. 特定的寄存器在第 272 页。所以从技术上讲,这确实是答案,在我的例子中是 __readmsr(1568)。 但是我正在努力说服 Visual Studio 2010 在内核模式下构建它,这似乎不太情愿,我不断收到特权指令错误。当我解决这个问题并且整个程序正常工作时,我会写一个教程一般的流程,不过在那之前我只敢给出理论上的答案。如果您的编译器倾向于听您说的话,只需添加 /kernel 编译器选项,因为您只是读取而不是编辑寄存器,它应该是安全的。

编辑: 还有这篇文章,答案或多或少暗示了我正在尝试做的事情,虽然没有比我到目前为止更多,但还是看看吧:
How to access CPU's heat sensors?

【讨论】:

    【解决方案2】:

    "该指令必须在特权级0或实地址模式下执行,否则会产生一般保护异常#GP(0)。"

    http://faydoc.tripod.com/cpu/rdmsr.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 2016-03-26
      相关资源
      最近更新 更多