2

Stackoverflow 社区。我正在尝试设计一个 OTA 更新系统,并希望使用swupdate来更新树莓派。我发现关于如何实现它的信息非常有限。如果有人可以让我知道它是如何完成的,那就太好了。谢谢

4

1 回答 1

8

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

我必须进行一些更改才能使用最新的 zeus 版本。以下是 ubuntu 18.04 上的分步命令。(截至 2020 年 3 月 22 日,这始终与 master 分支一起使用)

安装所有必需的依赖项。(下面的安装脚本来自https://medium.com/@shantanoodesai/run-docker-on-a-raspberry-pi-4-with-yocto-project-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.conf 以包含下面指定的所有层

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 (树莓派默认不使用 uboot bootloader。swupdate 需要 ext4.gz 映像。)

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

现在终于烤好了。meta-swupdate-boards 包含一些硬件的示例。我能够复制 raspberrypi3 板实现以轻松支持 raspberrypi2。

MACHINE=raspberrypi3 bitbake update-image

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

让我们将 core-image-full-cmdline-raspberrypi3.rpi-sdimg 映像刻录到 sd 卡并使用 update-image-raspberrypi3.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 以更新固件。

于 2020-03-22T06:14:11.097 回答