树莓派3B+/4B报告“low voltage warning”

需求场景

用的好好的树莓派,有一天连接VNC,发现桌面任务栏一直提示

如下图:

看样子是供电不足,可是树莓派的负载并不高啊。

解决方案

搜了一大圈基本都是说电源的问题,现在使用的电源是以前小米2/小米Note手机自带的电源。经过反复测试,发现跟温度有关,冬天的时候问题不大,到了夏天,由于老式电源转换效率低,大量电能被转换成了热量,导致长时间充电后,温度上升很快,引起降压,断电后过一段时间就可以了,但是一旦温度上升到一定程度,问题依旧。

后来买了个努比亚大白20W氮化镓充电器之后,就不会报告这个错误了。氮化镓的充电器转化效率更高,升温更少,并且更耐高温。

由于这个提示只有在连接显示器或VNC连接时才能在GUI桌面任务栏看到,如果是SSH登录就看不到了,非常的不方便。最好是能够通过命令判断是否电压不足。

具体的脚本详见 https://gist.github.com/maxme/d5f000c84a4313aa531288c35c3a8887

通过此脚本可以查看CPU和电压不足的问题。不过每次登录之后需要手动运行,实在不方面。而且脚本中采用了while循环需要手动中断脚本。所以可以把代码中的while循环去掉,并且在SSH登录的时候执行命令病输出到登录信息上。

注意电压充足的情况下,输出电压为1.2V,而不是 5V,主板的5V是没办法通过脚本直接测量的。我们只能通过脚本测量CPU、内存控制器、内存输入输出、内存本身的电压,主板电压只能用万用表来测量。

效果如下,具体方式参考 ubuntu修改ssh登录提示信息

修改后的raspberry-power-supply-check.sh代码如下:

参考链接


树莓派Raspberry Pi 3B+

参数一览

  • SoC:新版BCM2837B0,4 Core Cortex A53 64Bit V8,频率1.4GHz
  • RAM:1GB LPDDR2内存(我的是ELPIDA尔必达的颗粒)
  • LAN:千兆以太网接口,最高理论速率480Mbps(USB2.0总线),支持802.3az、9KB巨型帧、POE
  • WLAN&Bluetooth:Cypress CYW43455,模块化,支持2.4GHz/5GHz,802.11a/b/g/n/ac,Bluetooth 4.2
  • ROM:MicroSD Card(TF卡)
  • Other Port:HDMI x1、Ethernet x1、USB 2.0 x4,PowerIn(MicroUSB) x1,3.5mm Audio x1,Jumper x1,Camera Socket x1,Display Output Socket x1

继续阅读树莓派Raspberry Pi 3B+

树莓派固件更新 rpi-update

1 简介

rpi-update是一个用于更新树莓派固件的工具,可以通过apt get install rpi-update来安装

一般来说直接执行下面的命令就可以更新固件(扯淡,基本不可能好吗):

2 跳过自更新

rpi-update启动时会更新自己,如果报以下错误:

可以尝试一下他说的方法来解决:

如果都不行,直接跳过算了,反正也可以用apt来更新这个工具,没必要让他更新自己。

跳过自更新,直接更新固件的方法:

3 【究极方法】本地更新

即使跳过自更新,下载速度也太慢,还经常断流。可以考虑本地更新:

先在PC上下载固件(可以用一下魔法上网):

然后用scp传到树莓派上的/root目录下,之后ssh连上树莓派:

4 检查

对于树莓派4的一个检查方法:

看该目录下是否有libEGL.solibGLESv2.so这两个库,更新前这两个库都是没有的。

如果这两个库出现了,并且是真正的库而不是软链接,就说明更新大概可能也许成功了吧。

参考链接


树莓派固件更新(rpi-update)的那些坑

树莓派国内源

树莓派官方源列表:http://www.raspbian.org/RaspbianMirrors

一下是国内部分:

Asia China Tsinghua University Network Administrators http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/

Unreachable as of 15-may-2015

Asia China Dalian Neusoft University of Information http://mirrors.neusoft.edu.cn/raspbian/raspbian  
Asia China Cohesion Network Security Studio (CNSS)

http://raspbian.cnssuestc.org/raspbian/ 
rsync://raspbian.cnssuestc.org/raspbian

 
Asia China Unique Studio of Huazhong University of Science and Technology

(http|rsync)://mirrors.hustunique.com/raspbian/raspbian

 
Asia China University of Science and Technology of China

(http|rsync)://mirrors.ustc.edu.cn/raspbian/raspbian/

 
Asia China SUN YAT-SEN University http://mirror.sysu.edu.cn/raspbian/  
Asia China Zhejiang University http://mirrors.zju.edu.cn/raspbian/raspbian/  
Asia China Open Source Software Association of Chinese Academy of Sciences http://mirrors.opencas.cn/raspbian/raspbian/  
Asia China Chongqing University http://mirrors.cqu.edu.cn/Raspbian/raspbian/  

重庆大学树莓派源:

中国科技大学树莓派源:

浙江大学

参考链接


树莓派国内源

树莓派OS历史版本下载

树莓派系统是基于Debian系统进行的定制,历史版本下载地址为 http://downloads.raspberrypi.org/raspbian/images/

2012-07-15-wheezy-raspbian
2012-08-16-wheezy-raspbian
2012-09-18-wheezy-raspbian
2012-10-28-wheezy-raspbian
2012-12-15-wheezy-raspbian
2012-12-16-wheezy-raspbian
2013-02-09-wheezy-raspbian
2013-05-25-wheezy-raspbian-shrunk
2013-05-25-wheezy-raspbian
2013-07-26-wheezy-raspbian
raspbian-2013-09-16
raspbian-2013-09-27
raspbian-2013-10-07
raspbian-2013-12-24
raspbian-2014-01-09
raspbian-2014-06-22
raspbian-2014-09-12
raspbian-2014-12-25
raspbian-2015-02-02
raspbian-2015-02-17
raspbian-2015-05-07
Debian 7(Wheezy)
raspbian-2015-09-28
raspbian-2015-11-24
raspbian-2016-02-08
raspbian-2016-02-09
raspbian-2016-02-29
raspbian-2016-03-18
raspbian-2016-05-13
raspbian-2016-05-31
raspbian-2016-09-28
raspbian-2016-11-29
raspbian-2017-01-10
raspbian-2017-02-27
raspbian-2017-03-03
raspbian-2017-04-10
raspbian-2017-06-23
raspbian-2017-07-05
Debian 8 (Jessie)
raspbian-2017-08-17
raspbian-2017-09-08
raspbian-2017-12-01
raspbian-2018-03-14
raspbian-2018-04-19
raspbian-2018-06-29
raspbian-2018-10-11
raspbian-2018-11-15
raspbian-2019-04-09
Debian 9 (Stretch)
raspbian-2019-06-24
raspbian-2019-07-12
Debian 10(Buster)

Lite版本下载地址为 http://downloads.raspberrypi.org/raspbian_lite/images/

参考链接


树莓派历史版本下载

树莓派4B使用ARM Compute Library运行AlexNet

继续阅读树莓派4B使用ARM Compute Library运行AlexNet

使用VNC Viewer连接树莓派4B远程桌面提示错误“Cannot currently show the dekstop”

使用VNC Viewer连接树莓派4B远程桌面提示错误“Cannot currently show the dekstop”,如下图: 继续阅读使用VNC Viewer连接树莓派4B远程桌面提示错误“Cannot currently show the dekstop”

Using QEMU to emulate a Raspberry Pi

If you're building software for the Raspberry Pi (like I sometimes do), it can be a pain to have to constantly keep Pi hardware around and spotting Pi-specific problems can be difficult until too late.

One option (and the one I most like) is to emulate a Raspberry Pi locally before ever hitting the device. Why?

  • Works anywhere you can install QEMU
  • No hardware setup needed (no more scratching around for a power supply)
  • Faster feedback cycle compared to hardware
  • I can use Pi software (like Raspbian) in a virtual context
  • I can prep my "virtual Pi" with all the tools I need regardless of my physical Pi's use case

Given I'm next-to-useless at Python, that last one is pretty important as it allows me to install every Python debugging and testing tool known to man on my virtual Pi while my end-product hardware stays comparatively pristine.

Getting started

First, you'll need a few prerequisites:

QEMU (more specifically qemu-system-arm)

You can find all the packages for your chosen platform on the QEMU website and is installable across Linux, macOS and even Windows.

Raspbian

Simply download the copy of Raspbian you need from the official site. Personally, I used the 2018-11-13 version of Raspbian Lite, since I don't need an X server.

Kernel

Since the standard RPi kernel can't be booted out of the box on QEMU, we'll need a custom kernel. We'll cover that in the next step.

Preparing

Get your kernel

First, you'll need to download a kernel. Personally, I (along with most people) use the dhruvvyas90/qemu-rpi-kernel repository's kernels. Either clone the repo:

or download a kernel directly:

or download a snapshot from my website directly:

For the rest of these steps I'm going to be using the kernel-qemu-4.4.34-jessiekernel, so update the commands as needed if you're using another version.

Filesystem image

This step is optional, but recommended

When you download the Raspbian image it will be in the raw format, a plain disk image (generally with an .img extension).

A more efficient option is to convert this to a qcow2 image first. Use the qemu-imgcommand to do this:

Now we can also easily expand the image:

You can check on your image using the qemu-img info command

Starting

You've got everything you need now: a kernel, a disk image, and QEMU!

Actually running the virtual Pi is done using the qemu-system-arm command and it can be quite complicated. The full command is this (don't worry it's explained below):

如果需要指定上网方式的话,执行如下命令:

So, in order:

  • sudo qemu-system-arm: you need to run QEMU as root
  • -kernel: this is the path to the QEMU kernel we downloaded in the previous step
  • -append: here we are providing the boot args direct to the kernel, telling it where to find it's root filesytem and what type it is
  • -hda: here we're attaching the disk image itself
  • -cpu/-m: this sets the CPU type and RAM limit to match a Raspberry Pi
  • -M: this sets the machine we are emulating. versatilepb is the 'ARM Versatile/PB' machine
  • -no-reboot: just tells QEMU to exit rather than rebooting the machine
  • -serial: redirects the machine's virtual serial port to our host's stdio
  • -net: this configures the machine's network stack to attach a NIC, use the user-mode stack, connect the host's vnet0 TAP device to the new NIC and don't use config scripts.

If it's all gone well, you should now have a QEMU window pop up and you should see the familiar Raspberry Pi boot screen show up.

Now, go get yourself a drink to celebrate, because it might take a little while.

Networking

Now, that's all well and good, but without networking, we may as well be back on hardware. When the machine started, it will have attached a NIC and connected it to the host's vnet0 TAP device. If we configure that device with an IP and add it to a bridge on our host, you should be able to reliably access it like any other virtual machine.

(on host) Find a bridge and address

This will vary by host, but on my Fedora machine, for example, there is a pre-configured virbr0 bridge interface with an address in the 192.168.122.0/24 space:

I'm going to use this bridge and just pick a static address for my Pi: 192.168.122.200

Reusing an existing (pre-configured) bridge means you won't need to sort your own routing

(in guest) Configure interface

NOTE: I'm assuming Stretch here.

Open /etc/dhcpcd.conf in your new virtual Pi and configure the eth0 interface with a static address in your bridge's subnet. For example, for my bridge:

You may need to reboot for this to take effect

(in host) Add TAP to bridge

Finally, add the machine's TAP interface to your chosen bridge with the brctl command:

Now, on your host, you should be able to ping 192.168.122.200 (or your Pi's address).

Set up SSH

Now, in your machine, you can run sudo raspi-config and enable the SSH server (in the "Interfacing Options" menu at time of writing).

Make sure you change the password from default while you're there!

Finally, on your host, run ssh-copy-id pi@192.168.122.200 to copy your SSH key into the Pi's pi user and you can now SSH directly into your Pi without a password prompt.

参考链接


Using QEMU to emulate a Raspberry Pi