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

源码编译 | RK3568开发板快速上手

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-14 11:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 Heaven_1 于 2022-9-19 10:41 编辑
1 P- |: M: ^) X$ v! @* ?% m9 t' C* @: _1 a: L

. I# Q7 V: h( F& |; G+ n/ A. C  m
4 p/ `9 N6 P0 t3 Q
15 A8 Y8 [& L0 o

1 [4 e- B+ Y! x0 x, p3 g) c准备源码
1 X( u% @  k' M5 @; [; D) L5 c& b* }& K* Y
1. 创建工作目录
! D2 @- w% ^$ c: p- q+ Z% i% Q! [, h# r  u
$mkdir -p ~/rk3568; F  l. U3 }, c1 w
2 [+ W; @4 l- Y  W. O
2. 拷贝源码; _0 T. V! F& c9 D8 _' g* [, w
+ ?$ V# ~( _3 }3 H& S
将用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。  L' C! \# Z3 v$ d8 ]& {* V$ p

* ?4 R4 K/ \' ?
0 B0 `$ d" z; g, D* {
[backcolor=rgba(18, 18, 18, 0.5)]​
: F: ]' P4 E' j$ x( t
: v% ~/ j, Y1 {3 q/ b7 l  q
编辑切换为居中: U; J& Q$ c+ Y5 b/ B; |
添加图片注释,不超过 140 字(可选)
0 r& {# c1 k' }. g$ b8 G: j3 l  e! G拷贝文件的方式有很多,笔者使用的是共享文件夹方式。" ?/ }, I3 V* f, B6 [7 z* \
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。
, F3 B/ R' G+ ^3 W
: K+ G# {6 o& F* s3. 解压源码
3 P- U! e4 ]4 O) `# y( }: [4 _/ m
$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2  {7 s1 x: r/ \7 j  n5 q% y4 b
0 e( \% c: W5 V/ C' q8 H
$tar -xvf OK3568-linux-source.tar.bz2
8 j2 R' k" {4 x1 L" y耐心等待完成即可,解压时间有点久。
3 Q0 U$ u: y# h% a/ v+ @% a4. 进入源码% H7 J5 F7 W# o$ W; X

4 t$ F) x( L9 m8 L$cd ~/rk3568/OK3568-linux-source% ^( s( {/ v1 |, @) @

7 ^. W- F3 @; I6 J目录结构+ z' i3 T/ t# A8 e: a! f4 \
. B+ E' J$ x# d
添加图片注释,不超过 140 字(可选)( P0 P0 o( x8 c2 Q, r/ @
2
0 Y$ U+ L9 v3 J; N) o) I
1 G5 A; Q* F: d( r; z& u8 Y编译SDK
; G, S# o, `% P4 g0 q1. 编译前配置8 U6 P4 i8 R8 i, e+ K
/ j6 X' e" Y& J
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
8 x& p! j, O0 n, \0 {
6 h0 a. p5 w' P9 W/ o$./build.shBoardConfig-ok3568.mk  
8 K" @  Y; }  s: R8 K* Q# d& M相关配置介绍:8 J+ N8 ~; E9 a, n) R' x
添加图片注释,不超过 140 字(可选)* H2 c0 z, Q1 y3 k4 e4 k' C
2.编译. N! O  L: i/ l6 C) H1 B9 z4 y9 W
% c1 F' A; o6 z) A, g
编译u-boot
7 A4 s' b6 Y- j5 u; X6 l# n; Y+ x0 G9 i6 T' ~9 a7 c/ E, f1 z3 J4 W9 S2 i
$./build.shuboot
* L! h2 Y- S- `
3 \9 r" T9 a4 B) v, j! H* z添加图片注释,不超过 140 字(可选)* G0 G* M3 J9 k0 n+ R- `

* U; Y% T0 L, R" K0 i8 O* c' O6 m4 r

' B* v7 v' t8 E) Y+ o3 v& H$ T% }( Y( O4 v. T

$ b" y$ [  {, u/ z5 S1 ^# Y# z
& H% Y8 K/ r1 \& t* ^% m添加图片注释,不超过 140 字(可选)) `  E9 c6 ^9 v' A. ?2 p
& ?* u+ N) N( @. g1 o& F: h# O
编译kernel* w  V3 _# D: f2 `1 Q, Y" g

  E/ \+ e+ t/ R: h9 x' \& {$./build.shkernel
) V" y7 p& D3 X$ A8 T
1 v6 U; B; [: t0 g1 I% R+ b3 Y. A) k
添加图片注释,不超过 140 字(可选)6 V. {$ o: \8 a7 r# G

* C! a. e8 ]1 u6 w6 l
2 H! W8 @' n) o$ ~" P添加图片注释,不超过 140 字(可选). s7 q+ Y% l4 ]- H
7 ^5 c/ }; q- p1 `' D% o
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。$ |& j# m  M1 y5 X/ W' f
- Y  q* y0 @) p+ N5 g) U

, F6 q  R" O3 }4 j9 Q& Y2 C添加图片注释,不超过 140 字(可选)
8 l2 V' @8 V, T  D" B: Z: V* p: I) i% U4 M
编译recovery% Q  ~$ H! r  |

& ^4 r* b% D; d$./build.shrecovery2 d2 E3 Y, |9 w6 B; r6 @( V9 _/ a

, V% f' I8 u. m6 C; S' [编译Buildroot根文件系统
: B; Q6 r* q$ |. `& s
" b6 y/ D2 O* a8 \8 Y$./build.shbuildroot" u, Q9 x& X. v
7 R  K3 v8 ], w" H* e. [4 @) Z4 j

) O1 {8 X$ }2 A3 k添加图片注释,不超过 140 字(可选)
) ]+ j0 F. H; u+ @' R6 B* l; O) Y+ Z3 m" ~' @2 F) Z+ i6 M& c
制作文件系统的时间会比较久,请耐心等待编译完成。( a3 c3 y$ P  P" p! M

# g4 ^  g% Q; H5 T( Q6 C( }【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;
- j: D% g; p* Z% s8 n! S- K' U6 b' _( N8 i' m8 [
【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。6 d" `+ d, O$ O3 ^& b" z( I
9 m; j3 ~; {+ C4 o' ~2 ~

7 r. J3 y5 ?9 y  z1 I2 R& Z% e; N& ^1 h2 V$ w9 O- S

+ [. t& \, i% j7 _- `8 K5 M2 Z: Z/ C( C3. 打包固件7 T, L# p& b3 \

0 N/ S/ h, L2 b5 V+ ?; ?更新各部分镜像链接到rockdev/目录:  o2 o9 o" u7 a: S& h) }* e
. p! H) z+ Z) c" N2 s7 T
$./mkfirmware.sh
$ c1 G0 r5 o4 Y2 N& G
# d1 E2 C! t( M打包固件,生成的完整固件会保存到rockdev/目录。0 W* B* a5 A4 v* i8 R

% e! G+ ]6 z4 W+ ^7 S) K$./build.shupdateimg
5 {  f' p  r, t0 V& C: I6 W
" X: z$ f6 A- B! _' M5 W2 e" X: ~( d[PS]全自动编译; W' {$ m) p0 t/ u8 {
- c% }' c/ Y6 k+ ^5 V/ g
全自动编译会执行上述编译、打包操作,生成完整固件。
! y; j; i4 J+ c( D8 H) P2 W* {( V: ]& b. J& d9 ?( x
$./build.sh4 S5 D3 [) d5 F' l7 j8 e
0 L, R6 y: a) u! ?: s: @& p) [* W- a' q
# E3 k& w. i# ^) V3 q3 W
3- }/ X$ t7 l1 ]6 d  w

/ V: T" J: g) t/ B% o4 Y, Q分区说明0 A; L$ R7 ?" G/ ?) A: m) w6 ?' ^3 ~
/ @7 |/ w2 K$ j/ Z1 c% E
1. parameter 分区表9 ]' Y9 k5 z# m1 K8 w, I
" ~/ [6 ^+ i- e7 f, l0 z
parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:5 l- V3 a* ?% W6 o  B  b0 R

0 g# A% t! v+ Y" f  \) `; a路径:
! T2 s/ L4 w" h* L8 N! b& U& ^6 {, a3 @( y1 r  x' @. i
device/rockchip/ok3568/parameter-buildroot-fit.txt: o+ A/ j9 A8 x! N
* F9 @, c  D. A, @: }
添加图片注释,不超过 140 字(可选)- O: m  @2 c; V

1 E# K: a9 k5 k* r: J) dCMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
6 Q2 k& N0 @0 W6 {' Q. j  o2 |, ~. \( b* d) d/ a
2. package-file
. S7 H# ^( m* y! W! e, I( x! U+ [
package-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。
* ^3 C; g- y+ v) c$ }0 T路径:) Z' T6 N% r7 N! Z3 J! R  u! o; q

  s7 P+ K8 n1 ^' U. J4 Z4 stools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
6 s- g+ o' ]% p) k/ l; X5 L
3 T! v1 C8 T: u6 w5 E- L, o# q#NAME        Relative path% X' G4 d" a+ f* j
9 {, @5 \1 ^5 @, r9 {! l5 X% {
#: E/ ]$ ?" J5 ~) T6 [

0 R6 A( N- U3 n( g#HWDEF             HWDEF
: v. \) Q3 i  |! L% I  Q6 d9 |- l9 y
package-filepackage-file
: d8 u; L% k. {( p5 C) d
9 f* }, w2 X4 A# R2 w& _bootloader  Image/MiniLoaderAll.bin
+ t+ Z: p4 \7 B6 f1 U1 t
/ o' Z$ D' t2 V+ O5 h5 aparameter   Image/parameter.txt5 ^4 X8 j- x. p. M: e6 A
- d7 m2 H% _) ^) T% z% e; v: T
#trust          Image/trust.img
6 `: i/ H; k* z! t1 u# z+ s2 C6 y$ m4 B% H' y
uboot          Image/uboot.img
4 \6 _- A: `! l; \1 m( C7 c+ S3 X
misc             Image/misc.img
# R6 y7 M# ?  |1 U9 i# ~" a4 O8 v5 Q0 U7 s
#resource    Image/resource.img
6 Q5 e( v  U( W$ ~; f" g& |1 m* `. f0 Z4 M+ ?+ J/ g
#kernel        Image/kernel.img
3 ^9 H; M, r5 a( t9 z: K* \% j; |6 b
boot            Image/boot.img
5 S. r% ~- [9 n) |
4 p# h; D- ^/ V+ ^" f- \* grecovery      Image/recovery.img+ }3 j  x; {* s9 p7 }# P
- }4 S% }2 F; m! T
rootfs          Image/rootfs.img
8 l! }7 y2 C: x& @% G& T7 i9 j$ L! k0 T1 O
oem             Image/oem.img) D. n) ~1 l. {3 X0 C; S$ M* O
2 S( D$ X6 _% T
userdata      Image/userdata.img
5 D- k. N( p4 a+ v
6 }3 k% k7 K6 J  F8 I#要写入backup分区的文件就是自身(update.img)4 ]! e4 E9 k% F
! z$ m6 B, k# d* _3 [* j. C5 N5 A
#SELF 是关键字,表示升级文件(update.img)自身* C7 Q+ }# n, O

! R9 o" ?$ K2 U* Z8 C! U#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录! K8 f- s* e, |4 y# S

; E, v% [; U- i2 j- K#在解包升级文件时,不解包SELF文件的内容。0 B" N& H8 p) z2 ]
% O1 [2 u/ O# f* d* o9 T
8 y. V1 o( Z. n& p& v
backup        RESERVED! t9 z8 A1 l: }1 R9 m! ~+ b) N
2 u, p! F: E( p
#update-script   update-script2 {; ]% a; a/ c: k& d$ j: C
* l6 n. k. ^6 r$ l: q* x
#recover-script   recover-script* H  g* E( X, H- V* w" F* p: X

% t( w/ r: I$ ]3 w- I4; _' U. e1 b9 u' Q) U. ^
, W# e! Q4 _- @6 e: I9 A0 q7 u9 x
镜像制作
0 q& A4 u- {+ E! j( g( m  q/ ]% B% y' u$ N
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
% c" \' M+ t4 [3 W+ \6 p; T* H, d5 m

( |2 f9 ^- }* w# g- N' }1. 工具安装
6 z$ b- ~* e: q2 w- i1 [! F7 S: m$ P3 B
( Y8 ^$ A. n0 j( W4 m下载工具包:
, v5 {! Z! i) K6 J. M1 ?2 H7 y+ k/ }, I) |
$git clone
( x4 e/ c  G- F% J/ l: f: f+ X5 x8 ]. O
https://github.com/TeeFirefly/rk2918_tools.git " N5 l; a: R9 ^0 U& ^5 N; h7 h

' C1 O  l9 r; d" [# I7 P! O; k. b/ W. \/ o) f2 U- V0 {1 P
进入工具包目录:
9 l) C2 n) N" p( A
! M- F: ?& k. z: z0 n$cd rk2918_tools! _5 a- J3 A' ]' [% ?. @

8 K! ~8 _0 g  p. `: t% h% W  z! ?编译:: P0 k, S8 _4 }) L' W1 a
% E4 g) e: o* S3 s3 @& L( p3 v5 w+ L3 N5 L
$make
0 J( s& A( ?( R
. [2 j* Q6 j( B% S# v1 r- Y+ A0 `将可执行文件拷贝到用户二进制目录:% y+ ]' B) w. e' h

4 Z. S+ E9 ?# y9 S$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin" _& }( ^9 v  o8 _, v; b
- n  {& _5 J, y6 r- U0 d! U* ^, S
2. 解包( |0 Z" n3 I8 @) j

9 |4 k3 u8 @) D+ V- G3 N将update.img拷贝到Ubuntu中,然后使用命令解包:
& p% x1 Z  P; u( x1 ?. p& y! J
1 W! L* @' O( o4 [: H, Q. C: Z( k$img_unpack update.img img) T; j4 z1 x# q, E* m+ ?, Z% |3 T6 j

, p( x% p) U! m8 L, r; C' Z( B# q' P+ Z& M
解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。, X' _% M2 L! E( e. t/ m# j" s

2 @/ }3 t7 j- U: d# l: v; J6 K9 U0 Q7 Z0 e3 H

8 h. J1 ^0 y( M" \# s接下来进入到img目录,使用afptool-unpack 解压:( d/ V- ^% A/ H2 N! ~9 z) g
. N8 S. x$ p3 T8 ]
$afptool -unpack update.img update
: T8 T2 @6 d! X1 r8 c3 N' J- c# w& E  Q- N- c' f$ R
解压到update目录
2 M/ g( k9 }! k2 y6 B) s, J
! }; ~+ T& \, |& D  V% V打开update目录,里面有很多img文件。
, D( E3 q2 [6 h% `" p1 m2 [9 v' K( Z9 p0 G  J. H; ?
将需要的文件复制到rockdev目录下。  P, r0 m/ q/ V+ @
* M/ J5 n# L3 G: f+ K
3. 合成update.img, w5 g+ I" e, e! A, g

# @$ Z% r" E5 f* D+ J3 K然后源码目录以下命令即可:6 ~6 T6 N8 F8 |

- {, u  ^7 |7 L# h9 y  d$./build.shupdateimg9 M: i3 _) s$ c! `% e7 _( J3 p
3 K* V3 `: Z, p/ e2 E3 i. Q3 U
[backcolor=rgba(18, 18, 18, 0.5)]​( Z: G: X1 T0 t* C) R
3 F! y' k# v7 \
编辑切换为居中9 r- \. P- Q0 X, ~0 N, M; w, f
6 L$ ~" H3 `$ r' Q1 }8 D

该用户从未签到

2#
发表于 2022-9-19 10:44 | 只看该作者
7 }' a& j& a) i5 @3 t
图文并茂,流程很清晰
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-8 14:33 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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