OTA升级
注:文中的所提到的资料均可从下方百度云网盘链接获取。
链接:https://pan.baidu.com/s/1to_UzLne6ab-f9Ea0xurcQ
提取码:s5c0
准备工具
otapack
工具位于project/image/makefiletools/bin/otapack。otaunpack
载otaunpack.tar.gz源码包到sdk下并解压,进入解压目录,可以看到3rdparty和source两个文件夹。
进入3rdparty目录,执行以下指令:
git submodule init
git submodule update
进入source目录,打开Makefile,定义PROJ_ROOT指向sdk中的project目录,并修改DB_ALKAID_PROJ指向sdk中的project目录下的current.configs,最后执行make -j4,得到out/app/otaunpack即为我们需要的工具。flash_eraseall
ota升级需要得到flash_eraseall的支持,而flash_eraseall来自busybox。如果你是完全使用buildroot的rootfs(rootfs.mk中注释掉busybox一行):# vi project/image/configs/i2m/rootfs.mk
那么你需要在buildroot中添加flash_eraseall:
# cd buildroot-2020.05/
# arch=arm make busybox-menuconfig
Miscellaneous Utilities --->
[*] flash_eraseall (5.9 kb)
# make
然后更新rootfs.tar.gz即可。
如果你没有在rootfs.mk中注释掉busybox一行,那么你可以下载我们提供的busybox(支持flash_eraseall),然后替换sdk中的busybox(project/image/busybox/目录下)即可。
升级
升级使用工具otapack和otaunpack,这两个工具的使用方法请参考附录1及附录2。
以下分别以升级uboot以及升级cusotmer分区为例,说明升级的过程。
sdk已经包含了ota制作方法,只需要在project目录下执行make image-ota即可,我们也建议使用这种方法。
升级结束后,在End scripts中通过变量OTA_STATUS来获知是否升级成功。如果OTA_STATUS值为0,说明升级成功,为-1说明升级失败。升级uboot
# cd project
# make image-ota
prepare_ota.sh和finish_ota.sh的路径是相对与project/image目录。prepare_ota.sh在开始升级之前会被执行,finish_ota.sh在升级完成后会被执行。
把otaunpack和SStarOta.bin.gz 下载到板子上,并执行otaunpack
# ./otaunpack -x ./SStarOta.bin.gz
可以看到,我们的prepare_ota.sh和finish_ota.sh已经执行了。
这样uboot就更新完成了,ipl、ipl_cust、logo和kernel也能参考这种方法来更新。
- 升级customer
customer分区是ubi类型,默认已经被mount了,因此需要先umount才能升级。在prepare_ota.sh中可以做到。
# cd project
# make image-ota
把otaunpack和SStarOta.bin.gz下载到板子上,并执行otaunpack
# ./otaunpack -x ./SStarOta.bin.gz
这样customer分区就升级完成了,同样地,appconfigs和miservice也可以类似地进行升级。
升级rootfs
由于rootfs分区被用作根文件系统了,不能像customer那样umount,因此只能通过复制和替换文件来升级。升级效果
如果升级设备带屏幕,则可以在升级的时候显示一张图片。如下我在升级的时候显示一张图片industio1024_600.jpg(当然,需要先进行屏幕初始化):# ./otaunpack -x ./SStarOta.bin.gz -p ./industio1024_600.jpg
可以看到,升级完成后,将看到2个进度条和背景图。