也许是最良心的硬件信息读取工具:RW-everything
本专栏不遗余力的介绍了很多BIOS/UEFI和计算机的硬件知识,相信很多读者都已经跃跃欲试,想要亲手实验一下其中的过程,但往往苦于没有合适的工具,无法查看硬件的状态。这里推荐一个堪称最良心的硬件信息查看工具:RW-everything。这个工具没有JTAG工具强大,但对于一般用户来说却是足够了。实际上,我们业内做BIOS的固件工程师、硬件工程师也大多使用它来随手查看或者设置一些硬件的信息。它的功能十分强大,关键是只有一个版本:免费的版本(接受捐赠)!而且它的作者是台湾地区的同胞,非常难得。堪称良心软件了。
下载它请到官网:
http://rweverything.com/
安装过程也十分简单,这里就略过了。我们结合几个例子来看看它能干什么。
PCI配置空间访问
PCI是整个计算机系统的骨干之一,十分重要。我们在前面介绍过不少PCI/PCIe的相关知识:
下面我们来实践一下,在Access里选取PCI:
开启PCI窗口:
红框是PCI设备的地址 BDF(BUS:Device:Function),绿框内是该设备的PCI配置空间,篮筐内提示信息。我们可以在绿框内修改PCI配置空间内寄存器的内容,当然前提是你知道你在做什么,瞎改可能会造成该设备停止工作。
那么系统内到底有哪些PCI设备呢?我们点击该窗口的PCI tree按钮,打开PCI tree窗口:
我们可以看到这台计算机内的PCI设备树。红框内的信息如果你阅读了相关知识的话就会知道,一个1394的控制器被挂接到南桥的PCIe rootport下面了(BDF:0/1C/07)。厘清系统中的设备树,就会对你的计算机组成心中有数了。点击设备树窗口的设备,PCI配置空间的设备也会跟着变化,十分方便。
任意内存/IO访问
RW-everything可以访问任何物理地址:
注意这里是物理地址,不是线性地址。这个地址有可能是真正的内存、也有可能是Memery IO(MMIO)。我们在PCI的内存BAR上分配的MMIO也可以通过它来查看。
内存SPD内容
内存是系统的重要组成部分,我们也花了不少篇幅介绍内存:
内存系列三:内存初始化浅析
那么我们计算机内的内存条的到底它的参数是什么呢?
我们可以看到主板上内存SPD信息:
这是第四根内存条,SMBus的地址是0xA6。第一根到第四根地址一般分别是A0,A2,A4,A6。红框部分是SPD的信息,可以看出它是DDR3(好吧,我承认是比较老),大小是2G一根,频率666MHz,CL等的信息也在下面。
CPU MSR
CPU的介绍也占据了本栏目的不少篇幅:
CPU的设置往往是通过填写MSR来完成的。我们点开CPU MSR:
缺省的窗口是设置Cache熟悉的MTRR寄存器信息,大家可以结合IA32 Manual来看。在User标签栏里,我们可以增加自己的内容,格式是
<RegisterName>=<0xAddress>
我增加了MSR 0xCE, PLATFORM_INFO寄存器的内容:
双击PLATFORM_INFO可以查看详细信息:
我们重点关注bit8到bit15的内容,根据spec,它是Maximum Non-Turbo Ratio的内容,也就是不开启Turbo mode的最大倍频,这里他是30。我们的基频是100MHz,所以结果应该是3GHz,我们来检验一下:
完全正确,同时内存也符合我们发现的结果。大家也可以按照IA32 manual里的MSR自己玩一下,但是有一点必须要提醒,有些MSR被BIOS保护,在操作系统阶段不能访问。一旦在RW-Everything里面访问该MSR就会触发异常,造成蓝屏,大家在尝试之前把重要文档存盘。
ACPI Table
ACPI是重要系统硬件不同的重要抽象:
RW-Everything可以方便的显示你的电脑ACPI是什么样的:
这些RSDP、XSDT等等标签栏是ACPI的各种表,其中DSDT和SSDT十分重要,UEFI固件工程师需要特别关注。
结论
RW-Everything的功能很多,限于篇幅这里就不再罗嗦了,大家可以自行摸索。建议大家结合这篇文档:
边阅读硬件手册,边动手实验一下。如果一时找不到合适你的电脑的文档也不要紧,这些年来,硬件寄存器有着延续性,没有发生太大变化,很多时候都是增加新功能罢了,这些新功能一般读者也不会用到,没有多大关系。
另外对UEFI/BIOS工程师来说,在Shell下还有个很好的工具:RU。它的界面是这样:
http://ruexe.blogspot.tw