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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-5-20 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
一、准备源码6 ^8 a4 n' c0 y2 T% p3 `  s- X, F
1 A8 }3 X( q8 h' U
; m  I7 `% q9 L6 F8 J
* p. E4 a! X: ]  ^+ ]
, c( _7 k9 @7 X% T; x
1. 创建工作目录
5 ^- o% e" k5 @4 l5 k1 [

4 {8 [7 g8 W9 v- }0 x- [$mkdir -p ~/rk3568
' Q; N' r; h3 E. k7 x. I
5 `: W3 r0 s' v6 m

6 B, n% m4 ]$ R* M' w! Q( q( h) V4 j+ A+ h) x

, S, u  h; f$ S- t- v! s2. 拷贝源码
" e7 a  C$ o; @+ b: `: b" a- y
) r, q; Z# N& N! B/ A  M5 k/ L1 E
将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。% I7 e9 q4 g8 R, ?/ ^' l
; C& |- B4 k+ |$ t$ G- n/ v
' I4 D4 Q' M! s- E0 u  E
8 J8 L( Q+ m* g! V

9 d* f- S- Y( b  Y) E
, B3 k% S/ A7 q! X* M

& H9 j+ e  ]$ T3 }5 ?3 x3 `
; h- q$ a7 j$ }' d" z" E3 F2 k" k; G+ v( j& i/ o
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。
' \( P8 T* }$ I
1 `; X$ r' w+ u

6 E+ p2 ]. O) p  y. Y# h/ d  r# @$ U& o7 N

' I0 B( H/ `4 a5 u$ P" L6 `1 n【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。
# Q4 d8 f) q+ [9 ?
8 U$ O' Z# y- _" x0 R0 Z3 s5 t

/ {! c4 D& {' \7 p5 |5 I: Y5 i% \3 j7 ~% n, u3 {

7 S7 L5 m  p, _7 g0 C: X7 s3. 解压源码
# ]6 U/ ^% v8 {" W, `& k0 U: D$ _
9 J8 o3 }) F; n# X* L$ ]/ O6 [! i
$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2/ B7 y2 K$ U4 P& }# Q

" J% g4 R+ E) _* ]. }$ X1 l$tar -xvf OK3568-linux-source.tar.bz2; ]6 K8 k9 I* v
# \8 I5 `3 `% [# q" e$ `8 Y
  t0 d7 j) l: ~" [( c2 b% Y1 w/ s
+ W9 I6 E1 P. {  b% u5 I% Y
( A) D3 \0 @% L; u, Z
耐心等待完成即可,解压时间有点久。
% x: g# ?; k4 |9 p  j$ O% O) o# i

+ a4 L3 e0 G6 g# y6 ]. |
+ t, O1 p: D" G" F4 j
9 j9 }0 D5 h6 J: l! Y" Z

9 C! d* v, G3 n0 t& _0 V4. 进入源码
. }! D6 _5 M4 x4 U
: I5 ]9 q; h5 \# J. \  m$ J. X
$cd ~/rk3568/OK3568-linux-source
7 H- y( v) l5 G( H) l( y: N

3 w7 e* |7 ^( s* K目录结构5 {2 f1 h) S6 ?: ?

/ S8 k/ A( I% M, d# o% {: `1 }1 S9 R$ A9 ^. S$ f

' G, S0 z; L3 q8 M6 Y

, P7 Q) k* c+ s  D8 U

2 ~7 |' L$ {5 u9 S7 v% N! I  J$ H9 E& j
% `# ?; S1 A7 r
二、编译SDK
9 e: [3 C: r/ H2 }6 f
  d' d' s$ h' I" S

+ K$ p5 k. f7 d( ]
1 p4 C2 g% O4 P: n! x" ~
( X' b9 w8 E% T8 o4 R
1. 编译前配置
$ |% T9 Q; |, @5 ?% I# X# W

+ g" e& O5 m+ l7 K& e在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
% D7 G+ k; r. M% ~+ R

: ]  b1 i* ?6 z* c( X; [# M& _$ }$./build.shBoardConfig-ok3568.mk  0 ?* R$ `# T+ Z' c

- s7 k; u0 s, p, @5 Y' M: v相关配置介绍:
  [3 o7 w7 _0 r( K
& j  h5 a: I# ]7 ^, m
  e1 x1 F0 Z, I" S+ A

, a1 H) ^" H3 e( b+ C) ]
1 ^! ]+ M: ?9 |! q$ K: [- d. X

3 b6 L, ^9 w- h, |6 E/ i+ i. q* ~9 h1 p$ Y  `; |$ l4 h6 e/ n

- {7 `; ^& ]4 E0 j8 F8 M, |2 _+ {
* q. C) K( J4 ]( W# n  J  z1 \: \5 q* @2 S

) `# N( C1 k- a) J3 E8 O4 o- O2 C
" w" ]+ [  b/ ~* ]5 O9 T2 U
2. 编译" ~/ e3 k3 M6 c( |& @% t( P6 ^
5 J* R0 A' ?  a$ Y' A, X1 P
编译u-boot
* c7 O$ S* Y6 G: F' K- f9 [2 v6 b- G

+ [" T4 V: q" J$./build.shuboot5 W; j# o; i1 @; i7 w

6 J, K, U  u6 N! Q! k
, E( a: J0 V  [' d% ~8 @
( e: w% U- i, l/ m: w& ?# Z. p
0 M  P4 A0 r+ A$ j9 Y

0 s& f+ `. Q7 J' K& O2 i; j/ H1 k

/ h' M4 \( @7 \……5 t! |9 Y" J% j# u) O3 r

2 a. o( W' I1 O; U% a1 q0 k/ t1 V! I

! t  K+ ]+ B5 {2 S: z  v

/ A9 _* w, x3 ]/ g4 w$ i

! S* F; F" W+ C8 ^" p, [5 S, P; g8 D- S1 ?% u, f
: ]/ C; i1 E1 r7 o. h0 C
5 T! \1 w5 ?4 v, F( O) h& `4 N0 ~
编译kernel
4 d' a- @* U4 Z7 ~; m3 Y8 o

+ O6 D/ r# i* F+ r$ x: ^$./build.shkernel
6 c0 \6 M* L0 X! [! b

8 O' y4 }  [5 Y* R4 X) y7 e$ F- r& ^$ f1 F6 `. E* f/ w3 A! A5 o

. ~! |  m2 `6 ?( P* M( Z2 b7 ]5 C* @& y$ r
0 u# o: n- Q& ~* k3 [9 o
% i2 Z! K6 N/ R2 _9 K/ u3 Z

( d7 z) t% U+ a* M% [  D) j' F" t$ L; B1 l/ m" x- m
4 b0 R" S- [& X  ?' p
% V' U; r+ o% ~
7 O' w& B. D$ T) r8 f  V
……
, r" ]5 q+ Y% T* _

. `9 C- |7 I+ Y0 W0 \& W1 z  K: e4 ?& u( k6 b: x+ l
' @# T/ \, y4 ?3 @) X" h5 ^
% A# [. s, z6 ~- e( v# i4 J( x
: U- z) V1 Q& N
/ X$ a5 W& L/ I6 v" p8 J
: h; ^3 O/ I/ C/ \/ V! w: t

# L; }4 @, `: f6 i
+ d/ W( |2 Y) s' G, S* m% \
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。0 i# `1 `3 ^. |& V4 o* `1 P

1 P1 w. s. L& n
; [* \# R+ a3 q2 P% G6 [8 W3 X$ @- y5 K7 k/ r) r& e( K

2 S* Q: y: [* K* O" \5 {
8 d( B6 s3 L% a
编译recovery- K- ?, ]: J& ]+ a

8 V- V* g6 E8 j- p& Z/ c) g* H$ G$./build.shrecovery
6 H: b& d/ M) s

1 @6 G/ I, S" I! v: X9 |* p& q. r; y* {) o% ~& I
- {' T' d: o! D+ ^
* ^9 C8 P2 S$ p* U3 r3 X) p9 K

0 g! m% F0 g! F3 g) l% g……  J, t% r4 X& j+ m2 C& e

& A+ P+ z) f5 u) t, \
4 N; y! w# i; ^6 X2 D4 F! v, p) q. i3 \0 z+ L7 h

/ u- V1 ?! H/ o! I6 _8 I

% s) E% B3 I8 q8 g$ k+ E5 J4 r2 N+ }
7 e$ @; Q; f: W, u: b1 C
& G! L: H3 M+ y! t/ j1 a/ C! M6 P
4 ?' |  M* ~( @; j7 Z& q2 D
  h: Y9 y$ a' f1 ]/ f; z2 S
编译Buildroot根文件系统. P6 A1 S. H) s; |
. Q# F+ E* T; @' d- T
$./build.shbuildroot
9 U! h2 Z& C7 {* {! C# I

' J) f8 |, j, ?0 R: N# P# _3 e% Y$ F' [9 T

5 J; W. F: [/ U. p, y

1 M" `) G" y6 C' }1 A+ }
2 a4 N$ q5 Y; y0 B

! M5 W! j- J& v( u/ h! }7 e9 M制作文件系统的时间会比较久,请耐心等待编译完成。
$ s: q" \$ b. G

/ p; W# Y5 w' X% o6 i9 a( @2 F2 p; r$ l- P$ U& x8 O2 r

/ l9 C$ @. n* O* J

1 p0 K  C0 {4 p* V4 t4 H7 u  F【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;4 E$ M2 i" v: M
& n9 J" p4 q* Z! z
【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。* V! ?/ m. [3 Y) d' R
5 o$ Z+ G% E# s% Z( e' [
( P! c9 ^5 {$ U8 y7 ~6 s

: @2 ?) E7 i: m  x; a6 i

0 L( S* B) e8 @% x! K/ Q4 b/ m3. 打包固件
0 X( y! g! l& {
# B) o* D# p( z0 e7 n2 ], b) M
更新各部分镜像链接到rockdev/目录:
/ p. Z% t& Q8 m! g% {. q

; O. `, B( _. J  j8 z7 y$./mkfirmware.sh
4 |# l) M. h1 m+ |' {& W- u

( p; [0 g7 E8 B$ k$ ?/ U/ @5 X) w3 a打包固件,生成的完整固件会保存到rockdev/目录。
: |2 J2 f5 [2 P. Y
+ B. u) g) g6 s5 u. Q
$./build.shupdateimg
4 O! R* |+ k" i$ h# I7 A9 ~

6 f4 @' |9 a9 S& r& V  p" t+ L0 z) [! {5 W; A

2 ?- s& r3 n- A7 H, D

" \. R( j$ o: w6 A

. T) s. U; g6 s4 O* o1 i
+ ~/ v- ?, L' N' v7 P& ?
[PS]全自动编译" \( t3 x0 r+ G! B/ V$ Z
: f& Y6 e5 Y" d; o+ S6 M7 E" Y
全自动编译会执行上述编译、打包操作,生成完整固件。
4 D4 a# o. p/ _  x; P& V

$ [) Z+ l# t2 U$./build.sh
# g. a, E3 ?% V  z

  g6 b$ |: G% R8 e- h2 y* J$ ^) Q) ]1 |, d3 k1 V4 D

& V6 m$ y& z9 u
& s4 n: G$ i0 H$ b/ f5 x$ e
  S7 j' I% s# G0 j

$ N" V2 s  J8 j/ \% @0 Q, Q
5 L* M: C# R) {
三、分区说明
3 Q8 C4 G( m2 E$ {

6 g2 n- g" e1 o6 [/ L4 R% C5 M9 _) e8 t- b5 V

8 C+ E! }4 y7 g+ m3 J
2 k6 I/ _  C, E5 }& d7 M
1. parameter 分区表+ ]" t9 y1 |3 F: i
2 v% X1 e2 w0 Z6 s  p  D
parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:
5 L" ^% a1 ^5 l) x8 n

+ v" `$ v* L6 j0 d7 V1 }; M路径:
2 R+ D( h. L% l* k+ m# `, b

- P  X! ^" K! U) ^; sdevice/rockchip/ok3568/parameter-buildroot-fit.txt
/ M1 F  s/ o* V8 x
* I) r9 o/ p4 j0 B% l( h# [6 P
) I% j+ {) x: H
' z, q% p! S* P- Z) J; k' r/ ~
- s) C8 t5 X( O
9 Z7 {& G3 x7 n  e- A5 @. x

5 z' b$ |4 t% W+ ^" Q0 v/ |0 tCMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
3 P/ x( @+ {9 o3 B7 W& k& n# X# c
* ^; p6 U- @  V" D
/ Z9 S) m* }" x8 s+ n
+ E3 @, p6 X- _, z
. D7 U" U8 t: U* _
2. package-file
. x: W# x3 {. Y- ~8 E. O
" J( ]8 Z- N% {: {" Z) V. X
package-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。: w3 z" g8 _! @! p% d5 G$ a

9 `2 Q4 s0 o" ]) |% j5 u/ O, q3 Y/ X# {/ j9 E. y1 u' M

3 M8 r* q7 E5 `
& ^7 @$ f0 K. B; r7 k9 H- g5 Z" z
路径:
2 G9 n9 i9 k1 T0 T

0 H, L1 Y+ Z; S- ctools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file. F& Y3 O- G3 I: y4 ?5 X0 g
8 M$ Q3 e# U& J0 n
#NAME        Relative path
+ Y6 i) \7 P$ U" X9 k
' J$ s* n( O; J. H* {( v3 }) ]
#0 L9 n+ A4 n2 w" B' `# C2 O
$ s6 G; j- f* b- C  {5 b) L
#HWDEF             HWDEF2 |- m1 L) v+ A: X0 X% H
8 W  F" y: f; k1 C. f' @! _* O
package-filepackage-file3 c, E1 h' g. T# s4 s* x, o0 u! T# t: x

2 S/ N! X" L5 \) c5 pbootloader  Image/MiniLoaderAll.bin& x4 ~1 V7 E" @8 y
2 v' l% B5 g' R- e# u; I
parameter   Image/parameter.txt) d3 w& x; t! ^+ g3 Q0 P+ z2 B

; D* @; V6 |+ N/ a#trust          Image/trust.img  F% i4 o, @2 o$ u: ~+ ]+ b6 {
# |: W1 b5 h* s
uboot          Image/uboot.img1 k( e& e, o0 S& W8 B2 K1 d
' J. r* t/ ?: l6 {3 f2 W, [
misc             Image/misc.img
: n" y0 S7 m* p6 J
$ n" J. r  t9 P, u. p
#resource    Image/resource.img
  m$ W: z! K7 }+ e6 K

: q' {, T+ d2 _) o  M5 b+ S& q1 ^#kernel        Image/kernel.img% D- ~) a9 N5 d1 B: S9 p; X

5 _% v# d7 m3 r. [boot            Image/boot.img# K; P! b9 \" c
- h9 P# \$ R/ x- Z2 T
recovery      Image/recovery.img4 W# u5 U0 I' f7 p7 i, x. v: [

" N! @' Q$ I( k1 ]; b' W& a' zrootfs          Image/rootfs.img
4 ~, d' u) I/ u& K/ u; K' s
" B: O! i! Y/ o; `
oem             Image/oem.img
, ]1 o' L2 ], j. l
8 U& F* t( `7 ^3 |+ F
userdata      Image/userdata.img
4 I9 d' o, Q8 T" U9 B
, B+ {! _; x8 R( u- F0 P% W5 O  T* h
' A# Y2 F; Z4 e6 v0 V# v

& b3 _5 F; F4 ]7 |  N/ m' ?

. y5 z  F; Q! @+ Y#要写入backup分区的文件就是自身(update.img)# E6 U9 K( R/ c' N
1 R- W7 T7 [7 d& U7 K; m
#SELF 是关键字,表示升级文件(update.img)自身+ \6 |$ K: o/ T+ k
+ P& O) D' O/ s
#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
2 v# a2 ]" N+ A. v, o
$ O/ g0 w9 z. {) ]. M# _
#在解包升级文件时,不解包SELF文件的内容。
6 A( z7 f3 V, |
" X1 H$ n5 b  d, U, y& d. s

7 _8 k2 H: L  A7 C6 J
: Y/ F: J1 w+ d/ ?; R- i; o
( G$ s  `$ E! P( ?
backup        RESERVED
/ A* p% O2 h  S5 B/ O

, l* p+ R3 x/ v) m9 f#update-script   update-script+ P2 `5 S  R$ q7 [4 x6 D$ x
" X; \" W4 r1 g) \
#recover-script   recover-script
. _7 j' ^) k' ~. c6 {

# U0 D. m# d! ?: F3 z: {6 J: p' R) c1 E0 U6 ?2 t% F* D$ t0 R* r7 O
+ W  y8 [1 p. d" e/ _% k
# W) G$ ~' {* V; O) U; _
四、镜像制作
, b1 M' P% Z$ G! I

* z' E0 t7 N5 }* Z0 Y" j' W: q
( x# }  ]1 M" r( Q( K. E0 u& I8 h( ^" H: [
$ [5 u! I+ z2 J0 T
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
; P$ d7 E, o7 H$ M- E5 B; M2 N5 o" n5 K
8 j, G! J5 u9 S0 e5 }& Y
' k/ L# Z  k5 m

4 L& H* ^  E, c* n9 L' `' j' o' ]8 e" M
% H4 j2 N- |- t1 k  f0 R" C6 P
1. 工具安装
) J3 S3 S; B* c, A' ]  y, H

! z% k; M: T, R& G下载工具包:3 _2 I0 U) Z! Z& j
2 x/ ]" U  E. v: z1 }0 Q
$git clone- i/ G/ T" ?0 l, k1 t' d
3 p' c  S" d, _9 n
https://github.com/TeeFirefly/rk2918_tools.git
& e% ^. d; f$ o: @7 t4 G6 I

' O) U8 a* M: D9 i* U4 ], d  N  y# O( U5 K4 G

0 k, G0 a" H; Y/ t% C, v

: L5 y: A8 P+ h, |  D进入工具包目录:4 l2 F, K/ s. j8 ^2 e  G

1 A$ b) u1 ?% ^& W$cd rk2918_tools
% j/ V0 ^. l( \% }5 Y) G0 L

2 g! S/ [6 s# r/ ^& H编译:
6 V" }& d7 V: j/ V3 f$ Y' \

4 V+ e- e+ p% S2 e& Z4 r$make. p) I6 x* g2 _5 @% T  O
  {9 P; {8 |3 z9 {+ }& Q
( ?, y8 [8 S6 f0 s0 i% [- W

% Y4 T/ S+ s' B, \. g. x
; k" y4 z- ^: x, T  x) L
% E" l) f+ |0 C2 {% m  Y# L
将可执行文件拷贝到用户二进制目录:
& N5 q" R. S2 e3 N: h6 A
5 O( ^/ S6 e7 @% b9 d
$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin
  Q4 q1 j* q' L% e- r

, _5 x1 a: i" f% x& Y' H: V4 w/ P! t- R, G9 \
' n3 h4 d  t0 n, V8 ~0 Z& U
0 h# C; Z7 j( J3 u
2. 解包( {$ M/ n" ]1 {- {
. \1 ?* Y4 d* ?; q
将update.img拷贝到Ubuntu中,然后使用命令解包:! p1 }" j1 i" l  l

0 F! [' B( r* q* C, x/ C$img_unpack update.img img: o5 W9 X7 j6 x* i* `4 T
" ^( c3 d* p8 W( Q# s1 T& F
8 z. |  b+ R9 d+ t0 }

! J3 W: i. v9 W

1 e) J5 q+ Z% A% Q* K. a
9 q! s% f4 S8 t5 W" @* r9 w) k
* ]; H5 w/ f! q. J

! d! q7 i1 ?8 D6 G& l  v

8 n5 W+ z+ {/ m* ^! J解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
) Z. g& g  _7 K  A+ n7 w9 N

, o3 L  b6 g; K  {2 G
* ^8 k' Q' w# ~/ j7 Q  B& p2 {8 X0 S* y% T4 M6 j

7 ]1 q+ Q+ p9 y& L) k
" d, m$ r! X9 L' I* E% u$ _
+ S; T; W! X: d. A

+ b$ Y: @& F& C  q' g+ A7 u: G

3 z% ?" S. B; K7 X2 H/ ?1 C接下来进入到img目录,使用afptool-unpack 解压:
  |7 y1 i- o( s/ ?9 g8 Q7 w

$ V- L, T5 Q7 O$afptool -unpack update.img update1 z, {5 D# _: G! @  {

4 Z9 G* z' X0 P( A. a4 F) e6 H! |
  d7 w# v% }9 s, H7 g& ~
6 }7 P/ {; P1 _. z

% q3 I  |/ L* @7 v% {2 G

; \1 |! S/ @5 M% w# @% S

5 S  j( f6 M! W0 u解压到update目录8 i4 k2 K1 m) m/ f  H

' N% h% Q  S  n打开update目录,里面有很多img文件。) x% S* t% n# \: w

# r, X) v% X* }2 C4 N
% t$ A3 D5 R3 {7 D: C5 Y/ x9 b( k: V+ u) v7 \0 Z2 k: [. G, ~

2 V- I  M2 _" u将需要的文件复制到rockdev目录下。
* n0 f4 ?4 @! B$ _+ V9 r
/ \7 l% X2 @5 O; ?4 S, }1 A/ B$ j
/ R4 U( J  U9 ~0 M; f9 Q5 h

% b; A: t$ r) ?7 `5 e' O+ q; p
) \% L# d- ?  q  {/ A
3. 合成update.img, i6 Y+ P7 H) g8 n" I
6 O/ S$ i& }2 i; g* d' r
然后源码目录以下命令即可:) g8 n: {, ?. R9 U0 f* F

+ e# e+ r% E2 z( c/ z) G+ Y$./build.shupdateimg
( n$ _' p; I+ z% T

' {$ }3 N- z1 ~8 d6 m2 W7 y- W' j

- \' l; q" `3 A
6 P. w) z+ v+ @2 u

, L9 r2 ?0 T: k* [6 v

该用户从未签到

2#
发表于 2023-5-22 09:54 | 只看该作者
步骤很详细,要是能申请一个开发板就完美了、

该用户从未签到

3#
发表于 2023-5-22 13:11 | 只看该作者
) s. W! v+ L9 Q: j
步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 22:20 , Processed in 0.187500 second(s), 23 queries , Gzip On.

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

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

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