EDA365电子论坛网

标题: RK3568开发板上手编译源码 [打印本页]

作者: 罗罗诺亚    时间: 2023-5-20 15:08
标题: RK3568开发板上手编译源码
一、准备源码
( n6 }. V! v9 q& e. g* O# a6 O

3 a) B- e: [( ]3 f1 I
3 _$ v0 f+ p* o0 M3 z: k% L
# ]4 b4 h. v2 O4 o) `0 Z8 t
) p, \- }" L+ q0 n
1. 创建工作目录
* ^+ k( M/ s  T$ a% Q

! a* [! a/ @( Y7 P$mkdir -p ~/rk3568
$ ]1 L, \( M, D* o
; Q! j( J: ]3 N5 h. J6 ]& m8 N; Y
& M- t9 |' F* O

( L  D: X) A" M3 m( |. g  \
# Z8 W  `. L" @: R( {: V
2. 拷贝源码* l; v, i! d/ H# @' o6 U) m
. O% G4 g  r( ~) @2 i0 A9 }) [
将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。& C8 \2 N# o; k2 _1 l% Y* |
( s: X5 @" T; c4 ?% S9 o

3 H; ~! r* [- e# ]- }" i
4 B- W4 O6 y- q: o9 e( o

: B. r2 j3 }7 `" B9 g" E

- l  W* N% h! W1 ^8 k, T! U- q. m8 U5 V

) l+ T0 D* C9 p6 e4 h
& e  T5 l2 I6 Y+ M拷贝文件的方式有很多,笔者使用的是共享文件夹方式。4 `1 x$ D* W, K5 f1 h
/ x3 p; X6 {4 y+ Y, M' j9 z

; ~; e4 T& X7 _! `4 h
! j& T( }; e8 f! C4 b/ b

& p/ i& ~0 S+ V6 @: P9 v【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。
0 N- V( e- \: P
1 `' S2 O0 x- h* c: U5 e

# B" H# e! F6 E+ y1 Q8 K' w! S' c, M$ s! E  }+ r& q$ e' K
7 ~$ G- B3 V' k  X8 n, x+ z2 a
3. 解压源码
# ~4 f* O0 E+ p8 l
1 H; m( c; \7 c: {; r6 Y4 t9 w
$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2
2 m3 w( b$ ^8 q8 n0 J6 K. @, V8 V
) `! C: l% F; @( y0 ~( r8 z
$tar -xvf OK3568-linux-source.tar.bz2
! _+ x4 C% n7 A
; s: S$ o. w$ G3 r' n; B2 L

8 s, D2 v" w; |6 d. ?& H9 t& t' z% {7 H- o1 ^
8 ]9 M3 q4 |+ k" {' q0 Y
耐心等待完成即可,解压时间有点久。
3 i7 [$ B4 Y; W  Q( U* t) s& j: H
7 o7 U5 ~" u0 }" c* J5 C

( V$ C* s6 Q( E9 Q  |1 u: s1 D: H! I/ P- O$ C

) k; U" j9 @( [7 l- F& @7 l5 j2 t. I4. 进入源码' p5 k3 M( \  r5 K) s; _$ j* ?
+ z5 `5 e* i; L: |
$cd ~/rk3568/OK3568-linux-source
# H( e  z# d* E+ N4 v

% C# y) V1 j. I) [* F目录结构
8 o6 b, P2 T6 r9 I) _) A. a7 j! h) N
/ T2 F7 s! D9 v: B4 D
, r9 a; {9 I3 [7 H% t
* e% a: A9 s+ Z

! D* v4 `3 I: U3 o0 K5 j( F5 X

* A  w( e) E  V. d( b% f3 `) M- ~7 Q4 \% \. O$ \: X

2 W% E( L* e1 V7 ^# i! V) N$ @7 }二、编译SDK
+ \7 u4 J0 t+ T5 I

( ]8 U5 \! }& D0 S8 Z4 S$ A* D* Y7 t( q3 w6 @" C+ l7 T3 O

% L; N# X5 W" u" e$ ~- G
0 Y; Q- {2 P# M: L) ]" c) u& `
1. 编译前配置. K/ d4 {& U; D- |: X' y. u
7 a3 ?. r! q- z* f9 R& f# A
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:4 O" g8 s; b0 I0 x3 @5 p
8 H: a+ x% \# Q  D7 O) r1 v1 w5 l
$./build.shBoardConfig-ok3568.mk  ; m. [2 e0 {. l3 q. N0 N9 L3 n
& k% t) d+ l6 B4 @5 G
相关配置介绍:
/ s- ^- r; E$ m$ X
8 F0 U+ s  T9 w* |2 d

* l% K3 p/ \$ W9 b  b9 A- Y- [: {% a& O' ^4 k- ^( u
' q6 C, Q. D% L) |

. ]( V  B: \3 C2 Y; u1 K. Q! Y7 Q4 M8 B8 z" J' p. {+ P
2 i* t/ K- ?% ~/ z: I/ p' u

7 C3 }" B5 D. |* `9 |# u
( M, o1 C$ Z! U" Y* V: J2 q
; W5 `' o; P& b0 j/ q6 B0 b" }

7 B+ [% {( x( H) _+ Z% ~2. 编译
% _& f. w+ N: `- n$ i& i( k9 b

  h6 \3 Z! ]( g/ Z& |; J7 m  t' T" \编译u-boot2 ^/ t# C7 y7 z- S

' e  P8 m  V- X* m  [2 u+ |$./build.shuboot& s- R3 U6 O. d! m
% |+ X9 e$ [( A/ w

; S7 c: M5 I2 ^# g% {9 c! t+ d
  M2 ^% O& b3 I1 g
+ W5 G% s/ D* N4 l6 w

1 Z) U" }9 ~* D5 M" n% d- J1 f6 g9 `2 g7 t1 @. M( Q+ }; \8 h  R
, X0 X" Z: d1 i1 S+ h7 {
……
2 V# a5 \" I9 x- c9 V. B. \8 u

5 [- v' M$ G. g8 q* k* A$ C3 n7 J7 w
. g, E/ u9 I2 E6 p$ {$ T) l
( g" g# a4 S5 V# m, v* s* T* F4 d

( q9 g# ?7 \6 k/ N
) g8 Y- W3 o4 j3 H
& i  m: `' _# _8 m1 E8 d; [

0 H& c+ ?$ v4 _4 d; v编译kernel. I+ I/ Q& H$ b& t7 x& O# J

  b+ Z5 `, C- L! w$./build.shkernel
; w% M  m, q* `3 o6 ~

( F& l9 t+ R- b2 F) h& D& V% _8 x
0 b3 _" S+ q8 m0 f0 t" T; N
# l6 J7 O3 R7 K  f

# x' X* T- \3 y; F! v

, i; ^; f; f$ ?9 p1 U
' d. C- u$ O1 q8 q) N" S
5 ~( [  Q) Z. Y4 M; T; R9 ^5 J% g" \( N: T$ z) Z
8 V) {" N' R5 @7 Y9 ^# K" o
0 Y% ]; ~2 L) j- t2 Q4 q% q
……
" n% q9 ^" x) {9 n- o* \$ Q: l

- s0 L. A. l/ O( z- U: j7 b3 l, {; x9 `4 F" s  \

, r. L& H, M( ?* v6 F: w7 A

4 V  E  l2 j( Q1 M0 F! x" g+ I
4 c  x1 d8 a2 o# C8 y9 Z- f/ G

9 G; x6 a* A$ B& z
, C9 }8 \( x7 _) v' j4 z; [! w8 p( _4 h5 Q: ^
: i, }" `" M; Z% e5 Q2 t' M2 X
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。2 a2 F7 @& K* A) a6 R: q" s

/ O, Q5 R; P' Z" U& U8 f0 x3 t; X# ^" c; p/ i
( q5 t3 U( q  A6 D5 O

" P6 |. x4 Z; A/ T, [. h* n

: r+ ^2 f( E, B1 ?6 I" F编译recovery& x2 L' |$ O. T! v4 K) k7 y) _

- j8 P0 u1 _% y( z( _9 F$./build.shrecovery
# W" a. B3 x* N' Z. d# u6 Q4 Q
2 P* M2 k1 J; I5 r$ T

4 y5 F( Y5 c; @6 T& Z- ^: _/ N+ k) R) p# X" w

, I2 E+ N& K2 Z& k* c' o5 c

8 Z( o" ?, {  n! I3 C  A$ G* {……
2 b  A8 i% P2 Y
! q+ i2 v2 j3 ]% h" Y" r' H
+ f1 ^! [' v* }
+ w  w7 F- Q: ^+ V& B
/ v$ |9 P6 M7 A7 b, i( G  P

7 w" X( T) v* l* z6 J: M

5 ~  \9 c9 [5 c/ l: r5 f! m, n) v$ d! R9 m4 N; i4 C9 G5 e

! T+ z& o& \$ p; C8 {
' l0 n& w9 ?7 a: J7 _
编译Buildroot根文件系统+ c* ^, o0 f- R/ {/ u8 Q
/ A' J6 J! M: ?- M- Y- b
$./build.shbuildroot
$ i/ \' q# x- T' v# E
0 z; n8 c. m1 J) Z- `
6 X7 ^) C  c0 M" z; q  B& ]2 v# v4 L
% s6 Y# T3 }# }' W: a% j6 f

* |4 ~1 t" R. d1 N7 C5 F

; p- m. Y. l5 O+ v' Q$ H- B
4 A. ^- {( e: M# K2 \2 ~$ G; f& J% M
制作文件系统的时间会比较久,请耐心等待编译完成。9 {9 R" v; c7 V, T- ]
. B% r$ Q" n8 m, j

6 Q0 e; h2 h8 A, l$ ?! d
2 V' M0 `* u; y# G! k
7 ^6 e5 \0 h+ P) n9 @$ T
【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;
7 W( V% G0 K% F" s4 l, ~4 \
5 ]2 k9 R8 W; H, f' z  K1 L
【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
+ c& d- l& r4 h" d& C

9 ^- V6 M8 p: ]- P  ~1 w/ s* H4 n( N, I9 G, P) \5 w! m

6 J) f" E3 o7 R( l6 [+ h

* f8 u0 ?0 J6 @' K9 ~3. 打包固件
: S: m. p6 U8 T7 T* M

# E: E9 z0 p# Z% k# Y1 B' R更新各部分镜像链接到rockdev/目录:1 G: n( |9 B5 w, V* y; k: Y" P

  y* a& l" O# H6 `2 \% d- n" M$./mkfirmware.sh) s4 n# A9 t) S$ |" w; }1 N0 Y3 R
; e$ p9 S$ d# x' x
打包固件,生成的完整固件会保存到rockdev/目录。1 r0 x4 g. B# f9 F
. N% ]' l, B7 L& E1 t
$./build.shupdateimg
% y  ^+ C7 m6 _7 x2 ]
  O6 z; w) g: s, G/ l  u7 r7 r

" \' h% z( i. {/ g1 a/ k( ]% K& `( \! c. s( D- ?! a

6 \8 C& b4 j. e  |" L: w& r
+ H4 P$ H: z0 d6 B9 Y' t; H

% E, U+ ^& t5 a7 R[PS]全自动编译; r( \4 D, x& e8 i) l% U

" J! N5 _2 ]- O全自动编译会执行上述编译、打包操作,生成完整固件。
9 g  k+ |0 b; p
+ o. Q" {& [  Z; S5 b% X/ R+ |
$./build.sh% G* O( L9 i7 z7 @

- u2 n7 o, y1 h  K6 S7 i# r/ E( b
) v  o0 m' I1 Y: f/ x2 E$ [! H4 V5 d, i
9 q0 v. k: m) H4 @) E
' l1 E1 s1 v  z' {- ?2 i' y( `
. k, n' E1 S! q
$ i7 N  B9 `- h! n* y
三、分区说明  S$ _$ y& J7 x9 J

/ r) h" j) O# O1 k7 q
! M1 @5 Z8 Z7 [- W' {& v" o- S( q* K( ]$ Q
6 ]7 J- W# k  Q+ ]  y; s# d
1. parameter 分区表" p; D" w; ~: h, K" Z* R( h- c. ~% t% E

, v; Q' D- \; l2 C8 r6 u9 m, Eparameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:  M& F7 S2 ]. ]( r

" x, G: d1 a& @* O. ^/ N9 ?  c路径:% z. ~$ ]7 R' x4 R, B- ^1 l5 t, h
" z* |$ W8 |5 I8 b
device/rockchip/ok3568/parameter-buildroot-fit.txt; [, o" ]4 s# Q
$ L  m. i+ B) }+ m* l, R4 L- b$ Q
' W# i' D! ~6 i

& o, y$ b# }7 u! @1 ~
5 p  }" n& k+ _& K/ Z
, o5 |* L7 |* M. p2 ^  ?

( L. U, R+ m; ~; O4 S) {CMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
) A0 ~) c& \2 X
( j  j" [( P" P  F8 f4 l/ y
2 U9 K% N% ^9 N
' Z6 d. l9 p: Q+ g# t. w

, k$ J; W. D" d/ `2. package-file
' W  @$ h# T+ v5 k

& a* G, j1 ~+ a- v2 g% f0 G* Qpackage-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。' f! F7 h* B3 m4 I4 {/ E
2 Z! M& ^; S! g, S

& ?7 H7 y2 k$ C2 j2 W( c* N/ q9 A3 v9 Z% K3 `  H' ?; T1 F

! u' ?: T( K: @1 G2 T路径:% G2 |5 H8 K8 p9 ^& @; U
' Q; T2 d. @0 q7 ]% a, A
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
- O- G1 Q) w( A3 ~% C; {0 e/ I

3 ^2 L6 ]3 ]8 \8 q" A#NAME        Relative path. V- R! J* l8 N0 f

2 x! }# {/ p$ F# t' `( u1 x#( H4 s, ]8 v' v
# {  l% f4 `, M# u% G4 h7 \
#HWDEF             HWDEF- M% X# i! Y6 m2 z4 a" h% U
, g4 E* h% f& p# J9 e+ j  R8 ^
package-filepackage-file; W2 N* p: e  Q+ c

2 t- N; k0 h" ~bootloader  Image/MiniLoaderAll.bin
8 ?2 p' N; s- h5 n* \) r

4 U& Z! h' @6 dparameter   Image/parameter.txt, Z& S' f* \$ y

$ \0 l/ H1 J  }4 p#trust          Image/trust.img
9 g4 i; E7 B- @- k  V5 n# @# Q8 ?

7 J4 \( S( o8 Y, |uboot          Image/uboot.img
5 {9 S0 U2 q. A7 p/ j$ ^
) H4 q- ^9 s: M0 b8 ?
misc             Image/misc.img" F9 X% t9 m: x1 ~

' a- W! A1 e+ \2 `) b#resource    Image/resource.img
, b9 o# O) ^- g+ D6 K
7 V2 h( T, c4 N
#kernel        Image/kernel.img& H9 `8 }! I4 N( A2 ?+ }; W

+ g  `* B5 r) yboot            Image/boot.img
* w% A$ U6 _1 Y+ M$ W

0 j4 E7 T* ?& L7 q) }recovery      Image/recovery.img$ ]* x' f- ~, j
+ G/ |5 h& F5 F3 U$ I8 B1 Y
rootfs          Image/rootfs.img; z: {" E# U! d5 y' {/ T; T

4 f- C- K/ K% O$ l+ e4 {oem             Image/oem.img
6 A. f; P0 a3 t( h1 V8 N) l* \

, h& x" E* [% A' tuserdata      Image/userdata.img
0 w' r8 ]3 J! {9 _3 H

, d  W. Y+ o8 V! ~3 g1 n& Y
* ~. U% [* O  z. p% {9 s- A  q; n0 M
$ M8 V6 t! b" k+ n8 P+ U) d/ K
3 G( M% @  c) p# J7 Z
#要写入backup分区的文件就是自身(update.img)
8 L. d: _0 s1 |. p

3 X2 E$ m) A; x  ?8 p#SELF 是关键字,表示升级文件(update.img)自身
+ P; D+ U3 B% V) X2 M

3 I9 R1 P6 j% d; k$ G#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录5 V; h0 r7 f# W2 v3 E' Z; v- P3 `% ?0 S
$ E3 K/ j, {6 Y: u1 D
#在解包升级文件时,不解包SELF文件的内容。  L' J) y, U* F8 M4 y! ?6 w0 c

8 j# x7 v8 ]0 c* i8 p: a) Y3 U  `
  a0 @0 N0 w( Z- G% v% }6 a# s; f* j( Z, T
+ C" w& s# x( S, H2 q8 C
backup        RESERVED) S8 k3 {% d' q: d1 ^1 P

7 `9 S) V$ R0 F. D#update-script   update-script$ N  {! w- O- d
4 G( W/ i3 l8 ~
#recover-script   recover-script
# J, U9 ^- c8 r& ^5 X
  O, ]2 }, P6 B
8 ?/ L& X1 _$ v8 _8 Q
: B/ I- d) y3 q; l0 ~6 d5 R1 |
% W9 ^: L( H# w' t5 @
四、镜像制作
! ^4 E1 e5 j( C
, _4 s7 z4 a, l8 j5 K, d$ X: H

" Y$ Y# j- b3 w9 o: i9 r
; J# |7 K, u* |* p/ \

: I- J+ @( E5 o" a编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
; F5 a3 }9 C) o5 {; u
- @6 c. T/ m0 u. p9 N
6 f# h2 O/ t& x6 I0 y/ Z& K# ^

# _) L( D* u. V6 ^

2 x+ E4 _! k8 w0 g1. 工具安装6 W0 l( {3 H5 H: @- q

/ U5 i- a' T) p- ?6 D& F7 R下载工具包:
/ h, J: i* {  Y8 R6 s. d% k4 i. f# A
; {6 {/ {3 D. S$ Q& @
$git clone
% u) A( o- c2 j  X% `2 ~

9 F0 M- [2 m! o2 ahttps://github.com/TeeFirefly/rk2918_tools.git
9 A7 {$ Y+ p* ~3 L( S4 S+ O
; B9 S# u1 X  G" z) N8 ~
& h! d2 ^7 e  L4 ^( ~/ z

. M5 V# x2 M/ G; s6 A

9 `7 ^2 p! S8 w进入工具包目录:* L5 K$ g" i6 Q

' J7 p# {5 {1 s5 p3 x. u$cd rk2918_tools
, b: Q0 H* Q- Q/ E8 N* [7 X
; e9 ]& x0 p* T+ ~& n! ]
编译:5 D2 j3 ~9 W, z( X+ t9 m

( J* Y( ~% J: \2 v1 J$make" p; V* z/ b7 q& P- w( B" _0 o, D, f# W
" o$ p. k- E8 o0 }

/ a1 g, c, A  v' \$ w8 R! g
- n( B/ r3 o" F5 \$ D( [( P* I

$ X9 g. ?- a0 Q& W* n' k2 k! o
# K( K# E" H4 D4 E
将可执行文件拷贝到用户二进制目录:) |8 ]' y+ \! V7 G
. e; |  X3 Y: F) s$ V+ f7 s
$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin( c! }! @; `/ z1 K
& F" ~) @% p- c

2 [3 l+ o0 n* h/ H4 C2 n" |
  {- }; E5 |+ u+ {4 X. R4 q
$ D; U8 b2 f' M( A/ n) K: N
2. 解包
2 @+ @- [6 R2 }: y- E5 E# F1 i2 \3 W
& @0 M$ C. S/ H  H) r
将update.img拷贝到Ubuntu中,然后使用命令解包:% T" q2 E: [6 k2 g7 W
( }$ G, Q' U% L
$img_unpack update.img img" Y! S' h0 p: D( M% }" ^  i) ~
, ?  X' f" ?- j3 ]! H0 c3 l; z" w

' o2 F# l4 \9 ~- n3 z4 y9 _6 e" f  S9 X  s3 v' z! F! @

4 j9 k* f7 S7 h$ c9 O

- k, A* g2 T. U  ~, R& l. ?; \9 Z0 k. p1 x" S3 K

% y- L3 n# `+ h2 x8 ]) \

+ H1 ?2 w! Q, l8 l% w解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
! G5 B9 k" T" {$ I) V0 b
1 e4 q2 i  _/ N* p
& M1 k% X: b$ r2 Y
/ W: b% k' G; O
/ n; r8 {. T: g0 W0 S

9 ~% q9 t8 P8 h4 S5 _/ s$ _
  _$ e, p) M. j" G) U4 N, `
" L3 h% @8 h* @$ n: {: o
' n; c( S1 \& @2 k# X6 M
接下来进入到img目录,使用afptool-unpack 解压:
1 }3 o% ]  b) A% I

1 G- }1 |  u' M2 A# Z4 P6 s$afptool -unpack update.img update
+ r3 @4 Z! b! g) |
3 W; \3 B- q& Z
0 S- Y$ s/ u+ @6 O/ e4 s
5 j2 Y' L( M; W6 L% P' A  \

% R$ C3 |7 d! d; R- a$ `
1 u+ J& W' K& B5 Q' H( g& o
9 e; y9 [5 T, L; W3 }
解压到update目录
( \! @+ \; c5 v7 G$ n0 @, a* A

( [' S# ~/ {! u0 @& A打开update目录,里面有很多img文件。3 x0 f4 P: d1 b0 p9 C1 z* _/ C

4 x) Q4 ?; {; C5 |* g! d
, N9 x+ e; K# X3 k( \8 J  G" y' F) ?5 R1 J2 Q& X

4 K0 S! F4 E) }% @' E/ R+ M将需要的文件复制到rockdev目录下。$ v! S, B- ^. w# O5 j: Y  Z! m/ H# q

2 v% F! d* o) _5 ?' m2 [( _
6 z9 y! t' g( q3 P) x, t+ E  v+ }, z( f4 j+ B
! {7 {6 {( P; D" j9 Y8 G( i# |$ h# t/ |
3. 合成update.img
6 y; R0 m  |4 G5 H+ @
4 o& Q3 V/ [( v9 `, y& t& i  K) D
然后源码目录以下命令即可:) I7 r6 _8 F' q, C' c; O

: B5 e+ k, b9 M4 `$./build.shupdateimg
, h7 I4 E6 _8 F& }2 L& K, b

& G9 ]# L7 I8 x8 k4 V) s
# X5 v% B# C1 L5 Q
( x- E+ Q/ {, W% b$ v1 g7 z0 V& r* W
1 m# t, k+ U# _, x* P. @  j. e
! P# L6 j3 Y0 c8 k* B

作者: Getaway    时间: 2023-5-22 09:54
步骤很详细,要是能申请一个开发板就完美了、
作者: 6940    时间: 2023-5-22 13:11

: G0 T  X6 _) @2 f9 n2 T" K; H步骤很详细,要是能申请一个开发板就完美了




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