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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码
- Y) J3 f, d+ Y7 {
9 v& k: A+ i# Q: f0 e

( e8 ^& \% b) ^) E' K; q/ J$ M! k" Y1 ]( j9 ^/ ]1 k8 [2 C8 r

% ]: @5 q7 k" |0 N/ T8 W& h+ d" ^1. 创建工作目录7 l6 L* Q6 E" ?1 W

. A' m' ~2 T6 g( B! A- D  e$mkdir -p ~/rk3568# N3 l* t) ]" i! K& {

5 _' N7 e3 Q, l" K8 k8 |0 k% g: `
2 e/ ~  F# T' A: Y1 j) x0 A4 [& |

+ |9 w0 w6 f6 n! ^& c0 F( L# f. C0 G2. 拷贝源码$ O: c) [( ^1 n2 T& s0 c% g
! Z. l# Z! ?& I8 X; C$ C
将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。
2 o, L9 u+ [( l
  [1 e  _* }: }* a, k/ S

: m# k* Y. c0 I
6 A/ e6 g! U+ b- @% N: w7 p
3 ^# _. V/ A& h- h
" l) D4 X" x4 U- h- ^/ U7 w

( a; R1 N# A5 j% _# s# _' Q: K
  I, V3 }& t* X3 P
) J; o9 V) V) f4 z- Y0 u" M3 M) o) W拷贝文件的方式有很多,笔者使用的是共享文件夹方式。
- A. q$ a- x' P& o# l2 k
+ A+ k) b1 `+ m* |' r

/ G" C7 p. y. [( m
5 B, o0 W5 n% B$ {3 E8 w

: R3 T# W6 w: h2 i( ~【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。
7 Y' D3 |; A' S( x8 |

# B4 D( Y' [7 X3 e, [6 k' G1 G! j' G. ?' Y  y" B

5 g% T  G, [- v  o  H& Z- M4 y) }; [- R2 u
- Y0 n# s5 f! I8 u
3. 解压源码
$ Y5 o; D) g* q  s/ W7 b

- e6 D/ N+ `  S$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2
# P* T. r* w( R- l' i; `' n3 T9 W
- i) r1 ^- U6 [- k/ s2 a! c3 Q
$tar -xvf OK3568-linux-source.tar.bz2
$ t5 y! z( n7 r; m+ {" u5 C
- b  t/ k- B, |$ ]& ]( X5 q& y

( n* s) k) S7 h% I; s; M7 ?* ^4 O  C6 Q

1 U7 J) F  Y. _, m耐心等待完成即可,解压时间有点久。  ]! g# x) ?+ O% k& }
+ F6 J. i" u, J" J" g0 a: K
2 w% l6 o6 z  u9 u  n, v9 n

+ Q0 u# ]5 c4 X6 ]
# P1 V5 w0 {; ?$ o8 n: Y' |% m: p  N
4. 进入源码  ^. Q$ C* X; R8 r8 @
! ?& K  a$ ]6 W( H0 G7 t( v
$cd ~/rk3568/OK3568-linux-source( i+ B$ |( Z( M# {# F1 n2 {

" Y8 i6 A' v6 t, h7 R% S目录结构
1 O* c  P& K0 r# y' ?. G+ }
2 A* l% c3 W# z4 t
' H% Q3 O$ x' H7 ~4 Z
# ~5 ^' M& y/ ~- c( ~' F( Q+ X
4 N) w. }  O; @. D' C' X% U
0 P/ v/ y% i- Z, Y4 w
& {9 f/ X9 P8 {- l* y

  ~6 ^* O2 i- C7 ~/ `+ k6 I1 L二、编译SDK: k0 f- i: v+ {5 [, j
; [, Z/ o7 ^' _" ?8 q, K

4 E6 l. F$ T  _# b9 I" G( I4 ^1 V
& m/ o. a) p7 r' D  W. j5 ]
' g" R( M$ ?- j
1. 编译前配置2 A9 y, g% C# N( U; p- u
5 J) ^4 m1 x: G$ T
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
4 J! _5 s6 I; C; [& Q
2 V- n' H3 R! ~
$./build.shBoardConfig-ok3568.mk  , {! Y# i8 w- u- u" ^1 h- u

0 O, G/ M7 K2 N  j0 _* t, i相关配置介绍:
2 L* @( ~( a% r+ ^
4 Z/ {6 s. x) H. U* q1 O

* J) M" J/ @& d2 `  F) y0 K8 t1 {. q8 h/ a+ c1 }
4 c$ ~6 _+ D! E, W

4 I4 l1 L% G; Y, r& R
& `2 w, L' m1 E* a5 w& {) i  o& w

5 f5 ^- i6 ~) P5 R" ^' Z# x: k& K( p) o3 \* J) `, C8 `4 r
: i( Z( V5 I5 Q# J! ?0 ^! d. r
5 f9 X; ^* e, u$ g1 I

3 `" W: o# l' y+ D" I& X2. 编译! ]* y+ W" l8 w7 m
# e! V7 M" c5 w$ a9 p
编译u-boot
8 Q2 N8 R4 L; O" Q5 _- A
# K) G/ M! F- k% d1 r
$./build.shuboot1 ^, p. q7 s2 E* d

: R, z% f. G5 p
3 J# E. ^8 \; P0 i" f" V" k
2 U1 C; A9 x9 T9 o4 D

7 Z* z7 }$ C  y+ T; c5 P  {( u; b
! Z5 p# G: r; K; w1 \8 o

/ k! t: m, R. R9 e, \1 p

: E/ q* f1 q) ?; P$ }: e! J……, U( j8 [$ J7 a4 L9 n8 M  c

& @' d  z- Y0 @9 n. N
! Z9 _" \1 N. u6 m/ j/ w! F$ Y' u- J4 x8 @, z; z

! O. u  W# r* d4 F2 x4 i" J
. G' t# s: ~# V
' {1 y* v- l1 W% s

" ^4 M, Q2 {# M$ ?0 b

+ i# G' S" K: B3 o+ Q& T编译kernel2 Q, T: y, o& C# I2 H5 `

& X% T  b( E. e% j% j6 \8 a8 {: ]9 |$./build.shkernel
% W" Q! d/ \: P4 `$ U6 Y
0 D5 }2 ~; Q' U! D9 k( e+ v0 _2 w
* m$ b: @0 h, J
/ Y3 s! k2 u0 l! _" ]
, w: u4 v8 A- ]& W
1 L4 e: t0 _! [' T1 I
9 h+ V3 z  z7 s8 F$ \! G: P& z
+ T% {9 d8 J" J( j0 U8 r
1 T! ?% X! r4 U3 T: p+ X
  X0 Q" k. Z( S* m; b
- K. ~3 O/ _* D8 I0 P+ z
……
5 g6 o% n. c4 ^- U9 Z

2 i6 d. ~7 p" @- a5 g- M: \7 g. b- ]! t& J; P. W
1 L' z& x+ J1 z0 p
+ S6 F% Q2 c; x( ?# \& g, V: G

. j/ B# W' K6 R9 d! y/ M) _& V
+ }- \! b. @) c1 r6 Q  U( N- J* A$ D# x2 [* d* W' c* B
; g% K8 `+ m! V" Q. N9 C
8 a: G( e" V/ t  x3 W- O
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。
, c7 [3 m* O; G6 w, U
, O! T: H- P" D5 A, l& |

! d" `1 B+ f0 |$ V& m# ?2 \% k$ J& m' i( _1 M( Y

/ \) K2 |4 |! {

4 J+ M$ e. S3 f. k7 N编译recovery. \. y( G4 X, L
# P! Z/ G$ u- O
$./build.shrecovery
' b' \( R% M+ |! C; U" e
# B' x+ w' h% O6 u- F
0 ^5 N, P9 z3 p* ~, F8 N4 O$ c
7 P/ i6 i7 g9 S2 z. i; n! R
! J1 M8 j+ ^, A  b

. i' a" w9 E! k) d' K, J) A) X……
# z& g9 q. h3 u! z$ n7 ?

& J6 A' Q! r3 b& @! e" h7 o* B) c
1 \" ?" R# D3 x1 g! x7 _- c# A7 Y8 T; L4 y" l& N  s7 q' s5 u
/ a% f, k  v% p. P! G" H1 s
( ^! G& [: n( K+ T) }4 S4 L% L9 _4 a

5 v; ~, m  F  ^8 j) o2 G
6 ^/ f: z& |4 z' W$ d* Y  D& A; `' }( J- g& h. \$ X
# F% S5 R3 K# C. C
编译Buildroot根文件系统* T. ~& C- J4 P  c4 O1 C4 _! }
7 U5 m1 P) T* F7 K9 t$ p# I* ~
$./build.shbuildroot- ^5 O: G  {$ E( |
2 C) C% u# u4 Q3 f
4 J2 b1 {, i% `- f' c/ `

0 H1 F, j. A2 n, O$ _! Y& c9 r

" X% v- |, A1 o* i4 t) j. C! ]# c

' B8 Y3 o8 D/ K' ?+ e
! H) h' m5 F- b
制作文件系统的时间会比较久,请耐心等待编译完成。- j5 @3 r( x+ ]+ H
  d4 @( N% q% J9 P9 c
: K" u% _. I/ O' c( v
; Q) A1 G3 l0 [4 z! P3 V! E/ _

' A# I# V$ ~: H& a【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;
) A7 o+ C% M& E0 }* g; |

7 Y& i* X2 r1 V) W6 B【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。) B7 k% {3 o9 I, c, M$ U2 J' e
# Q9 @6 p% c' ?0 o/ V1 q1 q& k

; |$ V% g  w5 b8 ~$ E
0 B+ {3 [* l& e% q
- D1 L0 M7 S: \
3. 打包固件
3 `* p- b9 Z. k- I1 Z  k' O0 I
* J% Q) }5 ~+ n
更新各部分镜像链接到rockdev/目录:
% T) `. z4 _' A7 s/ U2 U8 W
8 Q& P+ f. G8 d8 @
$./mkfirmware.sh# G, d4 x( X/ z: I. j

% {  i* J4 O4 h$ r8 F/ f, g打包固件,生成的完整固件会保存到rockdev/目录。
6 n! B( @8 K5 r9 r  k# o; Q

+ T3 {) D) q7 s( _: b$./build.shupdateimg' e& R; Z, Y" K: V/ @& T& |6 F

! d% \$ f4 c# G# {
! y! f* I4 E* ~  J) p8 b' H/ X
2 o! |% P8 R0 m& D- P

  b1 S! n6 ^; A7 C- T* |2 l
3 U; F) T6 b! Z6 {/ j: a3 z. }
+ p$ O! p. R  h' i7 t7 F
[PS]全自动编译
0 y( h. q/ f' y3 G8 j6 x/ r
) V0 i) x+ ^! _$ T! C
全自动编译会执行上述编译、打包操作,生成完整固件。
5 @0 O6 B, a! F* V% c: S( Q
# E1 [4 ]: c# ], T1 n6 D! a/ C
$./build.sh
2 P& @: A8 \) z

- }" W. D7 i/ N6 b7 U, `# w+ q, x9 e, V6 f! f

& ]4 Q) y* [* n6 u% b* Q: |) N3 C

  U7 u/ Z1 n; c1 x) K7 i% S: s
; n. ]& T# [% R8 k* F3 L( t4 c& {7 l+ o6 r
( w3 m" o% b+ [. G/ Y% ~
三、分区说明
8 ~  v, k3 J& e: S

0 z+ C$ j" Y9 L* ]3 o
$ j1 k, ]- p; g3 I$ N. [
, k: L2 \6 A3 S) P

  i6 h) H1 L: E" q1. parameter 分区表( Y% b( \+ [) W- M, j; ?2 [/ b
9 Q: K& S! s; d# `2 h
parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:7 Z) U5 {* U/ @, ?
- A8 H0 @5 {7 v+ }  I6 y' S  L: z- q
路径:" E& v0 O* @# N5 X' w
( i; }- e. Z; M; P5 O" `2 Q7 w
device/rockchip/ok3568/parameter-buildroot-fit.txt
$ {$ _& q! L8 L( U. `5 x/ M; u0 W
6 }% F9 \$ R' M

3 B: F4 P) S4 v. k, @
5 P2 t1 [. [; I" v

, o( I- C6 \5 O! |& J. p; T

& |8 b6 T6 M$ a' _* V& S* B& z

2 H5 C; a) V  O' eCMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
+ A/ Q6 X" g& k$ [  `
5 _$ G. z  Z' n" u) g; Q4 i* W
- E1 J1 X" ?8 N& w7 @

) O7 V& K1 b$ W% L: g$ P  C
- p5 X5 ^! j1 \/ @6 U
2. package-file
, ^- D2 T8 O/ k) }- v$ R" X

9 B; P0 h* ^& lpackage-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。
! A0 l$ ~" F5 H! v
' q- _3 s/ l+ _  l

: r2 q2 Z; y" K5 D, ]
+ |& F9 X7 R! _& s8 d' a

- M1 o+ C+ @( X) R路径:+ _$ v- @- X$ N# H  c: x7 }0 K
; @# i, v+ h1 B. n! q1 L, D( I
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file4 `( S3 A0 P" u, _& {

' a+ v  K- W& T: e5 Y3 e8 n' a#NAME        Relative path/ X+ f. ~$ y& d+ Q; d7 _- d  C

" Y6 y) s9 W* h# L, `/ K: j: l- B( j#) b8 O- Y+ \3 ?  N1 _7 _( L

9 P5 v: t7 j* A5 {7 Y$ R8 B#HWDEF             HWDEF
* g% p, q" R  E3 q* O8 }
8 R5 C" C; A  H; X4 E% V
package-filepackage-file
2 `8 I4 K* q6 z" H

. u6 G- ^* E' a$ P0 c; ]. Y0 hbootloader  Image/MiniLoaderAll.bin
. G- u  c: Z% d( c

4 [( O. b9 p- \# L# B; v: yparameter   Image/parameter.txt# k; S# e' M: Q" T0 C5 p
# I2 @* D3 |% ?( C# M2 f
#trust          Image/trust.img
8 k1 `3 v2 ~: \* U$ P6 k
, S9 ]+ r) k" m& H2 ~$ k( ~
uboot          Image/uboot.img
6 P( o- [- h; t4 m
; G+ V* a! m$ }/ g4 Q1 B. F
misc             Image/misc.img
: c6 X2 |+ v5 ]1 A# p6 y

# `9 A! J4 @: A- i' z1 G#resource    Image/resource.img; w% B# U' T8 f$ J6 `

& c* i3 I: O* Y. z8 b1 e#kernel        Image/kernel.img
  g3 @( S. F( b( K8 z% Y! n# K
% o5 O1 N3 M8 v3 u# {- [: t
boot            Image/boot.img( ^6 Q- b) }. t+ P  J" u- k( }
: S$ V$ V" D% C! R8 o& p5 e2 _
recovery      Image/recovery.img
8 M- \2 p% w9 o5 x
0 b5 g+ F+ K+ v) y
rootfs          Image/rootfs.img
' `+ L+ w, B* x% l" y, u
3 {. \+ h  e7 P7 j& F4 j" L* [
oem             Image/oem.img
& B6 D7 J! \0 ]: J1 P

* ]9 a6 t( W3 q& euserdata      Image/userdata.img
- F1 m( }. k' P$ y, R$ E
, D) H; R0 U! Z- U: W2 P; _

# u+ t; n! J# |$ E# C! S% u
" r$ I# W3 ]* n4 t+ L% V
  D4 z" x; O# e5 W2 v
#要写入backup分区的文件就是自身(update.img)2 S& C6 C" M; Z3 Q- }& Y+ K
, d& g! y7 R$ z  z" D% r+ k% F
#SELF 是关键字,表示升级文件(update.img)自身: A$ Z$ g( `& F1 g9 R
/ o8 @% `. j3 r
#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
+ s- @, L8 H- t! {3 l$ u
# t: K. |1 O( A
#在解包升级文件时,不解包SELF文件的内容。6 ]) Y! i$ F& }+ h

7 u- i" ^9 L* H' l$ @
9 g' |# t" C* Y6 C, u' u* X
" R& ?% x; O3 |4 @3 j/ B

9 w+ {  f* ~( w( l0 D7 r' Sbackup        RESERVED
( j3 v/ n# r4 h3 [' q/ r

! a: j' r; h; \7 O#update-script   update-script5 `& n7 w6 M0 `, v! B
/ L: Q8 Q' U+ X0 q/ i
#recover-script   recover-script3 h/ c& U. Z( @2 w
8 H; x- `7 r* m9 C2 Q
2 |1 H3 T$ t; C5 d( l& L* ~
' S, w% y. f) v/ W: D9 y. @5 S
$ b8 }/ J! E. z% V1 J2 X; V
四、镜像制作. S6 v+ G1 P& Z

1 i0 C8 A$ r  _' E: h
% H7 j% f1 v/ U4 B9 T9 N0 j6 J$ y# k. M+ G8 a) a3 L" X
4 H/ O0 Z4 m/ c; ]" O
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
$ v* y( i+ ^% |; E" D

" J& Q( Z6 V- w: H  C7 j  _8 {2 x- [6 O$ A1 _0 |0 E

' a, c0 G" K  A, N$ O5 C$ M7 w4 h( @2 ]

/ ^1 s. ^! J% I% D( t: I$ s9 R1. 工具安装9 _0 p# q- ?/ X3 @( f$ Y: T# x

' i+ P0 {" Z  a. R0 c3 }' F( H下载工具包:" [9 Y" x0 n  r

+ m5 ~& M( M' {2 h) S$git clone
+ j& K% b5 [5 l5 a9 t3 Z5 t+ O
- t* ]* X5 e0 }5 w
https://github.com/TeeFirefly/rk2918_tools.git0 c( t, y& p. H6 @  ]5 s! A
" g; m& ]* S% B, A& |" H) l
: D5 m1 a! S9 w% Y: S) f

2 X* S4 J: |6 E; R" }, Z: E

# J% ]5 ^5 E+ u+ L进入工具包目录:& w2 ^1 n  F; z5 D! L8 C

8 C. V1 X" k, G) ?$ Q4 R6 Q$cd rk2918_tools  B4 |1 u5 x, y2 Q  z

& R. C1 P' n. V9 u8 k编译:
9 t% l" k) S# I7 o4 ]: h; Z! @
9 }$ G8 ~8 b) v/ k5 j" ?
$make( b- g$ {# J( M0 d, r$ `7 Z& \

  b# M5 ~* G, a, N( c7 w* R
( P( Y& M+ W& v5 G% U1 ?- K; ]5 Y( Y8 C4 l
4 U' ]5 ]8 j6 ?0 \! [
- R3 C- I( m2 w) K' J* O- c
将可执行文件拷贝到用户二进制目录:
, K/ A& {' O2 s

# M0 S( }9 p8 q$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin
* ?% l, l9 j/ @) y$ S

# z- q5 l& ~; t- y9 X( S+ V
6 V- n) N! i; _$ r. P* u/ e3 ]  i9 @# t: d4 J
& F# h' R3 D7 i2 Y1 A
2. 解包( Z7 G6 j9 t+ ^7 A, o2 @

' V- q& R* o/ x# `将update.img拷贝到Ubuntu中,然后使用命令解包:
! Q! n5 k# Y7 B& Y( ]) u
+ p( }+ m3 X- V  r1 P2 p+ M
$img_unpack update.img img2 ]* {4 ], G& ]( n4 S2 |

6 L9 Q8 x) P+ s" E* x7 D+ A6 x4 ]9 q( o* x$ z7 |+ M6 J. M9 X/ j
- O# b, Q' u: @/ }+ _
# D, t3 Q3 b% p5 ^- M+ a) h
5 \" d) h9 J  e  H# |% l4 @

8 `2 }; `  C+ d4 D5 ^: S  d6 z) T7 E8 D8 O# n! Z' f
$ r2 {0 m% W/ ]; Y! G! ]2 G: U# ^; p! Y
解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。4 h; c" S' S# E! f7 S1 c& c! h

) i! _( s" F) o4 A# M7 d% T3 M8 i5 r9 P  J1 K  ?5 u# J, j  P0 [1 U

# [: c, [/ I5 `/ {2 q5 u
4 q" r) _/ ^) t& g$ [( B6 M

  N" ~+ N* }  P* G7 {7 G' g, L, U
- \6 K1 T) y& X& H5 A! s
, S( y" d* K8 X1 ]7 A' d

3 M# j+ o; W7 ^' T接下来进入到img目录,使用afptool-unpack 解压:$ b/ J8 ~; @# [. c' y9 N. C

/ f! d8 t7 {& p+ L  Q$afptool -unpack update.img update
/ @0 G1 x! E  x. _& c8 i' z
0 Q. v! k  @  `# ]

, B9 v2 T7 z# q
* d2 @7 L' Q- }5 u& b, j- }
- ^5 u% ?, n+ c3 c8 W' N* J5 s5 h

2 C; C# B  R- ], Y. t; h
9 L' @% ^' Z3 b" J# x) b
解压到update目录
. z: |  S  O# i  I) K& m

0 v+ _& o( r  g% Q! w打开update目录,里面有很多img文件。! p- C, B9 E, f( r( _
2 H. t) D/ `: D* q1 Z+ k
7 ]3 V, Z& S6 i$ ^4 ?2 A3 u

- ^& G6 f0 ?. h. X* d

7 K4 H5 S2 }7 H, n% w& ~' s5 m! q将需要的文件复制到rockdev目录下。1 t$ C7 T8 ^2 p  u6 F2 F/ m( l! X+ Q
( l1 N) l& _8 g8 ?' R2 E; c
7 T! Z* h" v4 d# A3 @) q1 c2 H, d9 M
- k% y, u! k- R$ B4 p: L( U# h8 w8 l

* h8 t3 `0 x  w3 k3. 合成update.img& [* o2 C0 G$ j& p) m! L

4 D8 j- H1 B7 R然后源码目录以下命令即可:0 z$ H) ~& {! C+ H- i6 ]
9 i. I/ ^4 j) y+ Q8 U: C3 a8 a
$./build.shupdateimg
0 W. ~% ~! P' U# F- O; S
9 r: }* j. W. h: O8 [
( ^1 |5 ~/ e9 ]: Q
+ d3 u9 z+ {: h# p
9 m& j" x% d8 v0 ?+ S
- G* k1 }1 a& ~  T

该用户从未签到

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

该用户从未签到

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

% t4 ~4 Q( U2 b6 z' c; {步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 15:44 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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