helloguy 发表于 2014-8-11 19:02:42

查看CubieBoard1的CPU温度

本帖最后由 helloguy 于 2014-8-11 19:13 编辑

我有一块CubieBoard1一直苦于无法得到CPU的温度。最近看到“如何得知 CubieTruck CPU 溫度”,既然A20都有温度传感器,那A10应该也带有。通过A20的User Manual发现温度传感器寄存器位于CPU触摸屏控制器(TP Controller)中。反过来查找A10的User Manual 发现A10也是一样的,只是手册中时一笔带过的,甚至连寄存器地址都写错了。A10的温度数据寄存器位于0x01c25020,低12位有效。与A20的地址是一样的。
      既然如此就好办了:
第一步,加载SUNXI调试模块(我用的是CBOS系统,用lubuntu的可以自己试试):modprobe sunxi-dbgreg没任何提示,说明加载成功。
第二步,将文中的脚本复制到CubieBoard下发现无法使用,一大堆错误提示。
      原脚本如下:#! /bin/sh

echo ‘f1c25000:27003f’ > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo ‘f1c25010:40000′ > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo ‘f1c25018:10fff’ > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo ‘f1c25004:10′ > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo ‘f1c25020′ > /sys/devices/virtual/misc/sunxi-dbgreg/rw/read;

output=$(tail -n 1 /var/log/syslog | awk ‘{print $7}’)
degree=$(((output-1447)/10))
point=$(((output-1447)%10))
printf “Your CubieTruck’s CPU current temperature is ‘\033于是研究了一下脚本,发现是对相关寄存器的操作,模仿的改了好久脚本终于可以使用了。
      脚本大致如下(现在没开CubieBoard凭印象改的):#! /bin/sh
echo f1c25000:27003f > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write
echo f1c25010:40000 > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write
echo f1c25018:10fff > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write
echo f1c25004:10 > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write
echo f1c25020 > /sys/devices/virtual/misc/sunxi-dbgreg/rw/read
output=$(demsg | tail -n 1 | awk '{print $3}')
degree=$(((output-2000)/10))
point=$(((output-2000)%10))
printf "Your CubieBoard’s CPU current temperature is '\033将脚本保存为temperature.sh(名字可以任意,扩展名要为.sh)。
      其中 第2句话是表示向虚拟地址为0xf1c25000的寄存器写入数据0x0027003f,虚拟地址0xf1c25000即代表物理地址为0x01c25000的寄存器(TP Control Register 0)(具体可查看A10的User Manual ,在这里可以找到   http://docs.cubieboard.org/resources   呃,A10的手册中写错了,可以看看A20的手册)。
      第6句话实现将虚拟地址为0xf1c25020的寄存器(Temperature Data Register)数值读出,数值打印在dmesg最后一行。
      第7句话,表示将dmesg日志最后一行的第三个空格后的数值赋值给output变量。
      第8、9、10 三句话分别完成计算并取出温度的整数部分、小数部分、显示结果。
第三步,添加可执行权限:chmod +x temperature.sh输入./temperature.sh 即可看到打印出CPU的温度了。
      原文中使用的是减去1447,发现实际输出值有90多。于是改到2000,输出37度左右,应该差不多。具体要减多少,还需要标定。
      sunxi-dbgreg寄存器调试模块的用法可以使用cat /sys/devices/virtual/misc/sunxi-dbgreg/rw/write         查看。
      在开机第一次运行脚本前需要加载sunxi-dbgreg模块,如第一步所示。
PS:吐槽下AllWinner的手册,做的不好,约等于仅仅说了各个寄存器的名称,数值具体含义都没说。还有些错误,有的甚至直接省略。..|.,
以上。






lin 发表于 2014-8-12 21:42:39

帖子不错,有用

虫飞薨薨 发表于 2014-9-7 09:50:23

你的脚本中也有错误,dmesg拼错了;P

虫飞薨薨 发表于 2014-9-7 09:51:10

而且在cubie的环境下,我的应该是
output=$(dmesg | tail -n 1 | awk '{print $2}')

more-and-less 发表于 2015-7-7 20:45:40

我测的温度是33.5度,有测过的哥们吗?

页: [1]
查看完整版本: 查看CubieBoard1的CPU温度