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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码
' C5 E- \' X* `# B( u

9 J5 L& e  r. s
: ?& x- a3 R& Y1 h  x" C  I% l1 A
0 u! \# W% k, Z5 B1 P9 b3 @
1. 创建工作目录
$ }$ C) B* \0 O1 q4 r' N
8 f+ `" ^, V4 W. A1 _
$mkdir -p ~/rk3568
. [/ s& X- P( z9 V, ]# Q

7 ~+ o& h& b+ t& ]: B. B) z, T7 p% }$ ?" j( I$ i

! X( l, D9 ]# A9 m0 @( a
0 N  @4 S2 y' ~+ a* |" Z: Q; U
2. 拷贝源码1 x3 H6 Y( N9 R) }- ^% D9 R, u
( r" ~3 [4 ]: n" n
将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。# w2 z4 d# w5 h8 v$ S

- }# P. m0 n$ y/ B  U& V* ^& n
' J" {0 ?* p# u2 d1 p1 i
, o9 r- D0 U( l5 w; o+ M' C0 f: ~
8 K4 c6 H6 `! ~: y+ I! T. ~
; {# a# a! h; Y. A+ C1 k8 f
5 }5 M! V9 T: ?, M) u% h
* y- ^8 b- M! M2 Q7 C
. v3 e4 `+ C2 Y8 v3 |. a5 W
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。
5 Q- v9 J! Y9 c6 d

8 _% \2 T) V; p! D  \: y  G# L- Q2 R. Y3 G+ s
* C! ~( h* i. z# c4 p* x
9 `- N5 `4 |9 w( w+ {
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。7 M4 c' E$ M4 ~8 V6 ?9 K* P

+ p- s& l& ~; Y+ J- ]7 m, }9 m6 o3 G" m
. [0 A+ L$ _4 A& K+ I8 l% V
: g' _# O# r; H" _* W! |& i" O
3. 解压源码8 ?% E$ O2 Y- S6 @( i# {+ H7 t
. ], e0 ^  e$ y5 ~# U( f  r
$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2
/ U3 q8 S- X4 y+ w# [- g

! ^# I' Y) _5 U7 D! Z$tar -xvf OK3568-linux-source.tar.bz2# q% q% \; K" o* q# y

4 _3 q7 j8 d6 t6 L# Y2 e5 d% Z$ t3 m" ~6 s/ o$ A
9 ~' Y6 ]* c% ~1 T' J* n
$ S* O! E/ |+ X
耐心等待完成即可,解压时间有点久。4 H' m: t8 p4 X( E' o& l! L

  v( I6 H# u8 V7 t7 Y: I: K
8 {  ~, q. {. z! r1 x; x; D8 s) c) d

0 P8 J7 s9 r0 m5 ^7 u9 ~4. 进入源码
6 H/ Y; Y6 X) z4 T0 Y

6 z' B1 ?3 K4 b: x2 `4 e  J; U: \$cd ~/rk3568/OK3568-linux-source
$ V' n+ _7 C, m+ f+ s* ^

- A7 j4 y+ X+ Z( l目录结构9 P! d, L, K$ a3 Z

/ t! A: ?4 y4 L7 C; D) v' ~: r3 ^  s, J* F! ]: V: e+ Z: q
5 g8 }: `1 ~: d$ W4 A, Z# }1 N
% q7 Q/ k0 _4 A5 a
) z% g) T6 H% I" Q9 \+ p+ J
8 I. X& K8 a& N9 j8 i3 w

/ L* _( a9 ?% I: j4 [8 [二、编译SDK
8 ]% g  K9 d& c- G/ |) c$ O5 k
* h1 j  o7 r1 ~; t
! E' j. D8 K; ^  b  s
+ k  e, T* c# \6 {

0 ~) j  k! T8 r* D: H% i  T' \7 m5 L1. 编译前配置/ n" ]8 x  i5 A6 g$ Y

' C; B4 ?1 r& \6 p在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:9 Y  D" t/ }. y* u2 Y
3 i+ O! n+ V% y/ Q1 c
$./build.shBoardConfig-ok3568.mk  # z- i3 \1 Z# ]5 ~( Y  J1 _( C% H
# @2 x) S9 I( j2 J1 N4 m2 c
相关配置介绍:. w. p) F0 x; O' {

5 U. [6 }& G. {& p. {% k' ?
& U; H0 {" g. l
; m* f, U7 a! T% ~
% _1 G8 l, S$ B  G1 k4 U
' f. \7 g' C' m  S6 `  U
( F' U) C% N- A4 s$ X
2 v+ \2 B- [, [9 f, e
) g! N9 l  o0 U- M  N
: ?: g/ w7 k8 z9 F
# o5 {1 @# Y% Q# p
: x9 ?, {$ w: M5 s3 _+ e7 D# ]9 q7 m
2. 编译4 i& A8 j: O! N7 U& [% X

0 r4 ?& @/ v" ^8 N, ~6 U/ j2 Q! }编译u-boot2 y/ ^2 ?1 i0 a, e; e

+ F% C1 K- \0 L4 k, m$./build.shuboot
/ S! I7 P% G0 j! D$ y8 k

" Q/ b% V1 p9 Z
3 U$ d# Y# T1 M* f- n( a+ \7 B. S) |+ _( U  Q6 z+ O

' c  q  i" P5 s( S" t+ U

/ w$ x, D2 V. z5 k1 _1 k5 ^3 d; o. n  S2 V8 K7 {8 k1 Z- k

1 V8 y  Q/ a- \……( v8 R! Q& r' y1 d9 K
8 N# K# P/ r2 E8 u, J

+ @; N% A# W2 A5 M! O4 }
- i3 o" a1 b% L9 _; v

" M  U' |" q( z! A
" \  O) B5 g  o  [+ K: l5 q4 u
# p$ V' S' _5 w+ e' s$ Z

" I2 h  ]6 k; o% |/ m/ i. x
; Q. R+ K7 C, V
编译kernel% S& t2 F* Q: l+ G0 A

8 \% Z1 m2 H$ h+ a; D$./build.shkernel' g+ W! J5 T; g6 |2 f( _7 h
& ^: q: u  E2 m& H5 J% W. b

0 K* W1 e/ l3 N) u! s5 O8 Y1 f" B4 c: p5 N; p9 H, d

, f, u8 v! i4 ~3 B+ P) W6 ?

. L8 ^' M& R, W( R5 A( V
3 N# k/ q& f. j; d- d& F
% @2 K7 I, B& S6 D# c4 O3 z% P. E

4 q3 K8 N6 g& O
7 \& L" q8 ~8 {, c- N. ^
……7 V9 M+ e* `6 v5 ?& }6 Y

0 d! W7 a) ]) ~' z4 ?/ e, W/ i5 f1 \
, }+ }& d- _& E+ D3 {
$ t/ m% s  _# x1 a  l9 g

6 Y4 X+ H/ \/ r# [* i  ]
" j$ S8 @* A* |7 t( w1 ^3 T

4 @6 u, M8 [- K3 ^7 G
( K: P4 j9 k0 `4 P
4 ?$ x" H3 [) L
* \: K$ v  H, L5 `$ J8 z$ M: Y
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。
- g, R& y! }& q: l) O. B" a" E

1 ]6 i! X4 L+ c# y3 T
5 f5 c( N4 y3 I0 X" U+ r' s+ R
! w" [4 m+ a8 B2 u
6 B) Q) ?' o0 i* F+ e+ a( F

/ O/ L) e7 I& m! v8 U编译recovery& m- M* O- x' L8 _! E8 K- _9 B% y2 f
# ^4 f& e; S1 U
$./build.shrecovery
9 r. f! y# @5 }/ w
; e1 Y4 R; H  H" T

8 s5 P( D% z/ a# F1 U! k+ e$ F& n& Q6 a9 W: {' T3 w( s

& u$ I9 v0 ^8 `; d7 \
! ^0 b( n) m3 \! U: ^
……
+ e. R6 D2 t2 x" I/ X/ z2 T

2 U- [. `1 b7 U$ |1 B1 J, M8 l+ s0 K6 g, H. l1 V6 F* @  m
" T/ n3 A* y( Y) F

" H9 \. X( E0 i5 U; U
- f$ \3 z. G4 O/ q

# X9 Y$ z/ m7 e, C5 M5 z0 i/ M- m' b5 b; o
, d! Y& E( k6 \0 l* B
1 m9 R3 ^& N* [) p
编译Buildroot根文件系统
8 a! m$ H- A) f- D! }' \

4 }6 {$ b# e5 D, g: r$./build.shbuildroot5 p! K5 O8 p" `! R" W

* t0 j  Q) ~5 Z- u0 {6 u3 Q
) {( F8 g6 s; ]2 d5 ?8 ]# J2 L, K) K5 s! G) p! {
% L4 \2 p* Y- G" n: V3 e2 V$ B
" I: P6 S  L, E2 @1 Q

: {' U' I3 X2 J5 H! ^  p制作文件系统的时间会比较久,请耐心等待编译完成。* i, Z$ E( @5 I; a7 o0 V2 S# z) k

( V6 R7 i, k1 c) n. M" r: x+ C/ G5 A! s* F  P
; q/ C+ O/ c  M" F7 A6 h9 _
7 ~, S) _$ @9 D5 U
【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;8 p4 m4 g: i% c
0 W* u- u6 m/ b% Q5 S
【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
0 q8 A7 l& n% m

+ F# M$ {6 Y: b4 j+ \, ^
$ B0 W* b2 a) g. r2 F- x/ x; L+ e
/ `- Z" m+ E: E1 G
+ o% n0 x$ M+ X6 B- w
3. 打包固件4 Q9 I1 w* d* r# [0 p4 \: K4 H

2 {7 `1 z  y. e$ B* P更新各部分镜像链接到rockdev/目录:6 W  U) j) ~! M+ [  A
% ^2 g' g) ]- O" a) b" s4 w
$./mkfirmware.sh
; \; I8 A+ ^# _5 W/ [

4 k/ q2 e* ]( f0 r8 L& ~5 g打包固件,生成的完整固件会保存到rockdev/目录。
: {* Q4 c( p( w; Z. M/ }
  a* S  ?# S# D, q; M
$./build.shupdateimg, z" ]+ \- j+ a: n3 m0 m
" m" F, v* Y1 I( v6 E! J* W
% y. [8 O0 r' C, x: I6 m3 b

; {! v7 ]0 A. \

! t0 |) O" y& C6 r
! A/ b, E/ @0 |( k

- d0 [/ g: ?) c; W0 E; D[PS]全自动编译$ G6 B7 g# z6 }7 A

( C/ p' B2 b# M, c% I2 p9 |全自动编译会执行上述编译、打包操作,生成完整固件。/ O* Z& t% ]( S7 G/ l( I  M
9 `  R( ?5 B$ {
$./build.sh
7 a( c" b( A* ^
8 H4 u1 v, t4 ^* b

8 ]7 C8 F7 a5 h; \3 ]! h( |6 a; T" X1 e# N3 }9 k
8 O. N" t: N+ T! N

( R1 }4 d/ U$ C( e( t" ~4 Z
  ^  \& h3 d/ Z6 {1 q. A* j, N; H) I; b" D

' L8 Z  \& v8 e8 b  S3 A三、分区说明/ B" J9 t+ S& o
- c% y& w  S# H1 U5 f; Q

; Y6 ^( g5 Z( c6 S1 ^& c
+ N9 A# M  Z3 B; Q$ z; `$ T3 K
+ N! D; x* f1 e
1. parameter 分区表; _2 {( Y6 G" W" @+ c" A

1 w$ O# h7 ~/ r- R0 }& Zparameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:
) ?- u' ~7 q) l  B3 J' b

( L& }8 D; E1 U5 _4 }. W% G5 u路径:
: `* o+ x3 }, x, N; y* a
/ e, Q/ j0 u8 F, X
device/rockchip/ok3568/parameter-buildroot-fit.txt! _, `0 H- s# V- ^

7 l0 C+ s3 K) p* s9 Z0 ^8 g) M) ?7 \! _
, o) B  w, K; E1 g

) I- K) E" j/ ?- \. y) M
' h5 d. i  N0 D5 {9 v7 Q
0 p  u( A5 M8 ^9 \* ^* `2 K
CMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
1 k- e6 H9 I) k/ [1 X& Y2 T8 E
! v9 G) C! C0 k. A% V- G# V" ^% k

! {, L( X8 D# s. X; V. Q' x4 b
. ?( x+ d& P3 x% ]" T4 _

1 j# D& R! f! b$ g# t* t2. package-file( [+ l& `$ L: \( Y. w$ W% ]) s

. x3 e- u' [  ~# Lpackage-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。
4 B: @2 B* [* c$ m# W

" m% A. x( K0 |2 v6 f5 V
* x/ I0 q: a% ~6 h
( B' }5 G' C8 \

; B4 H8 s1 K. ^$ J* {路径:
  g3 z7 _; p: n5 Q4 f
6 q. R6 N9 P: c1 x1 }
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
1 h" L& f9 N+ c, u$ g
" y: s4 l- d5 u' B0 `/ |; m
#NAME        Relative path
) T# j; G( S5 J% W
1 a5 H) S! |! y( E
#- Z( v/ f, H8 X+ N7 H: T$ R3 E% D9 ~

- @7 X8 Y) G( \( j6 v0 w/ h; N1 A#HWDEF             HWDEF
- h" M! c; f$ N) i; [" i. j& Z2 s6 f  y% n# A

" R3 [1 E! o% t* V: Qpackage-filepackage-file
( Z8 r3 t& @4 g6 U+ y  z  W

% `# r: W' D5 Q3 H  ]bootloader  Image/MiniLoaderAll.bin
/ s2 w: d& h1 C# u% `

' W9 M  f% ~4 j, s  V7 d3 M$ ^parameter   Image/parameter.txt4 X. R2 [/ b# U5 l/ E, L

% y( ^# [; \1 e#trust          Image/trust.img
! T( s2 ?9 H1 C3 Y/ j6 V, M

9 ^- P6 q+ i2 h; m% m: T0 `& fuboot          Image/uboot.img% Q6 U0 J* x6 p' ?

3 M* I9 \+ i: q0 U* ^5 Qmisc             Image/misc.img& G7 x  t  b. C

. v( R( p& |' Y#resource    Image/resource.img6 E3 e7 {3 G9 a$ }* o6 q. J; F0 J! N
- Y3 I% ^. h8 \9 `- j/ @) w$ K0 x
#kernel        Image/kernel.img
3 k# [5 K8 g9 L3 u/ n# _& z
- ^* c2 g5 Z0 l
boot            Image/boot.img
' L; k% [0 `0 ^# [7 Y
$ I$ f2 U) O/ q6 ^0 X5 E
recovery      Image/recovery.img
8 U' a2 Q6 m5 x# a( R% P. h

6 Z; u9 T* j* g/ T6 ?rootfs          Image/rootfs.img
) \5 |. V1 C1 `1 T  K5 I- s, D/ l0 s
- |8 }( A% K% c" t- q3 f( f
oem             Image/oem.img
$ ]5 U& o, {4 \: ^7 J$ Y
) U, T2 J" S+ y; B. O( j
userdata      Image/userdata.img
$ q) b, E- ?# V9 L1 Z2 o

# T: ^$ a3 L/ v, H( Z: j. r7 H: `) p
. D+ |, n3 Q# p# H8 G

5 v& p' N% u' t6 D#要写入backup分区的文件就是自身(update.img)
9 f/ A# Y1 U) [
  `* F+ O; |+ ]
#SELF 是关键字,表示升级文件(update.img)自身; l( ^1 P. _* C& x  s1 m
* r! m8 v! {0 o, M2 z6 C
#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录( G! p. b$ N3 O" v" Y! V
8 }4 ~; O. A1 A
#在解包升级文件时,不解包SELF文件的内容。% H/ m; U' v+ |0 R: y+ j

  Y' r/ u6 E# v0 V  g  c8 c0 s* q9 u- ^5 t# y6 |5 i( g

6 Q8 G% f1 x& t

& z. @3 K5 R7 e& J9 }1 tbackup        RESERVED
+ Q+ N" \0 ]/ q* i* N! N

. }: `* y' q7 r# `' V#update-script   update-script# v+ m' ~3 m# N9 B

5 i/ ^+ H; ^9 f1 O. v#recover-script   recover-script
5 y6 |- X; o8 s6 Z9 F1 [" W

8 E7 J- X8 i/ }/ A8 Q/ Q% M2 q: F
" C% @% l! }- n, f$ n
: S9 M( N0 C7 }! f, k6 k

( N! }) a! f# b, d# q2 L5 b四、镜像制作
) L3 I1 w/ M% [. n' r

; v" S1 {3 X8 K  V6 ]: U! ~3 i- b1 }; |3 N

# r' Z# a8 h; n  T

; o9 O# a$ H" n/ S$ |编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
( f- e# ^7 ?1 l" L; B4 [* j
6 v# S1 g9 o- U' l  t
- V. G$ B, E8 s% i; \
/ H8 \4 w  N: k( w, C8 X

1 L$ j$ l" Q7 e) j/ e1. 工具安装
. d# Z# F- q0 z( Q2 J
) ~4 u3 [4 @2 T
下载工具包:" x0 ~3 A% H) u" T5 n( Y2 {

( K  O0 d& ~5 W3 O$ W4 O8 _$git clone& O+ F6 @; _2 Y9 f5 a- d: Y3 |

2 z" ?1 g/ j6 Y9 C* t- Z& nhttps://github.com/TeeFirefly/rk2918_tools.git  x5 {$ n. F# i& A" j

* k3 a) U$ W3 O' M$ C$ A" L, R  y7 i6 H3 h6 k- X. p$ A
: p5 C6 |8 H: ^8 l$ h2 e
4 G6 T* K9 I. s" _8 H! \
进入工具包目录:
3 M! v, ^3 `9 r/ i$ \

7 Q. c/ V; _, \2 ~& o9 A! @$cd rk2918_tools
8 d8 @, [# g* m# ]* _" ]
+ p4 A) k' x7 H' Q
编译:
( X8 c, N. N' ?- x2 h
2 O; d; x6 [2 X2 ^" _+ R- y2 q
$make) S, x) u5 l( c. z& q7 D
2 o  J- X3 H2 K. p

' o; ~. f( @8 X+ I
" T: s$ g8 }0 o$ N/ C, s
) ]; O6 y) O0 o7 Z& r+ L

0 Y6 g6 P* j+ f! L将可执行文件拷贝到用户二进制目录:
+ e( `. W2 }# M# v

; l$ c+ `5 r% O% `: _" H! S5 z$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin: S, M8 f" s- A4 x

! L. H; j1 a! c, x8 j* y' h0 K, F# R" p* s5 h% P2 H$ w

3 C' _" R) i* }1 ~
9 V9 j! {, l! d0 f
2. 解包
9 s3 g. G5 x' [: j2 Z: ^7 X. Q
. L8 T) `8 L! \4 n) Q8 a( S% ?
将update.img拷贝到Ubuntu中,然后使用命令解包:/ f6 s: H. X' s
4 L  q8 z' i8 l$ }/ G
$img_unpack update.img img
1 o& }+ E3 c  K9 f: e/ K% h4 O
2 i* m8 n8 P5 |5 n4 b; [
0 R6 S* V5 _( d2 l

/ i7 W" W, J5 U# w% |  Y
- u7 `7 b- G% E6 I/ J

- }2 b$ q7 X0 S& q  y) l
1 y( i" }, S6 \8 ?7 q; S' _
. P7 c3 K& X  c- v- {$ c5 p1 Z$ r6 @

, K7 N5 n# q3 ^2 K3 G: q0 P- Q- }解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
( B. O0 O& i9 t7 q' T  n' c

& ]& [4 O) ]% w8 h7 \% l6 u4 O; |: w% l! t% A
7 Y* H0 M  M: P
. q% }; e  t9 O7 t: w& x$ z
% x" |) N$ M$ z5 G
2 W1 Q/ |/ Q0 {& z  J4 e0 q
; u: M9 j+ \. e% m& M* f/ b

6 W) R" k- w% \接下来进入到img目录,使用afptool-unpack 解压:
9 x* W/ @( N/ B+ m& W$ b- k- z) H
/ g  z6 E6 Z) S# }& I% t; W
$afptool -unpack update.img update
( S/ F  ?. N' g+ ^2 Q4 m( ~
; W8 C3 F( Z9 i( r9 x) D0 i- F4 _
, C8 I+ q6 }% R: [* s) ]

6 S( o) o, V6 y* ^2 N  ^8 E. L  V

! p5 r; w' L7 F# q2 z; ~
4 S. }4 G( L: j* }( F- e* A& }
  {& ]( W! [% G* `9 N6 `
解压到update目录
) b# I- a3 B/ `! \+ \4 B9 l
. d* K" y9 e& R& e! s
打开update目录,里面有很多img文件。" u4 A! J5 {, ]. p8 F  M6 X
6 x  f. j! U/ T8 a: t) N
, \  n1 T" b9 R& N6 T
+ `, {7 z+ ~4 X7 K
) c  M! N; I$ b& |6 S+ Y
将需要的文件复制到rockdev目录下。0 r1 H. B/ o! e, K

1 I0 {9 N7 q3 m/ }; `( [& D5 z8 H% w! ]
8 ], R& G, X, D0 X
9 G: O* n  p/ y1 M  k- z" O" b
3. 合成update.img/ H# @) b0 p9 u: E
" Q# G7 \* ]* D# y  M9 Q
然后源码目录以下命令即可:
" L6 u( Y- L4 Y+ C; t
: }1 _- p7 T* t" w9 D* ~
$./build.shupdateimg+ {7 m% t# ~6 c. ^
" e% P* I" O: c, k+ R% P/ o1 v* L
& ?( `6 l  V4 q+ s* q( D
7 p& ]  q% i# {7 t7 _8 g& A) ?

0 I/ c9 _3 _0 u2 O8 E  U+ w' q

; J! V5 b0 ^; J; D5 o  j

该用户从未签到

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

该用户从未签到

3#
发表于 2023-5-22 13:11 | 只看该作者
) T8 g# h% Q( W' B
步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 17:58 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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