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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码
" p) |: c' a5 O

5 E/ }# w/ r5 M" ?; K* _" o
0 ^- h8 h$ g0 l# }2 Y. v! J" ^; w; \- Y: ]( h

& P0 y% K$ r8 h! W' f1. 创建工作目录4 f1 O7 J9 h; t% j

3 v7 H3 S# b' c/ }$mkdir -p ~/rk3568
* |% t, k- S2 y; M( w
. Z; K, C8 C* B& |
5 \. T8 R( j, g# i5 h

1 R2 z; }5 _% @* E; I6 e
& n( p1 P& V% q+ _  }- I
2. 拷贝源码( K# Z( J6 v( B3 z3 t+ o

4 o0 r9 o4 D! k将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。
0 a- B* U" g( ]  t* [
- p$ r/ I# b0 d; v# j
4 F" Z9 v% k2 Q" l

2 a- Z" m7 y! i. l: R, ~

3 x, i  V, M: A/ O
# r8 }+ u4 q0 A6 |+ s% C4 o
& ^0 j, l% I% W) W9 Z" B
: s  A2 y: Z9 k& E& n/ [

& l/ U1 d) ]* C  H1 t; ~拷贝文件的方式有很多,笔者使用的是共享文件夹方式。
4 |2 r6 C$ P1 r- N- v  x8 @

  J" y$ j4 ]0 {- Z: Z  P) a/ N7 |4 M
/ _2 ~& d- l1 |) N, u" b8 _& c# g
, ?# z0 e% r% `( \3 x9 n
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。6 G  k& [+ Z# i1 J. L

1 \3 @" H2 I0 D* k  O- w
; J2 t7 Y0 h! }$ ~6 o$ T  I& J1 ]) _

3 q0 ?- G+ [" G, F& d3. 解压源码
7 j, u9 d4 u5 i# d) E

- m5 [5 R, s5 E$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2: h1 X1 p8 Y1 q9 O* k& d, M. L
. G/ K& S7 j: z3 X4 y2 b
$tar -xvf OK3568-linux-source.tar.bz2+ f: }. [; q; |- E& n8 u

- v* h4 d+ H8 U* }
) I' I: a+ }5 q7 r& X! ^# H: w  ]' _+ |( J6 V

9 u1 f" s& L% ^+ K( `) n耐心等待完成即可,解压时间有点久。% Q; A! l" O- b8 h5 Q
% ]2 r5 S( p. c- J0 i' H
1 O- j& L  ]" p6 K2 {! m( l; B5 b

; O0 h8 e2 k( s) P% P! B
; ?; s" x) S8 \& [
4. 进入源码2 A2 V6 G: c, o( a+ g& W6 s

: c4 Q5 Z0 m% q7 a8 y" I$cd ~/rk3568/OK3568-linux-source
5 X" `. y" O7 a2 ?; v; Q3 A2 F7 f
+ T" w* r: ^. _, h$ \# C6 C6 S
目录结构
1 R& _3 h+ K% Y# ^& l' C+ Y
$ ?+ A, a/ S8 C4 Z. e% X! h

1 B, u0 E* d) u. A6 }+ K( g' s$ F. p1 U: x# K" M

* d* Y$ t+ l, R( p; x

( N: M5 f% h7 B& l: J: u" _3 Q0 f* C
; K8 S# E) d' E
# |- v+ n. ~; F3 R
二、编译SDK0 ?3 g. v0 C0 Y3 ^+ {$ H
1 H( o: e: X, c  ^+ G% F

3 B7 \6 K1 C( O4 t" }
% \4 x. h* t4 S& |/ u. [, I# t
; W0 Z, g! @. ^3 |6 s7 _( V! ?
1. 编译前配置
3 G- T8 j4 J" A( X
3 l4 Y, _/ c$ S9 Z) R5 O
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
( x' Y# o: M9 l, l3 L1 b
5 N. f" }* G8 T  Z& s+ J
$./build.shBoardConfig-ok3568.mk  
3 w% j  l# v/ q0 d9 Y( J4 M* W

, }0 \/ `+ W! }1 k8 E6 I相关配置介绍:
) X# c/ w3 }& S) z- ~3 h+ [

3 @) m6 _) j. M% v* s* b( a1 e- C& M1 e

' ?3 D+ {4 s4 M) I3 J5 k
" Q1 c1 f/ g1 X  ^$ H$ P

& E/ Q) S- D6 \3 b' j/ U
, _) a1 C  X' v% |9 [" e
. T9 y. Y2 ~3 ~: m/ }
. |+ E4 j5 c- f7 r' e
8 P& z5 j; v5 I' |8 j7 s) e
  [# D7 F+ b) a7 k( @0 V

- |; P& I; a& l: r0 [4 y2. 编译
2 W5 N) s( ?' `+ N' ?0 o2 T3 y* x# E3 M

9 s. T' S# A% A4 I+ u: q编译u-boot" p; k, `9 }- a' Y

3 K9 w( X! G7 V/ T& S$./build.shuboot4 W* P+ K3 G% x( l* M- {/ m

' i% T* D' u: ^- M  t2 @2 L/ ~7 ?2 p! j+ |( N0 G: F' o& _
8 ?1 Z. Q8 ~6 j

* i2 z  x% `: ~3 J1 F
% S' a8 \$ q3 c6 K
: b  r* ^0 Q% g( l: W, Q0 U- ]' y$ P

7 R) t& I: ?7 U, W* f& n……
' T/ }7 A1 q3 `0 G8 |

" K6 P8 C  T0 v" |
% G0 u  t- Q: i, K
/ F; v, r/ B8 b$ }
3 b, U4 ?# |9 ?

, _5 P. N2 a8 }+ j  z" R; O; ?3 ]
/ q1 H1 b, }% g6 ^1 Y; }0 `; B: e* I' B8 F. N) S0 b2 `$ {4 I) Z

3 y* n% }9 n7 |/ y, u编译kernel
- I0 R* Z* }; ?
9 j' K( s- S4 z7 w
$./build.shkernel
! _  ^& F* T' w3 r% |1 {5 }: k; ]
4 B; s3 g8 Z' C/ Y7 E

: C( t4 ]. O& z% ?* D# V# o. x
& r1 n4 t( T9 Z( W& x

$ l- L6 G5 S" A6 X* R

3 w  U7 X  w& m) S9 F, _5 e2 q4 Z) ?% ~3 ~" S2 ~/ F' w) Z

: O# T2 E3 n3 J: ^) v7 A" I+ |( y
% P7 X/ Q" @/ ?/ P0 h8 I3 n  |

7 u2 @- D( N& ^0 s……
0 Q7 n3 @  p4 B* ]7 g* ~4 E1 e; f
4 V0 H' k' R4 k: I" E

1 i9 Q0 b* Y) g1 I3 r: i' [! _! X% G( _
8 B; N9 M4 W' X9 j9 q$ C6 q
; @5 S3 n) O' T, X
; S4 L0 z0 B; j/ B
, ?! y' k3 s5 m9 m5 W1 ~- a9 ?
- d/ o& a* y! }) Y
, O$ D% R9 J! E
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。" l% C3 I7 E0 r

; L7 w8 D/ I" q5 h! l& x; W! j  f
3 J. k3 X2 u: b2 ?0 @3 R  ~5 I( R% R1 w! N

4 q+ p7 \# a2 K& J, H" m: J0 I

9 _7 d/ L& g  F1 c编译recovery
/ m! |, ?6 m- c3 W) ?

- }$ K; K: i- p' A% ]$./build.shrecovery
6 R$ g2 L0 I' f, [

# @: U- B1 U3 Q3 n. n( O# {6 }% \0 ?$ g6 b$ q
/ B; H/ q" b3 Q* V+ K

+ y! d! {% M- Q; }( I$ C
# Y2 }7 n5 n8 _2 k5 }" _, N! H# B; i
……
& ^! k; Y: h+ G4 {( W. }3 Y" E" g
9 O" O- k6 [4 @. d* t
  D; Y2 p, Z, K2 t
+ u' [% d) i" e  ^$ w7 v
( J% N; ]$ T- V7 C/ J
# D9 ]# S+ W1 C' b

- l6 W+ E0 G; u1 I; i- t" l6 W
0 m! a! d) J8 ^# n
, l9 t! l! K0 A+ L6 Q$ J+ [
% c! r; W, L4 V% y+ O& k
编译Buildroot根文件系统9 }4 ]  Z  e. q; Y

% V2 H7 Y% R2 _& g$./build.shbuildroot
4 E6 s: ?# l; S

& c9 @2 U4 p9 n# ^' j$ h; R$ C) O5 e+ I/ _
; E/ V4 v- P5 a: E% \- h

$ `" I$ w9 @5 {/ u

: ^2 t( ^4 m2 a" W. [1 I

, ~8 g6 b! p" C+ Q% j+ u' c制作文件系统的时间会比较久,请耐心等待编译完成。. W4 g0 k) |% D3 Z

* U' Z4 t6 O$ S) j6 h9 C) f& Z+ n! ^2 r2 ?- {" h

7 l: d& \4 a7 K2 Q
8 a! f) r' z3 i" G; j- D$ j
【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;& j' |* j. r! x4 w2 v$ D) Q

" O, `$ i: s3 X  O, u【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
8 m5 i6 {7 A9 H" ]* q0 e# r4 F( M
: P4 w7 p0 g; F2 e3 q. W4 h
+ _6 \$ _: d+ j2 T. N, T
) e3 x. E3 |& F/ B4 U9 v
5 x2 j7 W/ k0 v: h9 Y
3. 打包固件
' g# J/ x6 [4 u0 }

/ X3 }* y' P7 r: U; e更新各部分镜像链接到rockdev/目录:" O- e' j) b7 ]) A
4 f) G! d% z9 R* Q* D
$./mkfirmware.sh
5 f4 d$ ^/ R; P: o" \; m

0 O. ^6 k" o3 W$ }3 n打包固件,生成的完整固件会保存到rockdev/目录。, Y, ]2 c0 k# b

9 D# E! {  {+ f- E# ?1 T& K$./build.shupdateimg% t: r( L# J- }
5 x8 }& h# o3 W5 I) O

; p! N+ e" q7 H. G- t$ W+ K5 c8 \! j) l" B" F

0 c: O4 h$ O- I% g% k" H
. t* o; ~/ z8 m1 b# c

: ]  r3 p2 a- l# ~- G" V[PS]全自动编译
, j  `% ?9 N/ g' I  C& L

# X3 l8 ~, q  g: C" u3 D% l全自动编译会执行上述编译、打包操作,生成完整固件。
0 L; S/ [+ q4 H& H1 b6 h: ~

1 G; t- ]' c$ j$./build.sh
) t2 H2 N- j2 u4 `/ X" L

$ o/ J( S8 P: D6 n- w0 d3 H6 e3 [# X) m& b3 w$ P& _& ^& t* i9 I/ E/ e: n

5 O$ V9 C: F8 W+ ^! _

  Z4 w: l" b- V( n" p% ~. E& i: J; N. E: l3 Q' t7 g# n

7 x3 E7 B, I6 J1 M# Z0 j1 T

1 ?0 z- \9 A& n. ^! ?) _4 b三、分区说明
( {1 ~8 D) v2 q& a/ F( m+ d5 m
/ N/ G7 F. a) |: e+ b6 F# J. j
- v, z7 U: K2 l5 C

2 E, S* k. X% z# U9 \6 w3 _
9 a2 Y( k8 t1 {, `
1. parameter 分区表  J' x2 K- P% l" ?( w

" h4 z7 O0 B4 b' _parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:/ \# F+ ], X/ z# v% q

4 `7 q* V; H; z: g0 h+ t# U2 m# j路径:
) m- g" e9 K9 Y& ]

: c4 P3 B- z" g; h1 wdevice/rockchip/ok3568/parameter-buildroot-fit.txt3 ^, h; ]+ @( F# U! c- k7 k' Z) i

9 n8 G  }9 t! R2 T/ n' _
! R4 R( ?, k0 e, Z
8 J; Y% h: |2 n, I1 U% V% D# U
2 q) F% u/ o* y: Y

% A- ^% n% U4 V8 |4 D5 L
/ o9 e9 [1 ~% j
CMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。) ^, E! E+ q1 d# [1 U; A
/ x0 C* [3 t; W
, |( }1 Y' q3 f- Z; W* E

% a: b" z' Z1 F+ T7 m/ g) P4 F3 X
3 S+ e% d3 ]/ v
2. package-file) h8 R; }8 u7 I6 t6 i  q

0 U) v$ w( D( R7 hpackage-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。
8 n, }7 q( {: W: |/ Z. \

8 o2 S) s# Y, V5 M- U- K( n0 J# H
5 I3 \& T) \6 w  t  G0 O5 \! d
9 B1 I* p* G0 J  m) p2 k' d
, Z0 J( t- i# R
路径:( k3 H$ o1 m" d/ P, c

) Q( [( ~  P3 @/ ktools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
& @7 b4 G$ E+ x, ~# u+ ~+ L+ g

1 Y+ y* @# ]% ~; o#NAME        Relative path* s, ~* c& _5 y6 o6 {9 V

) _1 q7 c8 L! l  r) Q#. g' c1 U* j% H; y

5 _- Z$ X0 Y- ], H, g. U#HWDEF             HWDEF
, Y+ c/ G: e) |

9 O: w0 R/ k% ]) Qpackage-filepackage-file0 q$ J2 @4 M, J3 L8 ]
6 I: f  B$ H6 Z+ k, _
bootloader  Image/MiniLoaderAll.bin
  |6 N# f$ J& [4 y/ H1 x

+ @, }# O  V$ @parameter   Image/parameter.txt
; S2 k2 ~& A+ q; D" r7 F
# S( M. r1 \4 R8 H, R9 q
#trust          Image/trust.img/ j' [: R' o3 M

& @" T2 B3 k! f4 auboot          Image/uboot.img
2 x. b8 Y8 g: D: H2 i5 k2 m

  N' U$ D2 t* i' P7 j  w+ imisc             Image/misc.img( J5 g. L' j0 `* I2 \2 ~' b2 Q  r4 z+ d

1 N# S# l+ P; {+ @#resource    Image/resource.img1 W8 l. z8 y9 Q, f( \+ n. U7 g8 f
7 R: m9 f/ \1 M6 D. z1 `/ ^
#kernel        Image/kernel.img2 r7 v6 O/ }+ B+ G
# o5 v9 O# F/ S" M
boot            Image/boot.img
$ U% [. o) \7 R. S. |6 l' l" ?) H
: Q2 B0 G0 Q. d# X
recovery      Image/recovery.img
' Y- ]8 }% S- D* t7 k' k: ^0 ?

/ E8 @; u9 |; v/ m+ ?5 n; trootfs          Image/rootfs.img' \' L2 E- ~$ z2 y( V/ X! q8 s
2 k5 x; I9 [4 a) b
oem             Image/oem.img
$ U) q( K5 h% Q5 _* e9 s1 j  c8 K

' [, N1 S8 ^0 R- c' x; G" fuserdata      Image/userdata.img
! j0 ]# `- P! Y  n, N& `

' q% y0 a3 j8 j$ t+ ~: R5 L
0 i4 E! A# e: w2 N  d' L
6 Q3 Q$ Q1 W) W6 u

" Y; b) U  d6 A2 Q; F/ ]#要写入backup分区的文件就是自身(update.img)
5 P# b) ^! B7 p& D* e" t

( [! |5 z& J  @) R7 u' x#SELF 是关键字,表示升级文件(update.img)自身5 C- r" o- [. O: O7 n6 ^

2 B" O2 f4 j2 |#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
, a+ @# R' I# v: h, p$ E

% i6 e2 J  _- D4 U#在解包升级文件时,不解包SELF文件的内容。
" o9 Q, v: c; u* [& z

/ Z8 @+ C" l8 x+ B9 m) b0 W
. [8 n5 b6 Y% i& e5 L. }8 [: {
! F8 [0 [+ Q( H
8 M8 M; {* x2 {* C0 D3 {/ B
backup        RESERVED
6 h. s  H/ f5 h0 ^
5 y; @0 v* d! N2 }' L+ A" d
#update-script   update-script( c6 q: ?9 a' `4 Z$ E" I5 R
* E" T6 f+ s; c2 b, D
#recover-script   recover-script( _0 u( B: U! Q! i; l

" `: {5 A- ~; d' V! I# H- q' O
* S. q/ M' R- _* A) R7 a  g; t- ^' K; l0 u! {
0 g) {" e$ @* `2 i6 y/ \$ V
四、镜像制作% m+ x) U5 }  D+ u+ @6 f

7 {# V$ Y5 w3 N. J5 y$ B+ Z6 @8 |% e
% R" O! ^- S: l. d
2 {5 K& J) K% S' i
1 F( `+ s5 z, g9 Q0 b  I+ x
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。! _3 T; _# W; S* `
9 j$ h4 T5 H+ A; N

6 f2 ~% e% h# b3 i8 r3 H
( H$ m1 E7 n. d0 C
5 U# p  G& [+ Z- i# `
1. 工具安装. A0 m5 s  _5 H9 p8 n+ P
$ v" E0 i, R+ ?7 m2 b; p" K; k" v: {. |
下载工具包:# ]2 Z3 x% a5 S
! h1 C; y& @4 V& s/ y; A" U
$git clone6 P2 L% W5 V" E) o1 x& J/ D

3 ]* C( ~' s! i$ y5 k1 h) Z$ b- ]9 Chttps://github.com/TeeFirefly/rk2918_tools.git
" M8 ^3 G/ a7 z

7 V; u" E- ?* u4 U9 e$ ]$ f- ]. f. ]% y' D/ S, n3 u) i% o3 D, Q0 F$ H& r; P6 {
# x, H2 c" ?3 W% d- q* @! ?

( [2 N0 m, l/ h% B, s& y进入工具包目录:
4 Y5 s3 w; {7 ^4 G
1 U* J7 S+ @* B! Q
$cd rk2918_tools
2 w: y& W. z% M2 V+ @# ?1 G

* @8 ?& a0 L& O7 u2 t6 A! A编译:7 E+ k: U. W' r+ |: G7 b

0 e. L' n7 E8 Z" H$make" h3 \$ }  x* O: G1 x$ i
/ X3 H' J7 O' R6 s; w' b3 ~

0 ?. O; ~. y/ @, e8 T% g8 }: B) ]% x+ R6 R4 {

2 `$ Z, B( f5 Z9 M( a

$ r! w: {: x7 m8 b  s: R将可执行文件拷贝到用户二进制目录:% f8 \6 }" ^/ @, p5 F5 P( C7 Y
3 U6 {3 L( u6 u
$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin9 E7 C  U  g3 @, _4 Z9 ^  Q4 d
  p* ^, q: n6 I" L: a/ x) b
: r, {6 @' @2 `! ~

; N" @8 T9 ]$ i; w! n
( M1 @$ w/ N2 C  w4 {
2. 解包' e7 V4 O/ G& c$ @% L1 b6 L5 R, X! c
' B2 W# X6 f4 p
将update.img拷贝到Ubuntu中,然后使用命令解包:* R% r$ F" e- Y& |  {

/ h/ D  F3 t, J9 z9 g$img_unpack update.img img2 z0 S$ t5 s1 f" k

5 @) x4 C: ]" z+ C& L0 [
" C) `# p$ M0 a2 ?. `; z4 ~
  L* `+ M# c5 b+ X5 d4 @* q) ?

3 l5 y0 r/ W' c
0 V0 @; v+ l. g0 y
* w& U, b" A( ~: s; i2 R

# U, u9 i/ Q- O) [0 w" {
% P) g0 `3 K9 M1 j
解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
9 U8 }0 p2 y- b$ \8 c

3 J1 k& N8 Y7 e6 F, O) O8 }: f1 d$ Z1 J7 D) Q* e4 c) C; r. }( F

! Y. w" l& c# E* {
0 O% i: {) i, Q7 b8 K" P

, d5 p, {" C) e+ O0 L3 f! q& N, {, M* [3 P5 }
: G8 ?7 m. l( O: M% _' Q

" h) A9 j) S/ u$ j+ @. B接下来进入到img目录,使用afptool-unpack 解压:' |' l; v, h' L

! m/ E( i( @% o/ D% w$afptool -unpack update.img update: O3 [/ ]4 M, ^' d5 V7 Z
) z! K5 `; {0 x7 \# F
% h! f* n9 x& c2 F( F1 i  }5 o

) J" P$ S) d  \" K7 ~! k* d
* B! q+ E. z: \7 ^! I. L2 h

4 H7 H: ?8 l# M2 e
- n+ S# N; H( G3 M
解压到update目录
1 I* P% z% S* W. `7 R

( L- ~# o: e4 K$ v打开update目录,里面有很多img文件。  T( f9 G, v- P

- B4 U7 u# Z8 j% F
" c/ T5 i& N- k* X, R% ~8 O& d8 F. N% z5 B) @  `
% J. b' h  I1 A) D8 A  q9 Z3 m
将需要的文件复制到rockdev目录下。
( h. Y5 [2 L) e; P; T2 U: T; o% U
6 |2 x6 Q3 o( u; v: ]

& u1 h! N' z+ [& Q9 _( t" {; q' _! u2 z7 |" P, U& o, Z
/ O! [9 i, I) H3 g: D5 o
3. 合成update.img/ x7 t8 K- u6 S9 g& k( ]
$ e* }5 {: L8 Y1 C
然后源码目录以下命令即可:' g2 J% u6 ^9 l

3 D+ |9 l- v/ T2 L/ \: {# _$./build.shupdateimg
5 R7 F: T+ K( h. D# m" w

  C0 r8 U& k% h$ R/ r+ O7 u) A( V7 C( J8 M- r6 }$ r

" q" O( c. b% @" h; ~1 F+ }0 P* D

; ^+ S3 b) m$ x

4 Q$ C. `" R# X; x

该用户从未签到

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

该用户从未签到

3#
发表于 2023-5-22 13:11 | 只看该作者

, Q0 ~% I, N' ]" I& n& Y- q步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-3 15:26 , Processed in 0.171875 second(s), 24 queries , Gzip On.

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

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

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