EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上。我们不仅可以通过网络下载OTA升级包,也可以通过下载OTA升级包到SD卡或U盘后再对设备升级。 ! p. C8 @7 h1 W
本文将通过飞凌嵌入式OK3568-C开发板来为大家介绍OTA升级的流程,本地升级程序recovery执行升级的流程及技术细节。
. |! T9 c* h# u. \1 q. j8 Z- L& k/ m9 b+ j) P1 h
1. 制作 recovery.img recovery相关的源码路径: buildroot/output/OK3568-recovery/build/recovery-develop
) \9 k# X2 [* L% z9 N: n如果有修改过以上目录的源码文件,则需要执行以下操作: (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 #清除编译产物重新编译 8 |5 |/ j- e4 t7 s
如果没有修改过上述目录的源码文件,则直接执行以下操作: (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文件。 0 v! p7 `0 x( o# ~; s2 o
点击设备分区表,勾选9,选择recovery路径,点击执行。
$ b3 c1 s$ e8 r- h8 a. P* L![]() , i2 R& G3 A5 o" e) \9 z2 A$ k
7 w) Y# K' h) l/ o2. 制作升级镜像 如何验证是否升级成功了呢?我们要先对boot.img文件有一个初步了解,boot.img文件存放有设备树和内核,我们只要对设备树或者内核进行适当的修改即可。本例程以更新boot.img文件为例,对设备树进行了适当修改。
. i" D7 ~1 x, w6 v8 k修改设备树文件: /OK3568-linux-source/kernel/arch/ARM64/boot/dts/rockchip/OK3568-C-common.dtsi, 6 [( v5 t( [# s
对forlinx_control节点做如下修改。默认只打开HDMI输出,将MIPI和LVDS输出关闭。 / { model =“Forlinx OK3568-C Board"; compatible ="forlinx,ok3568","rockchip,rk3568-evb1-ddr4-V10","rockchip,rk3568"; forlinx control { status ="okay"; video-hdmi ="hdmi"; video-mipi-edp ="off"; video-lvds-rgb ="off"; };
9 ]7 g" F. G5 y. b! a. P6 l修改文件: /OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file : E+ L7 y& V7 [
根据需求修改该文件,本例程以更新boot.img为例,所以将其他.img文件注释掉。用户可以根据产品更新需求对该文件进行调整。 2 _6 ?6 Q' O9 s/ l+ s
![]()
4 E4 v7 H$ L1 p本例程以修改设备树显示为例,修改完设备树后,重新编译内核。
* J! a6 n% @2 z4 G# m![]() 7 `, c+ v4 F. [* U
* ~2 [8 u' v ]3. 升级操作 SD卡或U盘升级 将SD卡或U盘默认挂载到OK3568-C开发板的/run/media目录下。将update.img镜像文件拷贝到OK3568-C开发板的/userdata目录下,重启开发板后系统将检测该目录下的升级包自动升级。
8 R3 N+ k4 J* I# @5 nFTP服务器升级 OK3568-C开发板端执行如下命令,将服务器的升级包文件拷贝到开发板进行升级。
. ]( ?' D! M0 f$ n& f2 Y, I& p![]() 4 K% K& j, n3 Q
下载完成以后使用以下命令进行升级: update ota /userdata/update.img 升级过程中设备将会进入recovery模式,并进行自动升级,升级成功后会进入到正常normal系统。
9 g& Y( @) N8 E+ J0 Y' ?
! J( p1 M" H7 G% }/ T Q1 {& m4. 验证测试结果 将OK3568-C开发板上电,串口终端按住空格键,会进入uboot选屏界面。烧写默认出厂镜像文件现象:默认是开启HDMI、MIPI和LVDS三个输出。 ! W/ C/ v, R( }4 ^% u- q
![]()
8 Z. c) b' W9 j烧写升级包镜像文件后现象:只有HDMI显示开启,其他的两个输出被关闭。 ; L4 t7 N$ e q- Z( T$ _
![]() * j) ~: j7 j2 g" c" y
7 }/ g# z6 U2 H. j! _) w
5. 注意事项 打包update.img固件时需要注意,升级固件可以全分区打包,也可以部分升级,可修改package-file文件,将不要升级的分区去掉,这样可以减少升级包(update.img)的大小。 . q, b0 y& N$ n
package-file中recovery.img如果打包进去的话,不会在Recovery模式中升级,为了预防升级recovery.img过程中掉电导致后面其他分区无法正常升级的问题,该分区升级放在normal系统下升级,执行update命令时会先检测update.img升级包中是否有打包recovery.img,若有则升级recovery分区,再进入Recovery模式升级其他分区固件。 3 d" m) y6 Y' C( X! H6 _: S
misc分区不建议打包进update.img中,即使有打包进去,在升级程序中加载判断到后也会忽略该分区,即使升级了misc分区,升级成功后recovery程序仍会清空misc分区中所有的命令及参数,从而导致达不到预想的结果。 ( y5 Y) O/ z, t( e8 E: B" R* k2 \
如果将update.img升级包放置在flash中的userdata分区,则需要保证package-file中不包括userdata.img被打包进去,原因是可能会导致文件系统的损坏,升级成功后可能使oem或userdata分区mount不成功。若从SD卡或U盘升级时,可以打包userdata.img,从而对userdata分区进行升级。升级完成后会对userdata分区重新resize操作。 7 l6 r% {- L. p/ S% G4 k: F0 ^3 \
* r8 {9 b6 u4 h7 s6 ?8 I至此,OTA升级的全部流程讲解完毕,用户可以先按照该文章操作进行试验,熟悉本文章操作后,就可以对uboot,内核或者文件系统进行修改,通过OTA方式远程升级用户产品,从而修复产品中的BUG,更加方便地进行产品优化,更新迭代。 * |7 e% r9 J1 U3 v; D3 y
|