找回密码
 注册
关于网站域名变更的通知
查看: 652|回复: 1
打印 上一主题 下一主题

3步教你升级RK3568开发板OTA

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-4-8 13:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Heaven_1 于 2023-4-10 11:26 编辑 4 q/ K# r' k9 c6 n7 \; ^
; [3 P6 o" Y$ \
本文将通过飞凌嵌入式OK3568-C开发板介绍OTA升级流程,本地升级程序recovery执行升级的流程及技术细节。      
- Y) B9 j, }# N# Q) H2 D& }) z# g/ J$ g: v+ \, W

$ ]. D, }& j% a& h! K8 H
9 \# O$ F+ e2 E- k, m4 ^) k7 V7 Z" w

/ G9 E% ?: V, T: ~* I5 e! ?3 A
- D; d: }6 G( ~0 U01制作recovery.img
+ P* _# J- U  b( |9 k8 Z4 o: v* [2 S1 K
recovery相关的源码路径:: T: {/ L5 w, T+ n% l6 \
* t6 j* n) j( }2 |
buildroot/output/OK3568-recovery/build/recovery-develop
8 J8 X+ i0 T* X4 C
! r+ l" y) {7 S6 D% n2 u, y
8 ~' g2 k7 s1 T) F+ _( j! W1 `8 X% E0 e; L9 G: C' E2 k

7 m, B1 F) d- h! P( U( j: d) c& C4 a如果有修改过以上目录的源码文件,则需要执行以下操作:
+ Z. f1 g: s! y/ Y$ J. v4 w5 p( n
* ~5 I$ [6 |% M) b, v& S1. forlinx@ubuntu:~/OK3568-linux-source$ source envsetup.sh
: N4 R- T" a* f6 `( h' y0 @+ F0 n$ W1 W: n1 _
2. 选择某一平台的 recovery 配置,输入96
0 t/ j4 g, B, @( Y/ w; Y
0 g# U, ]2 d7 l& i3. forlinx@ubuntu:~/OK3568-linux-source$ make recovery-dirclean && make recovery  #清除编译产物重新编译
: K  I2 H, L/ o( o7 v$ y- {' Y0 r( v) T! y/ @8 r$ d0 x6 b7 V5 X
4. forlinx@ubuntu:~/OK3568-linux-source$ make rkupdate-dirclean && make rkupdate  #清除编译产物重新编译
, z6 S  K' h, c) Z5 \. w8 B, |, H' s4 m- c
) \5 x" ]( e$ O3 s! P9 R7 c, h3 M

# Q  @/ R+ \1 \3 A- Y
. [+ N, x) X( u, k9 o: ]如果没有修改过上述目录的源码文件,则直接执行以下操作:
* p, T' l/ c) b# m; f% l; E/ i3 L! Z1 _. q" D7 i- |& L3 h5 t6 |
1. forlinx@ubuntu:~/OK3568-linux-source$ ./build.sh recovery  #编译生成recovery.img
9 n$ }8 H4 ]/ b2 v4 T( ^' H* E  p7 Q
2. forlinx@ubuntu:~/OK3568-linux-source$ ./mkfirmware.sh
% w+ }/ R6 r1 v3 ^
" V3 ~' o# t) c7 Z9 k   #将生成的固件拷贝至 rockdev/目录下- _" `; r: Y7 {& D# I4 q4 r8 \1 J

/ b" ?  R0 A5 ?: H烧写/OK3568-linux-source/buildroot/output/OK3568-recovery/images/recovery.img文件。- s+ N7 |& _3 F! p
: P" z5 B5 w) H+ @8 J
" E, S9 I& y  J7 i$ j) p

' e2 v, G9 z6 i- ?- B/ P, W" O7 X1 q0 ~6 ~( l5 S- f/ u, T
点击设备分区表,勾选9,选择recovery路径,点击执行。
$ [7 E4 E; w0 A4 s* R" w
, T* s( P- A7 P9 x; w
& Y  g) H& x4 K; o8 R; B* ?/ ~
& A; c4 L! Q( c, F7 O& k1 J! r! A
. \  F& M5 I5 v- s+ y
+ F* ?  g& s8 ]& U

9 J5 i1 i/ ~" Y+ n7 A' p5 _; L, ~$ h3 I
02制作升级镜像7 m1 Y9 L" q- c5 r& V
* i# @: t; W; V. C+ O' F2 D8 J2 o
如何验证是否升级成功了呢?我们要先对boot.img文件有一个初步了解,boot.img文件存放有设备树和内核,我们只要对设备树或者内核进行适当的修改即可。本例程以更新boot.img文件为例,对设备树进行了适当修改。
" {$ ~; P* c( v3 g' E: v. X% v4 L3 B% g1 M
+ l( Q3 \! r+ g7 G# Y; d修改 /OK3568-linux-source/kernel/arch/ARM64/boot/dts/rockchip/OK3568-C-common.dtsi设备树文件,对forlinx_control节点做如下修改。默认只打开HDMI输出,将MIPI和LVDS输出关闭。  Y* }) j( ]+ J# c

" U. b! U1 n' M- s0 C/ Z- V3 t5 F

+ l) d3 f* F' n" \2 v. U( j. K6 u$ E+ C# b0 _; f) l% `
% _) f$ n2 i7 e3 w5 B
8 w% H% @6 E( h3 _; ]" ^$ E2 h6 a
7 o7 F+ i3 U4 y5 J9 W! U$ z
. k5 o3 l$ _4 p

$ n* ~4 Q, `; ]* Y( r! [, L& u修改/OK3568-linux-source/tools/linux/Linux_Pack_Firmware/rockdev/package-file文件,根据需求修改该文件,本例程以更新boot.img为例,所以将其他.img文件注释掉。用户可以根据产品更新需求对该文件进行调整。
& i# @- P# f6 s! g7 H7 v
5 @0 i- K4 o  g+ p4 W" w% P
1 N5 L5 E/ r' t
, X& G% j2 s- Y5 d+ {, n8 H, c+ w: A6 R  u! {
- U0 q3 ^* ?0 g4 ~

6 U* b6 d% z. K4 l) A7 }0 t7 C/ L, W& G6 P& B
) |* O3 p1 K, b( N0 a# y: z( H$ g
本例程以修改设备树显示为例,修改完设备树后,重新编译内核。
/ U8 W# p6 x  b; U: Q* t& p2 L
' @/ U) ~, ^% E: i, R9 H) ^
2 i; Z* i$ I7 t) h1 z, u0 ^9 B
. e. z5 _: C& @/ H. X

# q, E7 q/ r5 b
1 ?9 |$ Y2 n( C03升级操作
$ R  l& Y* w  c. z) B- s0 v
, `" |' o* D; S) jSD卡或U盘升级
( X( }  a2 W, D: F( b. @3 ^) V/ a2 I0 \
将SD卡或U盘默认挂载到OK3568-C开发板的/run/media目录下。将update.img镜像文件拷贝到OK3568-C开发板的/userdata目录下,重启开发板后系统将检测该目录下的升级包自动升级。5 ?9 H/ j' t# H% F+ {9 w

8 F4 I+ a6 A# Y: A, O$ K( Y
: L& X( ?% i0 q' v0 @( A9 s& s. @' \4 L: N8 {3 v8 n2 Y
) f6 |; ^# G; B1 ?, g) ~7 D. q  C
ftp服务器升级
$ @5 Z& e5 V; u' n% y9 s" I) j! X' s' h8 X6 U5 O
开发板端执行如下命令,将服务器的升级包文件拷贝到开发板进行升级。
1 ~  @: q0 w* I  t6 a* a' Y% e) @( j0 ]
7 \  \" E. z' O4 [2 z
9 G4 u+ Y1 L6 t; G
$ ?' U0 ~/ z8 l: w3 f
' d: F! r  _% G6 p; u5 C
* L+ y# w  h5 D; P9 G' D9 z8 ~  d' K
  p# }6 n- u5 s" t7 X1 |2 Z
0 B5 M7 g1 `9 b% o1 V" w1 m$ J
下载完成以后使用以下命令进行升级:
" o7 D! t' _* m, Z4 W6 V4 ?& \1 O6 F/ L
- c, y9 o5 w4 S; P. Pupdate ota /userdata/update.img
: D1 l- X& _0 n8 j" W' i" n$ t2 g5 x0 i! t( `: |. N: p' o0 F

3 W" [; B( |( u0 ~; q* Z  W' @1 Z+ P% l/ D" a9 o1 D: X

' L7 }: D2 Z' G# n  f# u. J升级过程中设备将会进入recovery模式,并进行自动升级,升级成功后会进入到正常normal系统。
# y6 k$ V( i4 A! o0 e% i7 E/ ?0 I# c" y5 O# D$ J4 z
验证测试结果
) M0 `7 u. d: J将OK3568-C开发板上电,串口终端按住空格键,会进入uboot选屏界面。
" c1 }; J% {6 d' E
3 s. i8 _/ Q9 C
% C7 d4 U# U/ G% I. Q, j; V9 ]烧写默认出厂镜像文件现象:默认是开启HDMI、MIPI和LVDS三个输出。
  `( i  I$ X! X+ }0 P& H; @  _7 M, k  b" U: y. U
2 z! P3 Y) S5 n+ H3 `

7 p7 Y2 \6 C0 y: A$ i: ^' X! v
( i7 E! [6 I1 L# ^7 X. f5 r- ]
' G* S% I# r: G/ Y1 {& @
  x- L) p' x: j9 E  M3 w
烧写升级包镜像文件后现象:只有HDMI显示开启,其他的两个输出被关闭。; V& j- G: V6 b3 |' V* _
, s6 S* o2 e* K9 r9 u, |& y# A
6 t7 c, A4 z7 L

0 z3 Y' r+ r; \6 V8 H" L8 J, l
9 D& a* f2 P2 i9 |$ \
+ b) ~  `5 A% o' c' C* ?
注意事项
, p) l5 i9 E4 O+ C8 _
" ?/ P' D+ f% ]& k打包update.img固件时需要注意,升级固件可以全分区打包,也可以部分升级,可修改package-file文件,将不要升级的分区去掉,这样可以减少升级包(update.img)的大小。
8 _$ T! i2 V$ C) d8 u; z; H( D  h  Y3 M: ]1 M  ~$ X
package-file中recovery.img如果打包进去的话,不会在Recovery模式中升级,为了预防升级recovery.img过程中掉电导致后面其他分区无法正常升级的问题,该分区升级放在normal系统下升级,执行update命令时会先检测update.img升级包中是否有打包recovery.img,若有则升级recovery分区,再进入Recovery模式升级其他分区固件。: g( w  U1 B% w

% w& I5 x* S1 w# T2 x/ L" b( vmisc分区不建议打包进update.img中,即使有打包进去,在升级程序中加载判断到后也会忽略该分区,即使升级了misc分区,升级成功后recovery程序仍会清空misc分区中所有的命令及参数,从而导致达不到预想的结果。
% n2 Z0 w7 m$ Y- b/ M% A4 ]. G! v4 u
9 A/ M, _/ o2 ]4 f% d' p8 e. m2 H6 |6 w
如果将update.img升级包放置在flash中的userdata分区,则需要保证package-file中不包括userdata.img被打包进去,原因是可能会导致文件系统的损坏,升级成功后可能使oem或userdata分区mount不成功。若从SD卡或U盘升级时,可以打包userdata.img,从而对userdata分区进行升级。升级完成后会对userdata分区重新resize操作。
3 W" {0 ~1 M) J1 y0 j

该用户从未签到

2#
发表于 2023-4-10 11:27 | 只看该作者
开发板有具体的参数吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-17 09:13 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表