EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 飞凌嵌入式 于 2023-3-31 11:57 编辑 3 a: |5 M2 V6 b3 e
% d) c. O' ~& i' Z7 O; F& i% mOTA是一种可以无损失升级系统的方式,可以犹如天降神兵一般地将新功能远程部署到产品上。我们可以通过网络自动下载OTA升级包,也可以通过下载OTA升级包到SD卡或U盘后再对设备升级。本文将通过飞凌嵌入式OK3568-C开发板介绍OTA升级流程,本地升级程序recovery执行升级的流程及技术细节。
; O+ j8 U# I# A+ B( F# T
7 [7 y( v( e: n4 @
/ I, L, N/ G7 |& A1、制作recovery.img4 y$ J4 j1 y) X& u* Z+ @% `5 ?) L j6 I
recovery相关的源码路径: buildroot/output/OK3568-recovery/build/recovery-develop 0 g: Y4 n9 s9 p3 H
如果有修改过以上目录的源码文件,则需要执行以下操作: 1. forlinx@ubuntu:~/OK3568-linux-source$ source envsetup.sh 2. 选择某一平台的 recovery 配置,输入96 3. forlinx@ubuntu:~/OK3568-linux-source$ make recovery-dirclean && make recovery #清除编译产物重新编译 4. forlinx@ubuntu:~/OK3568-linux-source$ make rkupdate-dirclean && make rkupdate #清除编译产物重新编译
+ b3 y5 F% G4 M- h0 ^如果没有修改过上述目录的源码文件,则直接执行以下操作: 1. forlinx@ubuntu:~/OK3568-linux-source$ ./build.sh recovery #编译生成recovery.img 2. forlinx@ubuntu:~/OK3568-linux-source$ ./mkfirmware.sh #将生成的固件拷贝至 rockdev/目录下 烧写/OK3568-linux-source/buildroot/output/OK3568-recovery/images/recovery.img文件。 点击设备分区表,勾选9,选择recovery路径,点击执行。 + e' {7 N; J0 Q# h6 J2 A
) B: ]0 k. ?% R5 V0 \8 |8 A$ z2 `1 G; E
% j) ]+ }- P! E5 `2 a+ ?
2、制作升级镜像+ G. r) h" `* _6 q7 X
如何验证是否升级成功了呢?我们要先对boot.img文件有一个初步了解,boot.img文件存放有设备树和内核,我们只要对设备树或者内核进行适当的修改即可。本例程以更新boot.img文件为例,对设备树进行了适当修改。 8 Q' Y' m# u( N' P% [$ ^
修改 /OK3568-linux-source/kernel/arch/ARM64/boot/dts/rockchip/OK3568-C-common.dtsi设备树文件,对forlinx_control节点做如下修改。默认只打开HDMI输出,将MIPI和LVDS输出关闭。 % Q1 [& r% G/ E: Z! |% q
2 X5 y5 L M# p3 Q* J, Z6 ~9 K6 ^' [
, ~1 ?# O( ~) B b
修改/OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file文件,根据需求修改该文件,本例程以更新boot.img为例,所以将其他.img文件注释掉。用户可以根据产品更新需求对该文件进行调整。 / M7 |1 c% Z* e: D# J
本例程以修改设备树显示为例,修改完设备树后,重新编译内核。 / d" n+ y8 E# P
) I; W( S1 g9 l) X( e% L& a5 {
8 t- |# a8 v8 ~6 y4 @, d$ e+ q+ V
3、升级操作SD卡或U盘升级; ^, [/ G! T6 p1 n S+ ]
将SD卡或U盘默认挂载到OK3568-C开发板的/run/media目录下。将update.img镜像文件拷贝到OK3568-C开发板的/userdata目录下,重启开发板后系统将检测该目录下的升级包自动升级。
8 r2 r4 a( B$ D6 F* \) Dftp服务器升级开发板端执行如下命令,将服务器的升级包文件拷贝到开发板进行升级。 下载完成以后使用以下命令进行升级:
8 o9 l3 D: N" l; Z* M+ t" ~& w" q: ~% Nupdate ota /userdata/update.img 升级过程中设备将会进入recovery模式,并进行自动升级,升级成功后会进入到正常normal系统。
' y- w2 h; W/ V* Q+ T% c F( ]验证测试结果
$ @: W2 ^7 f4 {8 Y5 d
将OK3568-C开发板上电,串口终端按住空格键,会进入uboot选屏界面。 烧写默认出厂镜像文件现象:默认是开启HDMI、MIPI和LVDS三个输出。
5 ]2 K8 o8 P2 a& ]5 ~: y
烧写升级包镜像文件后现象:只有HDMI显示开启,其他的两个输出被关闭。
5 z$ K8 }/ m6 W5 l+ }注意事项打包update.img固件时需要注意,升级固件可以全分区打包,也可以部分升级,可修改package-file文件,将不要升级的分区去掉,这样可以减少升级包(update.img)的大小。
/ k' x$ p" \, z" U( N
package-file中recovery.img如果打包进去的话,不会在Recovery模式中升级,为了预防升级recovery.img过程中掉电导致后面其他分区无法正常升级的问题,该分区升级放在normal系统下升级,执行update命令时会先检测update.img升级包中是否有打包recovery.img,若有则升级recovery分区,再进入Recovery模式升级其他分区固件。 4 j! P! Y; J8 d, U, X
misc分区不建议打包进update.img中,即使有打包进去,在升级程序中加载判断到后也会忽略该分区,即使升级了misc分区,升级成功后recovery程序仍会清空misc分区中所有的命令及参数,从而导致达不到预想的结果。
7 i/ g: j! ^; `/ g5 e/ C# B6 M; a
如果将update.img升级包放置在flash中的userdata分区,则需要保证package-file中不包括userdata.img被打包进去,原因是可能会导致文件系统的损坏,升级成功后可能使oem或userdata分区mount不成功。若从SD卡或U盘升级时,可以打包userdata.img,从而对userdata分区进行升级。升级完成后会对userdata分区重新resize操作。 5 v4 A6 U. i. w, ?
+ p2 o5 v0 q! B; t2 s% a# y' C/ T
# W; Y U( q4 G3 tPS:OK3568-C开发板不接屏升级失败怎么办?(1)如果有屏幕,请先接入屏后再执行OTA升级; (2)如果设备没有屏幕,请在 /OK3568-linux-source/buildroot/configs/OK3568-recovery_defconfig中加入BR2_PACKAGE_RECOVERY_NO_UI=y配置,编译刷机后,再进行OTA升级。
5 V7 `, w3 C/ n7 c" v
% }: s) _& U- g. i v0 s. g$ m至此,OTA升级的全部流程讲解完毕,用户可以先按照该文章操作进行试验,熟悉本文章操作后,就可以对uboot,内核或者文件系统进行修改,通过OTA方式远程升级用户产品,从而修复产品中的BUG,更加方便地进行产品优化,更新迭代。
" ~% c2 f% b# G& X/ W# [. s4 h- G5 C2 a/ Q p- J
|