《树莓派实战秘籍》——1.5 技巧05监测树莓派的硬件-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

《树莓派实战秘籍》——1.5 技巧05监测树莓派的硬件

简介:

本节书摘来自异步社区《树莓派实战秘籍》一书中的第1章,第1.5节,作者: 【美】Ruth Suehle , Tom Callaway 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 技巧05监测树莓派的硬件

你是否担心你不在家时你的Pi投身疯狂派对?这个技巧是关于如何弄个摄像头对准它并将视频传输到Internet上的。开个玩笑!这个技巧中的工具只能监测你的这个小巧硬件的物理状态。

一个“正常的”Linux计算机可能会包括板载健康监测传感器,有相当多的监控芯片和元器件被用在各种系统上,但是对于树莓派来说,所有的硬件完全隐藏在Broadcom片上系统里面,因此你无法使用通常的方式访问它。

为了能够使用这些元器件监视你的Pi的健康,需要使用vcgencmd实用工具。任何可用的通用树莓派Linux发行版应该已经预安装了这个工具。如果你的发行版编译为支持ARM硬浮点,你可以在hardfp/子目录下查找,否则,可以在opt/子目录下查找。

检查硬浮点

在写这篇文章的时候,大多数Linux发行版(包括Pidora、Raspbian、Occidentalis、OpenELEC以及RaspBMC等)被构建为支持ARMv6硬浮点架构,因为这样可以提供树莓派的最佳性能。然而这些目标平台的一些老版本(以及其他操作系统平台)被构建为优化的ARMv6的软浮点。这两种优化级别彼此互不兼容。在Linux上,有一种很好的方法来检查是否支持ARMv6硬浮点,即使用readelf命令:


<a href=https://yqfile.alicdn.com/adc8c1bba7bdbf20fd9d8b6b4783d940fcde974a.png" >

你可以在树莓派的Linux发行版上直接运行此命令(可能需要先安装elfutils软件包),或者你也可以很方便地从已经装有readelf工具的树莓派Linux发行版并通过其他系统复制一份二进制文件或库文件。

如果二进制文件支持ARMv6硬浮点优化,你会得到类似下面的输出:


97a87857ee04f380db0190d782f0612299ac8af0

最后一行很重要:Tag_ABI_VFP_args: VFP registers。只有二进制文件被检查为构建时采用了ARMv6硬浮点优化时才会显示这些信息。
安装好vcgencmd工具后(如果需要),查看vcgencmd提供的选项:


<a href=https://yqfile.alicdn.com/d01ebe33b3bb1925e5833a32c42434fb857c7f4f.png" >

这将输出一个包含所有可以传递给vcgencmd工具的命令列表:


b1678e8f4533a73441b95f7de99a77154d3d72c9

不幸的是,关于这些命令以及它们是干什么的,上面的输出实际上并没有给出什么有用的信息。命令中有些看上去似乎是显而易见的,但是当你运行它们的时候,它们会这样返回:


<a href=https://yqfile.alicdn.com/9bb0230395dabd373c88d22b1fddc2fa0ad080a0.png" >

这个工具的文档极其匮乏,不过树莓派社区已经汇集并找到了一些命令的用法。
**
1.5.1 测量元器件电压**
vcgencmd measure_volts命令显示了一些树莓派关键元器件的电压,特别是:


bdbed4112e11799c8732db6f730bec0528cd34da

GPU处理器内核


<a href=https://yqfile.alicdn.com/e0e5df829a6956a67d2b371128a2dc21a6548680.png" >

SDRAM控制器


<a href=https://yqfile.alicdn.com/0a661177f396c65cac4929f9f3b367629c2b7a36.png" >

SDRAM输入/输出(I/O)


025eba221a46a96bf15df9bf2dc54f9df935f461

SDRAM物理内存

上述每一个元器件都可以作为选项传递给vcgencmd measure_volts命令(如果你没有指定参数,将返回core的值)。你也许会觉得奇怪为什么要关心并测量这些电压,而且在大多数情况下,你也许确实不需要关心它们。它们的值一般如表1-3所示:


0a7495b8276a31be5518e72dd6ab9037be84612c

你可能会关心这些元器件电压的唯一情况是:如果你决定将你的树莓派超频,在这种情况下这些电压均是可配置的(在技巧06中会有详细介绍)。

你也许希望这个命令返回系统主板电压(这个电压正常条件下在4.75V和5.25V之间变化),但它并不能。参见技巧09获取如何手工获取系统主板电压的相关内容。

1.5.2 测量温度
vcgencmd measure_temp命令会报告树莓派的BCM2835片上系统的core温度(摄氏):


<a href=https://yqfile.alicdn.com/ceb7916c1b6a6af05499bbac80ff5a9f1a692285.png" >

或者,你也可以直接读取/sys/class/thermal/thermal_zone0/temp文件获得同样的温度读数:


<a href=https://yqfile.alicdn.com/e95384426658b51bc3aedf8df57d69611ba825a0.png" >

趣味数学和科学

要将该值转换为摄氏温度,只需除以1000即可。要得到华氏温度,需要将摄氏温度乘以1.8再加上32。而要得到开尔文温度,则应将摄氏温度加上273.15。如此计算的温度值越来越高,是不是正如我们对树莓派的热情?
从监测树莓派硬件的角度来看,这种读数可能已经足够了。由于实际上CPU/GPU并没有分离(至少从物理和发热的角度来说没有分离),所以它只是给了你一个主板运行有多热的大致概念。也就是说,如果你想获得更详细的(或只是另一个)温度读数,你可以接入一个额外的温度传感器,如技巧37中所述。

1.5.3 监测内存划分
无论是强制分配还是动态分配,vcgencmd get_mem命令都可以返回ARM CPU和显卡GPU的内存值。

要查看当前分配给ARM CPU的内存大小,运行:


864c7197a607fa6dfadd63b9ec46b6d08a1e9cde

要查看当前分配给显卡GPU的内存大小,运行:


a0dc639c137aba452853d9bca7ab64e81612486d

1.5.4 检查自定义配置重写
你已经忘记了你对你的树莓派所做的配置更改?具体来说,那些在固件中更改的设置?你可以在/boot/config.txt中查看,这里的vcgencmd get_config命令也可以帮助到你。

要查看所有使用数字(整型)数据类型的配置,运行:


7f01bfb73e63cce4adb025c18aae1d1e2bd25edc

要查看所有使用文本(字符串型)数据类型的配置,运行:


88295d8258ada3490c890377fd58c6d76c053920

只有非常少的配置项是存储为字符串值而不是整型,因此如果vcgencmd get_config str命令没有返回任何值的时候,你不必过于惊讶。
如果你只是想检查某一个指定配置项的值,则用配置名称代替选项传递:


f14ba21694daaf77ea2073b49f6d0e93b2e17f1c

vcgencmd实用工具并不是对用户最友好的工具,但是它确实很深的介入到了树莓派的内部运作。由于这是一个开源工具(源代码可以从前述的树莓派GitHub固件库中checkout),如果你想深入了解树莓派硬件的内部工作原理的话,查看vcgencmd的源码将会是一个很好的起点。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章