逐步了解如何在Raspberry Pi或任何嵌入式板上使用swupdate进行系统更新



堆栈溢出社区。我正在尝试设计一个OTA更新系统,并希望使用swupdate来更新树莓派。我发现关于如何执行这一点的信息非常有限,几乎没有。如果有人能告诉我是怎么做的,那就太好了。谢谢

这里有一个在树莓pi上使用SWUpdate的OTA的好例子。https://mkrak.org/2018/01/26/updating-embedded-linux-devices-part2/

为了使用最新的zeus版本,我不得不做一些更改。以下是ubuntu 18.04上的逐步命令。(截至2020年3月22日,这一直与主分支机构合作(

安装所有必需的依赖项。(下面的安装脚本来自https://medium.com/@shantanodesai/run-docker-on-a-raspberry-pi-4-,带-十月-项目-551d6b615c0b(

sudo apt-get update
sudo apt-get install 
gawk wget git-core diffstat unzip texinfo gcc-multilib 
build-essential chrpath socat cpio 
python python3 python3-pip python3-pexpect 
xz-utils debianutils iputils-ping 
python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev

克隆所有元层

mkdir yocto && cd yocto
mkdir layers && cd layers
git clone git://git.yoctoproject.org/poky -b zeus
git clone git://github.com/openembedded/meta-openembedded.git -b zeus
git clone https://github.com/agherzan/meta-raspberrypi.git -b zeus
git clone https://github.com/sbabic/meta-swupdate -b zeus
git clone https://github.com/sbabic/meta-swupdate-boards.git -b master
cd ..
. layers/poky/oe-init-build-env build

添加图层。如果此操作失败,请手动修改build/conf/bblayers.coff以包括下面指定的所有层

bitbake-layers add-layer ../layers/meta-openembedded/meta-oe
bitbake-layers add-layer ../layers/meta-openembedded/meta-python
bitbake-layers add-layer ../layers/meta-openembedded/meta-networking
bitbake-layers add-layer ../layers/meta-openembedded/meta-multimedia
bitbake-layers add-layer ../layers/meta-raspberrypi
bitbake-layers add-layer ../layers/meta-swupdate
bitbake-layers add-layer ../layers/meta-swupdate-boards

在build/conf/local.conf中添加以下内容(Raspberry pi默认不使用uboot引导程序。swupdate需要ext4.gz映像。(

RPI_USE_U_BOOT = "1"
IMAGE_FSTYPES = "rpi-sdimg ext4.gz"
PREFERRED_PROVIDER_u-boot-fw-utils = "libubootenv"

现在终于烘焙好了。meta swupdate板包含一些硬件的示例。我能够复制raspberrypi3板的实现来轻松支持raspberripi2。

MACHINE=raspberrypi3 bitbake update-image

这应该在build/tmp/deploy/images/rraspberrypi3/下创建core-image-full-cmdline-raspberrypi3.rpi-sdmg和update-image-raspberry pi3.swu文件。

让我们将core-image-full-cmdline-raspberrypi3.rpi-sdmg图像刻录到sd卡中,并使用update-image-raspberry pi3.swu进行更新。

使用Balena Etcher等UI工具或通过命令行更新闪光灯。请注意,目标文件系统/dev/disk2可能不同。

sudo dd if=core-image-full-cmdline-raspberrypi3.rpi-sdimg of=/dev/disk2 bs=1m

一旦pi启动,转到pi_ipaddress:8080。拖放update-image-raspberrypi3.swu以更新固件。

最新更新