|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2023-4-10 11:26 编辑
) ? v0 i" @6 z# \* I* K8 H1 i' H0 S9 y6 }3 N
本文将通过飞凌嵌入式OK3568-C开发板介绍OTA升级流程,本地升级程序recovery执行升级的流程及技术细节。 ' ]& w7 x9 y! q- ~( N
7 X2 V6 i6 S1 f1 Y* U) [" q
; P: }4 `' t# |8 D- t3 C
. \: @5 K: C6 i- w$ L( O9 _6 Q0 W1 o9 h& U1 ?3 k
$ K2 Z4 q* f* T4 y, k e+ z, o01制作recovery.img3 E0 w7 v" A7 C: _
/ Q6 b' g% Z, d& Q1 w" yrecovery相关的源码路径:
9 C+ L/ m4 V) H4 ]. D
. E& \- w& q- ]. \buildroot/output/OK3568-recovery/build/recovery-develop1 M, Y6 U* A& G! k4 v. t1 |2 |1 \
: s1 s, s- }: |1 i5 r/ N6 q7 r4 |/ C3 U
3 g$ P' a& w3 W3 g1 P
4 x$ h/ h7 t& w# e* r9 F如果有修改过以上目录的源码文件,则需要执行以下操作:& L) r& U' ]/ z8 v
! x# L# ]6 }# t9 K& O, a* ]
1. forlinx@ubuntu:~/OK3568-linux-source$ source envsetup.sh9 g/ K3 Z% L: I* N4 U/ t/ y
. j7 [) L8 {: k" P$ i. V
2. 选择某一平台的 recovery 配置,输入96! T$ ]1 F; g/ r: x9 Y
' i' c4 [: z7 m
3. forlinx@ubuntu:~/OK3568-linux-source$ make recovery-dirclean && make recovery #清除编译产物重新编译
; ^7 J5 f* Z5 K1 r( W* e, J5 x/ y( ?8 N; X$ c( d) v
4. forlinx@ubuntu:~/OK3568-linux-source$ make rkupdate-dirclean && make rkupdate #清除编译产物重新编译
# ~. l7 R' C/ \0 l: J6 X4 s- e, U
4 ^0 x ]. G/ o5 S9 f" G
' {- ?7 O1 D; L B) }& [
: b4 {# o# A/ f, n2 D* s如果没有修改过上述目录的源码文件,则直接执行以下操作:, j& h$ S" Y5 j* U
% E* ]. @; q/ a
1. forlinx@ubuntu:~/OK3568-linux-source$ ./build.sh recovery #编译生成recovery.img
4 W- r) ]8 f$ e( v( w* {2 I9 n$ _6 z5 X" U; |& z
2. forlinx@ubuntu:~/OK3568-linux-source$ ./mkfirmware.sh K$ g0 O( W4 Q- x9 G
: I# G) T% B( J3 J' B1 s" g #将生成的固件拷贝至 rockdev/目录下
9 X* r C9 N9 g# H
1 Z) z C( j2 g7 p烧写/OK3568-linux-source/buildroot/output/OK3568-recovery/images/recovery.img文件。
# Y5 P7 X) l2 b; |. Q$ i9 g* g$ D6 L( l+ n. \. f
& M' {8 i+ w- M' C" _3 V' [# B# M/ l) i" J- N. r* `
. q5 T! w! e6 G# N点击设备分区表,勾选9,选择recovery路径,点击执行。$ z! y" I: _/ M6 ?% e' e8 v c2 y
" V$ N2 o& t0 ~& g& A+ S& }+ s* e2 h" n6 @% k5 D7 S9 J8 p
* F, C! A/ ?( s3 ?( I/ N
/ T2 O! p& X# Q r0 A* U/ r6 }3 x$ }; c
; G% g5 V: e+ J) n: B8 _) y
: t9 E- ~( S6 C) e W
, |+ }* }7 _$ D% Y02制作升级镜像4 h- m4 ?# ^+ v* `. E6 |; v
& y0 N3 I6 l# V2 c如何验证是否升级成功了呢?我们要先对boot.img文件有一个初步了解,boot.img文件存放有设备树和内核,我们只要对设备树或者内核进行适当的修改即可。本例程以更新boot.img文件为例,对设备树进行了适当修改。 u1 [% s$ A: {6 B9 u/ N0 A/ Y
$ W' o$ o) f T/ ]- ~; _- l& T修改 /OK3568-linux-source/kernel/arch/ARM64/boot/dts/rockchip/OK3568-C-common.dtsi设备树文件,对forlinx_control节点做如下修改。默认只打开HDMI输出,将MIPI和LVDS输出关闭。
/ f5 ]" B2 d. \8 [3 k0 u2 W1 \! g. ?/ \1 b) ^) F1 P2 m2 Y, p1 r
# v9 j9 h6 x, I# X8 }/ D" U N/ s9 e! F
3 N3 ^) r: f- w; p$ i. l. s, q" ?* r
4 J1 R: a% z- a$ V' ]3 w& Y, w+ U) R( w
2 p* \3 t- j( L; K" ~8 ]$ r5 X0 L0 }& q6 F4 {; L
修改/OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file文件,根据需求修改该文件,本例程以更新boot.img为例,所以将其他.img文件注释掉。用户可以根据产品更新需求对该文件进行调整。& I+ f5 Y8 e8 L6 ?
8 T; }8 R' @4 J% v) P! F
/ {; x. [* N: \$ w( D8 p
. B% I3 t1 T7 B5 r8 F' ~$ z2 f1 ~ V
H" L: \& }8 F' @" v5 H9 ]! l' L
4 t0 q4 N3 o# n$ R( Y% ], F4 j4 D9 H6 s4 h1 ?
本例程以修改设备树显示为例,修改完设备树后,重新编译内核。& E+ w$ m9 L7 T ~4 ^, n
% }8 P* ^3 {+ a6 T9 Y* Q v4 @3 N: G
' f3 Z2 H& ]% l- O- q" a) D. X: G
( y# v. D8 ? A
03升级操作
0 p0 Z+ x7 ?9 b' L& q1 s% H: [" |. s9 Y
SD卡或U盘升级+ `' h% t3 E' `& d
2 C- d; Z7 T4 |! D( O$ e将SD卡或U盘默认挂载到OK3568-C开发板的/run/media目录下。将update.img镜像文件拷贝到OK3568-C开发板的/userdata目录下,重启开发板后系统将检测该目录下的升级包自动升级。4 r: d' S6 c/ q" d* e
+ Z3 O" Q7 c' @" F6 i4 L
, y! t: o& t8 K; H% g$ j8 l& W# W8 i S
0 Q& F: Z: o- a* v9 v- }7 E; n5 M9 u4 c% y2 t4 L2 e6 D4 L7 i
ftp服务器升级
' g+ p; \7 o, i. @$ l6 H2 w
/ u6 }3 K; V5 C2 H9 g开发板端执行如下命令,将服务器的升级包文件拷贝到开发板进行升级。( Y! t( J$ }, V4 p. W/ `
9 w o# Z! t: s/ j1 a' H
) ?! K' B3 N" }% w6 t
. K' l! ?* P3 B4 T3 ?& f8 P0 I/ }' a6 U& y4 U" p2 l9 h
, \% @5 |. {$ _' l+ x
. w9 ]9 l/ H0 @" V* ]4 r8 b
+ t: \" s/ }$ i7 X下载完成以后使用以下命令进行升级:" j* Y5 |7 h; i2 ^
7 P8 W: N$ t- w" U' Y: }3 s* |. ?( I6 Nupdate ota /userdata/update.img" M7 j6 ^4 L1 v5 E
* A* \8 m7 ^. P: l- m, ?0 y5 J+ H
/ n& X2 f" C* y$ u% G" C1 k1 j0 Y4 ]1 h
( {5 _" A% Q! g
升级过程中设备将会进入recovery模式,并进行自动升级,升级成功后会进入到正常normal系统。0 \/ w/ L2 ~. m9 |1 z2 I
2 W' A: Y7 C3 o% B
验证测试结果$ E$ O6 \% d! K6 Q. Q: P
将OK3568-C开发板上电,串口终端按住空格键,会进入uboot选屏界面。
2 C, l b7 K) Y. e% ]' c% F+ _+ L% S$ ]5 d+ g0 J7 c% ` f
- |: f% g$ d% q4 O6 X烧写默认出厂镜像文件现象:默认是开启HDMI、MIPI和LVDS三个输出。
' F2 ?$ Q! p* \+ N- n7 O! n, \5 c0 E2 W' U* E
! j3 C9 L( u! p8 G- d) Q; v1 Q# a2 Z
' S5 W0 m. S4 z& f/ I# l' A& R. T' W# i
3 P3 h! R0 e0 O% U3 { y
烧写升级包镜像文件后现象:只有HDMI显示开启,其他的两个输出被关闭。+ F- q" q/ ^, z3 E9 n' c# |$ X, p3 ^
: T4 c& U8 }9 f G$ W! l' R; \% v2 |& a' F; Q
' n! b% [" Q7 k" m; I7 l+ P$ o x+ x: u
! ~+ n; {7 q, X3 A2 g0 ]! w8 l
注意事项6 b o( Z* f( F0 x+ \
4 u2 S g+ \" i/ a, s4 ^8 ? L7 E- a
打包update.img固件时需要注意,升级固件可以全分区打包,也可以部分升级,可修改package-file文件,将不要升级的分区去掉,这样可以减少升级包(update.img)的大小。. b6 T) s8 O" I X+ j; z
$ w' N0 H7 M3 |' j. Z- E) q6 ~
package-file中recovery.img如果打包进去的话,不会在Recovery模式中升级,为了预防升级recovery.img过程中掉电导致后面其他分区无法正常升级的问题,该分区升级放在normal系统下升级,执行update命令时会先检测update.img升级包中是否有打包recovery.img,若有则升级recovery分区,再进入Recovery模式升级其他分区固件。# N9 G+ s# p3 F0 h
: C) L7 g# f* E# y+ Z; tmisc分区不建议打包进update.img中,即使有打包进去,在升级程序中加载判断到后也会忽略该分区,即使升级了misc分区,升级成功后recovery程序仍会清空misc分区中所有的命令及参数,从而导致达不到预想的结果。% N( U/ e' x2 d1 G) z: P& B
- e2 n' h8 l5 [
& N, o! i2 |% q8 k如果将update.img升级包放置在flash中的userdata分区,则需要保证package-file中不包括userdata.img被打包进去,原因是可能会导致文件系统的损坏,升级成功后可能使oem或userdata分区mount不成功。若从SD卡或U盘升级时,可以打包userdata.img,从而对userdata分区进行升级。升级完成后会对userdata分区重新resize操作。" M7 C' z. w. X
|
|