EDA365电子论坛网

标题: 3步教你升级RK3568开发板OTA [打印本页]

作者: 罗罗诺亚    时间: 2023-4-8 13:54
标题: 3步教你升级RK3568开发板OTA
本帖最后由 Heaven_1 于 2023-4-10 11:26 编辑 1 N9 S. ?  x9 \
9 G- S. R# A9 A7 L
本文将通过飞凌嵌入式OK3568-C开发板介绍OTA升级流程,本地升级程序recovery执行升级的流程及技术细节。      
8 F  H7 u/ y9 M  S! @  m
* q  F# T/ V. W6 N0 k. S$ V
9 E7 C0 j1 j( G# @' e
: v+ |- z$ m0 B; ^0 L
6 p1 B7 G" _$ G3 z- z# u6 y; @
4 s( Q! \) y5 H# T7 s3 t
01制作recovery.img
6 s1 s" [" Y& ~. c& b4 ~# }* Y2 |5 i: k( y9 j
recovery相关的源码路径:  W9 b, n- F  u1 X+ h+ ?4 _( `6 n
, K6 Z# b5 U& L: q6 K8 Y
buildroot/output/OK3568-recovery/build/recovery-develop
2 u& D. k1 M% i# U& M  @- S3 u; B% ^) w/ n5 ?/ {2 S  T8 O6 O: _

3 s8 I" Z$ n" [  e  }/ P. w6 e" C  ~' F0 |/ o

2 U* B- I* i4 P) l+ m3 {/ L! D如果有修改过以上目录的源码文件,则需要执行以下操作:
, R' u' u" ^7 m  I! ?- p: ^; O; T3 l# U; K
1. forlinx@ubuntu:~/OK3568-linux-source$ source envsetup.sh' u! X; V. }; Y5 G8 D) Y

) h3 g' d! F8 b8 E" g2. 选择某一平台的 recovery 配置,输入96
5 x% \; c3 {' h8 E7 \* U( ~) g! r$ J* H% T
3. forlinx@ubuntu:~/OK3568-linux-source$ make recovery-dirclean && make recovery  #清除编译产物重新编译+ t. [7 W" T3 _5 C
/ p! k( Q, V; \% E5 z- m/ m
4. forlinx@ubuntu:~/OK3568-linux-source$ make rkupdate-dirclean && make rkupdate  #清除编译产物重新编译
* }) U- b( c# O0 ?+ F
$ H! V9 S! N' ]# F' I
) Z) z# S* M) t; c
0 k% h0 O, }% A% f
" W. _  Q3 m1 i7 v如果没有修改过上述目录的源码文件,则直接执行以下操作:) b9 K% E* I7 G* J% x. h* M' Y
0 [* T: ~2 w6 N2 i8 g+ l& h, \! q
1. forlinx@ubuntu:~/OK3568-linux-source$ ./build.sh recovery  #编译生成recovery.img
+ T  j( l) V+ |. I" J
# O; G" J; d6 Q. _. }9 @% a2. forlinx@ubuntu:~/OK3568-linux-source$ ./mkfirmware.sh2 N: j2 d# y' ]- `7 Q  z* l  A% G% Y
% l6 z3 k. l& u6 b
   #将生成的固件拷贝至 rockdev/目录下
; D+ B7 X( s0 K1 i" v
. {7 K4 W5 r5 j9 J% K烧写/OK3568-linux-source/buildroot/output/OK3568-recovery/images/recovery.img文件。0 k3 ^, v- C; H: f2 Q

0 e4 Z$ G/ I. q
/ D4 X6 _/ }) H* f; z- n9 k$ h0 C5 p5 m7 t" `* x' _$ a

/ n- ^& ?1 B. f/ N点击设备分区表,勾选9,选择recovery路径,点击执行。) m$ H* J: X" s- d8 J
! F) Q. u' a5 X& b' Z+ n' A& [

' r. V  Y/ i! x# p, ?0 S. q/ i4 j! K! \8 l

: y, X8 _6 s2 F8 W
+ C& J7 \* K6 A* l5 m8 {* f( I
# k/ R" L8 R% I. _- D

9 N8 g3 v: |, g3 K, x" G9 N: \. W# w5 |" M4 T: f$ o3 \
02制作升级镜像/ E& e/ y! e) c$ d

8 l8 @0 h. t0 v+ i) @4 K+ ]如何验证是否升级成功了呢?我们要先对boot.img文件有一个初步了解,boot.img文件存放有设备树和内核,我们只要对设备树或者内核进行适当的修改即可。本例程以更新boot.img文件为例,对设备树进行了适当修改。
6 u; S5 ~  |5 O9 ~3 f+ r  G. e
- v/ F' p( A, D0 `修改 /OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi设备树文件,对forlinx_control节点做如下修改。默认只打开HDMI输出,将MIPI和LVDS输出关闭。: w  t' n, I: X, B

* n+ m8 ~9 z$ h3 Q5 t
5 m( y8 p3 x7 `: ~) T8 d0 s  e0 s5 S2 r4 }
) u% r/ \$ S' B/ A6 d

: O$ `) U5 p% s6 x- B1 ^
, s3 i: `0 B' o% T( ~# l

# t+ q& x$ K2 d: A6 |  y+ r3 B
7 J' J# S5 N# A8 k. _$ z: ?9 k/ ?% x
修改/OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file文件,根据需求修改该文件,本例程以更新boot.img为例,所以将其他.img文件注释掉。用户可以根据产品更新需求对该文件进行调整。
; e) ?& D3 e' p
" {; @! e" h3 T5 v3 |4 U! ^  Y* g0 C: _3 ?6 f' R4 J. @
5 c" C& E. U2 k/ _) J9 w

1 M" W' _: P, |" Q; ~' D- h, Z. M9 ?, r: O  Q5 F& D% u% V3 l

( R* r. z- j. w6 ?# Q% }4 ~: B; m" M1 M' p

% U" F9 P- d$ r! t本例程以修改设备树显示为例,修改完设备树后,重新编译内核。
, i( T+ u) z2 |! V5 K( V* c. s- g( a# a. L1 h! e

* L) t' L. R) B1 ]
# O" a8 d1 N  Q* k+ P
/ N3 \: ]% Q/ x
! x# ]$ v9 G* r9 j/ u( c7 ]
03升级操作
; Y" `$ H& I5 Z  }! U4 }5 X
5 v5 d) R) V% R8 s; q6 V* DSD卡或U盘升级
" Y/ D( F5 M- i! V/ X/ _- }+ g! |1 R2 h8 f: y
将SD卡或U盘默认挂载到OK3568-C开发板的/run/media目录下。将update.img镜像文件拷贝到OK3568-C开发板的/userdata目录下,重启开发板后系统将检测该目录下的升级包自动升级。- f. a' d: S4 {, f& m1 {

. G! V  ^$ _. d6 }/ v
  U5 f1 s2 G" K- {+ r3 [9 s+ s( b
+ z6 h: I/ N# ?1 e7 O, b& N9 K9 o0 @4 S! S# M( p% N
ftp服务器升级
6 S: ]& h+ H1 [; x- k, K( X3 Z) F
开发板端执行如下命令,将服务器的升级包文件拷贝到开发板进行升级。
5 L. |) r* Q. @, I; M! v7 q2 {7 T4 l. k- k; V
; J9 r; L, b* e

+ I, b1 S7 i4 d$ V, b6 V
, z  M$ N9 X1 j& l2 f& k/ H4 G" ^6 [+ c0 D, u

) T  w) B2 E+ V" g5 D
* n- z& j+ k8 x) [: k3 o下载完成以后使用以下命令进行升级:
; l) E, j% b2 m3 h! R8 t4 \9 x
, w2 b" I5 b: E3 I. |+ O" }. Nupdate ota /userdata/update.img# Q6 y+ f/ S# E* S& F. W2 ?
7 ^9 M- y$ Z1 a& U- W( Z

4 {2 ^: k- d6 b1 w/ w  }+ ~1 Z! k3 W% A% E

. U8 N3 m' [9 P( S0 @升级过程中设备将会进入recovery模式,并进行自动升级,升级成功后会进入到正常normal系统。
5 I3 ~' e& A0 l: x' f* ~, f1 n) y4 M4 Z. d" Y$ J0 Y, g
验证测试结果* l. q( A1 D! ?5 p8 g
将OK3568-C开发板上电,串口终端按住空格键,会进入uboot选屏界面。$ D, l/ X1 o2 [  M+ O

1 w! b4 `1 D5 U* G& ~
% ]7 u5 ^3 C1 R6 S( I6 }: V* S9 |烧写默认出厂镜像文件现象:默认是开启HDMI、MIPI和LVDS三个输出。: P% L2 ^8 @& t
$ c, X' Z9 N0 T0 E/ D& X) q
4 B; c- T& o6 i( ~( v
9 V+ h' i4 c; M9 {1 a
8 D* i6 b+ ]4 Z0 n4 n
; c7 F$ W! h, n# C1 D8 T
4 P! \& \8 v& k; R, p
烧写升级包镜像文件后现象:只有HDMI显示开启,其他的两个输出被关闭。
  z; O/ M0 B- B" F/ s# |! O: v- W5 l; U
7 P: f' B) w. u( K- O, D9 q1 X7 x8 B3 p1 l7 t4 r0 u; e9 z* I

/ ^2 G1 v8 g- ?7 t5 M3 e* V( K3 @/ n. Z% p2 r& Z
2 b9 `" Q! {! _2 V/ S: x
注意事项
4 R5 F( e  q4 J! Z  {8 I  o, [" B$ \6 Z' B# l9 H2 o
打包update.img固件时需要注意,升级固件可以全分区打包,也可以部分升级,可修改package-file文件,将不要升级的分区去掉,这样可以减少升级包(update.img)的大小。
! m# A& E/ _6 [( K& F
% ?5 B; v( ^4 x$ O, j& Vpackage-file中recovery.img如果打包进去的话,不会在Recovery模式中升级,为了预防升级recovery.img过程中掉电导致后面其他分区无法正常升级的问题,该分区升级放在normal系统下升级,执行update命令时会先检测update.img升级包中是否有打包recovery.img,若有则升级recovery分区,再进入Recovery模式升级其他分区固件。8 X2 _" P- L% c0 _

; z1 D0 ^( [$ v& l0 v5 k" `misc分区不建议打包进update.img中,即使有打包进去,在升级程序中加载判断到后也会忽略该分区,即使升级了misc分区,升级成功后recovery程序仍会清空misc分区中所有的命令及参数,从而导致达不到预想的结果。
: x  j5 _# r6 B1 @& e; G' s' h2 H& T+ C: u& [/ A/ ]( Q+ S4 A

: I  f* }, z+ f* M9 F, `如果将update.img升级包放置在flash中的userdata分区,则需要保证package-file中不包括userdata.img被打包进去,原因是可能会导致文件系统的损坏,升级成功后可能使oem或userdata分区mount不成功。若从SD卡或U盘升级时,可以打包userdata.img,从而对userdata分区进行升级。升级完成后会对userdata分区重新resize操作。
* B4 {$ i. c! m( Z0 R0 H8 D" d' C9 G1 J
作者: Griffin    时间: 2023-4-10 11:27
开发板有具体的参数吗




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2