EDA365电子论坛网

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

作者: 罗罗诺亚    时间: 2022-9-14 11:51
标题: 源码编译 | RK3568开发板快速上手
本帖最后由 Heaven_1 于 2022-9-19 10:41 编辑 2 @5 C- p2 h' r: H5 y9 x

" E' B  t0 Q8 @0 y' @/ T% w' p8 v
5 k* w: s2 m; I% w
6 e6 S" H* @& f3 H$ x4 p' \0 M9 {6 w1 t* X
1
' S/ U) @$ B+ k+ ?, W$ W' g( v% H$ ~
准备源码8 e3 f1 y& V. a- g* p  q, [
7 \# ^6 G/ r* c5 `/ \! T9 B
1. 创建工作目录
1 p' ]& w& ^( Q) S6 f+ f  e* t% L/ P% g% T- C0 [% [
$mkdir -p ~/rk3568( ?5 Y6 G# Z; I* d. |. V; A

% V7 s# x! }8 a. s, u2. 拷贝源码0 g9 a- v% }9 j( j! g) x8 z

0 Y, Y# Y2 {$ N; q/ E* r/ W将用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。
/ A. \" w! [) \2 b! ?  \% @, g9 v. Q5 d( X$ n

+ p  O$ }3 A5 f$ `
[backcolor=rgba(18, 18, 18, 0.5)]​0 O$ x1 F5 K" W, F1 V% ^. I6 w
# F4 Q- }! F# F
编辑切换为居中' J5 E3 c  d4 V% O% }/ m  O
添加图片注释,不超过 140 字(可选)& R4 |+ V7 X  u8 e
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。! V0 Z6 b# Y! n$ T0 B* K
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。# |# X$ r$ k& i! W# {
) U8 P9 z7 b+ |$ n* t
3. 解压源码
! [  x0 [' E3 L# }# S3 i( z$ k2 x6 x
! c! N% U5 M* x6 h$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2' b) K5 _6 `  H) @7 I
4 ?' y8 H- e4 K# F# {8 t8 B4 e& ~$ w
$tar -xvf OK3568-linux-source.tar.bz2
0 n, I" ~* D+ U+ [& |, k耐心等待完成即可,解压时间有点久。
7 n7 h  c; [/ f+ w, e4. 进入源码# E) Y- v) Y) f6 q, e! Q
" Z. J. P% N: ?6 e3 _# O
$cd ~/rk3568/OK3568-linux-source
$ b+ F8 B, b2 \* H& g4 E* A' z- a" E% \4 d) u9 `; }  u+ Y
目录结构9 {  a$ ^+ Y: Q2 i

2 C) f( z+ Q4 [: B添加图片注释,不超过 140 字(可选)
* _% ^7 q/ T4 B# ?2 ^& g22 O& g& |1 I) `5 g0 b5 d+ ]
1 G  P# N& _8 |
编译SDK
' F3 T" V' c/ I1. 编译前配置6 W1 V6 U9 x7 q0 z4 q- Z, o& A

- V( {* N7 M: w6 o- S/ e! x在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:* _5 {; B2 J! p8 h* `/ B& M; K
; G/ S4 ?# v' ]; G0 K7 x" u
$./build.shBoardConfig-ok3568.mk  & Q* n% k$ G6 k7 `
相关配置介绍:
5 i3 O+ w* f) S1 H: W; J! o4 l9 B0 u添加图片注释,不超过 140 字(可选)
; c. P/ A6 q( Y/ E: R. N2.编译
, R9 o4 l3 K& ~+ W' ~5 i5 V! }9 @! O) ?
编译u-boot
2 i# }# I9 y3 g8 T  r. d! S; _) U! v$ g
$./build.shuboot
5 a9 k  d. m$ m1 a4 E( {; X6 ]
3 ~, w  h1 h) R+ G% i) w添加图片注释,不超过 140 字(可选)+ K3 K! N8 J+ @8 E" q- Y  h# z
$ i* P8 e( M8 W3 a: j* E4 b

" v3 ]  D. ], L/ D. f6 j0 q0 V# k5 T5 B: P. k
' p# Q2 U+ J$ s6 ]; L$ S
7 I5 R7 o* l1 X

/ ~- H( F5 s- O& s7 j添加图片注释,不超过 140 字(可选)& I6 w" f' P  z2 K) D$ x$ X
3 D8 b+ T7 ?4 [6 s% Y
编译kernel& h- e+ K2 F. `
# Y8 ~$ s9 ~9 D! m  V8 p; o
$./build.shkernel( d! t4 ^$ C: t
! v+ |$ L- S9 O- f, R1 a* k, x5 s6 q1 m
4 C; O0 P! l* I  e# F* _+ v
添加图片注释,不超过 140 字(可选)
+ R( [6 Q: [# V- \: N' k6 l/ p5 z) ]

1 Q3 v2 s% C/ c/ T& r1 J添加图片注释,不超过 140 字(可选)
4 _0 n% x3 p  }& V
+ Q+ s! a" ~. h【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。
+ {" N  f6 F* r4 A: e
4 P6 P* u( X, l6 t) y& o: [7 r/ i3 i, D/ z
添加图片注释,不超过 140 字(可选)
3 z( e1 E% t" ]$ S: N% U. b3 w/ e7 O2 y* O3 L
编译recovery0 ?5 o/ V& k; U" y. i4 M

+ O+ a  ~2 c( k% U) Y$./build.shrecovery
$ }* ~2 x: f' p8 P' |7 e" y$ V, M
' G% M$ z. O; d/ |: y( ^# z编译Buildroot根文件系统
7 p5 n2 P+ J; o, w' @, v- @, ~; i: f( c4 P0 i1 Z
$./build.shbuildroot/ u" Y  D% u9 R, x

: T5 h3 J* u: N3 ^8 A2 M  ]- F% i6 Z+ L4 `% N
添加图片注释,不超过 140 字(可选)
" \- `$ V0 ?, T$ @7 ]
! Q9 b! Q/ z5 v9 M8 q/ }制作文件系统的时间会比较久,请耐心等待编译完成。2 Q2 D- U: R! _6 F

: `7 n7 k+ _5 C! ?- M【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;
' S, M! F7 b, ?1 a7 ~4 k( p* @+ b
" K% f1 G: ^; b2 Z; Z5 }) t【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。$ ?! q" k. Y( c! c; I) K/ [

. _. h: f) [) r4 {/ g* m) d! a
: G1 m) D& ^4 n' S; l
) s; l5 _9 w1 p# P
7 v, T/ w9 ~# J. i3. 打包固件* a" k3 L1 C# C# r
5 U" A" m+ f, d* F5 a
更新各部分镜像链接到rockdev/目录:
; W0 Q& F) F+ A9 T6 e( z9 S1 M. [! E9 w% j" K1 l# u
$./mkfirmware.sh
( R$ p  K) C" S: a$ K8 i# E9 z& u# t* m' E
打包固件,生成的完整固件会保存到rockdev/目录。
) z- e# x4 z; n, \$ L/ d# U7 A5 [, m6 X& O0 ?* }" c6 F
$./build.shupdateimg
1 ?  k  @- r9 w
6 N4 U$ `7 _) {5 G6 e4 l* ?[PS]全自动编译, c6 N+ ^6 ]; S' ?
" D+ e! _" p; j8 ?
全自动编译会执行上述编译、打包操作,生成完整固件。" f# I3 H9 x2 j% A  \% e

# q, u# J# W0 w9 l: S4 H$./build.sh9 r- m, t& a! Y6 k
8 K7 p' U# B2 D; k; @, K

" Q- U7 [" R" x9 S% k9 ?36 j# C; I2 h) H' F# R

& v2 o8 e6 K5 A; T) i$ D+ s0 m: {分区说明0 {# g3 y. _4 F9 O# K* z

$ A, Y' S! \9 v* b% }$ ~1. parameter 分区表5 }* ]$ n+ J" R8 m

' M: W7 A+ g' a7 B1 g5 e6 y$ T% \parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:
7 P4 o6 M3 N5 _' _, D# K' o& D# z: l$ S) r  q7 F9 _
路径:
# q/ L( G+ K( V( W6 `' B; H$ J2 k- ^
7 x- c0 P4 b" [1 \. udevice/rockchip/ok3568/parameter-buildroot-fit.txt8 }2 m% |4 B9 L& S. D
" o. H. F! e) A- I1 F) p$ O
添加图片注释,不超过 140 字(可选)
  G4 w7 [: m4 c( s: A
' f5 I# M) c. A- tCMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。% t% [( r2 k' x( m- A) w0 u

" i, X, _3 q% M' L8 Q7 C2. package-file& w$ z3 N' k8 z; S; I: m. {

' x/ Q9 C: Q3 {" Vpackage-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。5 w/ U  y2 J% g" u: N
路径:
5 e$ S: L, F4 h+ K) B& g3 v* B9 ?0 A+ ^
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file9 P! t' U/ u- _- Z" ~8 }

% V6 B5 @2 d: J5 D3 C5 X#NAME        Relative path
) ?5 ], R$ |  B+ z+ c+ ?
6 V1 R; w1 N" n3 E+ ~& w+ Y#
- w6 u& O* P; T7 T4 G" ~( n& j) ]2 a3 M
#HWDEF             HWDEF
3 S" o5 r; s4 b9 a0 v# C
) C) r3 h. Z2 s( Cpackage-filepackage-file. ~5 i$ Q; g! k! E) Y
: p# A  w. u3 q; W
bootloader  Image/MiniLoaderAll.bin
5 I# G& b4 M. a9 F$ C1 {
) ?/ ?* d* M/ u' i+ D$ R3 D! G! C2 lparameter   Image/parameter.txt
) x3 p* R. R) g5 I. u0 n
+ u! n. r4 u8 ^#trust          Image/trust.img9 I- T( p; O! d6 f# K: Y( A0 F
% `1 l* H9 u7 @+ V/ Q1 U1 x  K3 N
uboot          Image/uboot.img& g8 A% n  i; h$ b5 {& m) r4 t' W
2 R; z0 _5 J' n! W
misc             Image/misc.img$ ~* K7 T) y6 a4 a6 z4 d

+ \5 l* Y. h- o/ d#resource    Image/resource.img
: ]& N' I, N2 y8 y% ?( m$ k8 {$ C, \( R2 l
#kernel        Image/kernel.img
* X) h) |1 t) G8 K- ?, o9 q1 ?) o- V; C! E" a' k' ^# ^
boot            Image/boot.img/ H* g% t& W# K9 n; U6 m, D" t, L

" T: P0 |; X; x. w) b4 Trecovery      Image/recovery.img
2 B+ o: v$ J& I! l% m  U* }8 b, h  T  a1 ]" s! i7 G7 L" H
rootfs          Image/rootfs.img
4 q" [) ^! P. R1 B5 F$ }# i. |. i; \) N3 w& d0 g' d, D& }; n5 L0 {  {
oem             Image/oem.img
8 L" \/ ^1 k; `+ N- z8 ^
: y7 T1 D  d* B% puserdata      Image/userdata.img
% J/ |# j2 v# b0 d: x4 E( A, K2 \) D
& A' o! i/ B& e9 _. c#要写入backup分区的文件就是自身(update.img)! q, |- [0 b3 s5 k9 ?8 u( t9 o

* Z: s% G+ l3 t  L& b#SELF 是关键字,表示升级文件(update.img)自身
  e4 @: i3 F0 K% e
$ I: E2 [# B2 r& F: }/ d#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录  o5 _7 }. C: Z6 L  @9 T4 |

- j+ d+ C5 X/ o* J9 v#在解包升级文件时,不解包SELF文件的内容。5 d% W* @, `7 |2 P, o$ T* f3 _8 `' ~
  o0 D1 e+ n; J

. S2 m: y8 Z: Vbackup        RESERVED3 v* y1 J% F1 s: y4 Q! ]) W. ^6 ~

4 n& Y  S+ F/ R# V7 Y#update-script   update-script
) W2 J3 E8 p6 J$ f% n# f8 g8 u: ^9 {2 b+ i# m# v& B+ V% B
#recover-script   recover-script2 q) T0 T6 o$ R0 \  V1 z, X& E
* n1 G" H1 c1 G4 T' _
4
  A- g+ Z# s/ Y8 v  @- ~8 b/ G# I, \7 @7 ~
镜像制作- m% c3 h7 r7 L
. s4 ?- J) W! p
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
4 z: g5 _5 W1 G( F, e5 W& x
2 ~- |1 f& _4 h  K9 [6 K6 |! w; W/ A, m$ o9 D
1. 工具安装
* O4 v7 [' e: y7 D& W* C: A2 a  T9 H' a/ Z
下载工具包:: j7 h! @7 _/ n! R" ~3 P! c+ w
2 }1 K3 f2 Y5 v; h4 G/ e
$git clone 8 C  A8 x/ s6 l7 s7 o: u. ~

# q1 W% ^- v) l" x, \% q3 qhttps://github.com/TeeFirefly/rk2918_tools.git ! Y+ w; s/ k. k9 o. `$ P  O2 N

7 g: O4 @) L" o' v' E$ I% [
% q( N& A- _& v/ x进入工具包目录:8 [. C* n7 x) V) D  V0 `& L9 ~: u% L

% E; h$ z. w4 n$cd rk2918_tools
9 n. H$ `4 y8 V9 w0 \9 h0 V) `- ]7 K/ i/ A& }% G& X9 `
编译:- K$ G- j  g9 u+ \0 p

$ D  Q$ h* f5 {# A; k. B. {$make
8 E3 K% v) s1 L7 }( B! z( b  ^  P- N% Z5 o; }
将可执行文件拷贝到用户二进制目录:9 ^" N0 O2 X& ^( k: |$ ^
) a, V  H$ ^; a. v
$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin
( q: o7 |( Z) W& W; [& X  V- d1 i! S0 j- K  y5 ~
2. 解包
! ]7 K* [1 O) t" ?) p% A5 C2 u/ H/ N! c, b! o/ E, y% ?
将update.img拷贝到Ubuntu中,然后使用命令解包:
8 ~3 @* ~/ E6 {2 c$ V# @
$ z/ S% R4 N2 b/ F4 v$img_unpack update.img img5 k0 ~1 q/ f2 b) {
" Q9 j+ L4 F7 n( x$ S6 |; i

- J- w, A+ R; |( K' k) ^解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
* [! u' ]6 `2 }4 _; O) z  H2 J% v. _6 ]5 e. o$ g
, ]- Y4 y% e& n7 `

$ s7 g# [0 o9 u( e- t. h7 d接下来进入到img目录,使用afptool-unpack 解压:
3 U8 {/ F+ `8 }" f% H* k, c3 p* r4 U
3 h2 {" I8 g# l# Y$afptool -unpack update.img update
8 o, V+ ]8 f, J
7 N# N2 b( x; F% ?8 ?1 t解压到update目录5 f! [. B2 f1 `, s
2 v* d. T8 z! Y) q* x
打开update目录,里面有很多img文件。/ M( ]/ x+ f! ?% t. S$ P5 E* e% U

6 S, s8 o+ k, \' b7 ~将需要的文件复制到rockdev目录下。
8 R4 d/ J" W& Z; O3 D) Z- I5 V, F! W* f' C& Y6 [
3. 合成update.img
2 \2 v8 C  O/ f
# ?" N' p5 I* _+ B: ^9 L然后源码目录以下命令即可:7 b: I% i/ |( ^# E9 P% g2 q+ y
* i& p$ u& D4 A- V3 i' h$ C, m& B
$./build.shupdateimg9 Y4 n) z5 c* s$ H: o" s
' J' I4 W7 \) J$ d' z1 e
[backcolor=rgba(18, 18, 18, 0.5)]​  K9 K8 b6 ^' e& u) t0 B: z+ ~

, W3 S& Q' v  \' L
编辑切换为居中1 ~# |  l# w/ x# x9 A6 S; k

" g% k. d4 n* s" _- T; r" ?9 y$ n7 h
作者: Sleep_xz    时间: 2022-9-19 10:44
3 l& {" s0 n7 M
图文并茂,流程很清晰




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