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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码
7 f% q0 y" x4 N/ E; Y1 V$ q  F

4 @) f* X7 g# k9 W# ?
+ N/ l. k+ u- S7 B. N% ]5 \2 u$ N5 [% e1 V9 B6 I$ j

1 q$ q9 _# m- u7 |% [5 O9 U% X1. 创建工作目录
# O0 O& h' |, {

) U2 j+ H+ g- j  d  b& c$mkdir -p ~/rk3568
$ o' a2 ~3 n1 b3 E& m2 E; K
  s3 A' F* S( I6 E. B+ `3 y; a

7 G3 b. W2 W+ R, A2 D; i, U/ i+ n+ i9 j1 U: _9 T; C1 X8 P$ D& n, S
1 V  R; c( @- D9 Y
2. 拷贝源码
" [* G/ r# Q9 g) o/ A
- l" g2 A: z5 d
将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。- r: I; a' h3 @- u
: v6 C& ?& J+ m3 J/ @
+ \2 X; j' A1 q' U9 j- F

3 L: d3 a! U8 i# z3 @
* y! ~  `4 i0 z* o7 v+ b

# L& {5 @% g7 @5 a$ @8 F; t6 y1 ^! \# k: _6 W! i' L  t

: U$ X( T. Q1 F, A7 P! T( q" C( N  p" S( A2 T7 V, C! [& |1 w
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。8 ^6 }* @9 }9 P( ]! d
7 f+ _: ]# e, x4 y; P' ~0 b& z. G

7 ]% v, \( n4 P1 g4 @( s, k& |. x5 g

$ v! Y' b# X9 J9 ^0 D- J( z  q" A【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。
& E7 z6 |4 K7 g+ q3 p$ k
$ w4 V  s( G* m* n/ p

! L: Y! d9 v: Q; I' l  A9 T+ c9 A& Y( [2 K7 n7 r2 D3 @& |
" O6 w3 ^, |- N/ f0 p- V
3. 解压源码
* Y; e, L( a3 B0 x! e5 \4 F
& {3 {! M0 ]- J  q* h& c
$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2
* a9 P7 F3 k  |0 J( Z4 M

- D6 X# {  b1 |/ {8 L' A) B7 |' A$tar -xvf OK3568-linux-source.tar.bz2
- Z5 l8 q2 N* H
4 U; ?6 v$ Z: Y+ v; |( }) ]

8 H+ h* x0 E; ^% t) w+ R
/ [7 p1 g" e4 g  M2 n4 ?- p2 E

9 U1 f  \/ L' Y; f耐心等待完成即可,解压时间有点久。
) [, B4 E  q4 e- X

; X! Y+ ]% I/ m) Y* |( B& [! M: @" o$ m
6 ~: F9 V# C3 N

; s# Y) p3 l! V- g" A# q$ f4. 进入源码- ^. F- ?/ M& T6 j! E

, ?9 g, t) h; T# k2 E$cd ~/rk3568/OK3568-linux-source
3 S" B- |* H% w  Y
; I* e8 C) ~7 Q# v8 C$ `; {& y
目录结构: v5 ^" e( T6 w8 N, K+ v

$ ]* l# Y- i/ I3 b
$ C6 c. e% j+ Q/ ^* K9 T8 @, Y# e, f! d4 I* x' p" P
4 i3 A- o9 p; g  _

7 b( O. ^9 y+ r" z( T) k, f# b' f  ^. i; x7 C0 x

* t# \' x4 s# N( U二、编译SDK
" F% v0 _- @6 r# q" z, g! c
4 C( k3 H4 A% D5 E$ o/ `
8 J0 s$ N# w; x7 n
. V, @! y3 H! v* X7 I# y; m1 E
% ?- f: d0 Q% [, d+ q: z3 U$ H
1. 编译前配置& `" O7 X) n5 H" c

3 l9 D; V0 q: {' b* W7 q; H* I在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
! }4 j  e/ C- k) c% d6 @3 P0 G
& _  U" I* q5 Z" m/ \  m
$./build.shBoardConfig-ok3568.mk  
+ W+ `7 w0 F8 E0 q. i
8 }9 N9 i+ `( j3 s3 K5 g
相关配置介绍:
4 W' ^6 l6 h& M% Q9 e' u

( r; f: K& D; w/ G- Y2 {9 C% B! h$ ?, l# I9 j+ L/ d0 o
* q) M! N8 H/ n- O& ^5 u  {

/ v2 j6 }3 m6 D' Z* H

4 W4 i- l- |6 p& E' Q
& X( ]$ U6 B/ V" c0 e
" m3 k' Q& X5 }1 V  [% U0 _6 G- l8 ?

* ~: D( \3 U6 A' T, r' d, a. b- m& ~2 M  u% b' R6 i
, G5 v8 |2 }# z4 H
- P( k/ M" O$ o. \
2. 编译
6 B  ^% b: [8 n/ F, J2 A8 \1 p

$ v$ ?: i9 r3 \* I编译u-boot
7 T3 p' y$ b+ R. M3 i! x4 x

& \  s5 g5 `9 z1 h3 H0 s$./build.shuboot4 A1 a) C) [# Y3 N/ P4 O# K/ C
4 i1 P7 n, ]# E+ S7 \( L7 \

/ t) c: Z  Q) \
/ `4 R0 i" l' U9 t. k; o, O

' b0 Z) q9 ?5 ^; ]& U9 v
( m. B  y. F- p. w/ v- S5 s2 P

# r# J& _0 t7 v- R  k6 c

; `* `+ A; x1 C……, V- c& L) R2 a' ^0 d

  W0 y: V% S/ Y, h5 v) j7 N1 j: r! V+ z' R: [
4 T2 r1 L& N  E1 }2 Q0 m
7 v8 f  w9 B4 w' b* Q$ D1 @. p

4 ?9 m! q4 \4 O* U/ a  O, y. b$ U* S( b2 z
5 R7 S( N7 G* i1 B$ m6 {1 }( k
2 i7 W; V0 [* x4 M7 K  y' ]: p
编译kernel
( N# f% Q' U3 B
5 l8 s; z. ?' F/ T7 v2 j
$./build.shkernel# V  c# F3 a! d3 u5 ^' a
4 w2 k0 L3 V- T$ H' }% K
' b9 j3 e0 F) @% ~; V( J

* p, S5 |2 l# [

  z" p3 T, t' v9 g8 O) ~. H

! {5 W1 B9 T, B; A3 C4 b4 k6 _
/ i5 W+ P6 E/ G; J" x, s. M( V. C
5 c. h0 j3 Q" f! Q& k. t. l% M5 u& R' g: M
& V" @( q1 I" {' T- z
: T' \6 Z2 {5 l4 y- Y( h
……
. V+ R( B4 E/ L2 V7 R0 M/ U
. x: p) d. i6 A% c% C4 x& O1 m
  a* g/ M! p& e; b6 e" E
) ~) V  L6 H3 O$ T( i

, P- g. _/ W+ p

5 A* T/ ^' W/ F; q& F+ W& J$ }3 X* j
, |% Q7 H; B) t, V2 I* n$ p% P9 ]1 o
4 p( q7 D, X. D3 [3 K& C

1 g$ d* H9 H0 n1 _0 X【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。% P- U# r8 S9 {$ P$ t3 J) G
- F' z+ q" r6 Y% t# b; K8 B
. [" t$ o1 _; f4 M( B4 O

. a- m3 u9 ~$ J6 M
" h. J4 V5 }- L$ O) d3 x0 }7 ]: k2 I
4 e$ e  S, E4 N# S7 V
编译recovery
* t: O- T: ~( j, P# q7 [5 P. ]  s8 B& [
9 p- X; I6 Y8 G$ K9 |
$./build.shrecovery
* C1 P9 d$ }7 }

" J2 X2 g6 u: |, m( b: W
2 P; d0 @1 _' M, m8 n; w' W  O; W9 s) }
5 _% D! ?  P( ]* ?7 d  v8 Z/ z2 E" x, p
3 C# B) s/ w- [3 @9 g, |. g4 I
……; k/ s. A+ |) ?, P9 d$ F8 w: ?
( ]4 z+ ^  H+ l9 s! Y9 i
( l  w0 r8 L$ c" D: d5 l* o/ G& o

7 L2 N7 @3 u- k9 W* e; |
9 N8 W' V' }7 Y3 Y: ]. w" R  P7 R

8 {1 b# Z- S% x1 n9 v/ @
. I1 A9 c3 i: `, w

/ S1 C3 _6 [8 ~4 K! z5 p3 a
! ^( G2 U3 U, b( h2 C7 L+ f

- U6 {, F; y/ l1 v' [  u编译Buildroot根文件系统. t* U! `& P6 o

6 \: u6 z8 m; F8 @' ], t! }7 Y$./build.shbuildroot
  v! X; G6 u+ s  }( l: m) p
( x9 w3 E# i. H. R4 k% }
. t- z, K6 C. X* s7 {

3 F/ H2 P- n9 p8 e8 m

5 }# r" E7 |8 ?2 d8 X- Y
* I9 X' @. }" N1 E+ b1 X
# N. y0 S! ?# u
制作文件系统的时间会比较久,请耐心等待编译完成。
, X1 O! B2 L! {0 D" \( Q- {
+ G- T/ O6 C$ }- m7 C# k9 U
( \/ @, B4 o. \4 p" r: m* F
2 j! B& l" J% u
" L7 f+ s1 R7 S; G6 o" U! k
【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;6 ~, r1 a) n- A4 g0 f

+ l* o6 ?% N0 S% V7 L【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
# a# s7 D- v4 v$ Q( A3 \9 s) h
+ h+ \8 a4 R# m% j' F
# A5 i( o9 t% x

5 M5 W7 o3 Q' O

) ]: l* I" Q+ @  D5 \3. 打包固件" P( K* h5 H3 k/ ^: ~

4 t6 ^, `7 S! G; t7 A. O( N: U# K更新各部分镜像链接到rockdev/目录:
9 ], o; J; W+ p2 e

6 {' y3 M1 D' k  D# Y2 d/ L/ b$./mkfirmware.sh
) x8 d/ t3 P0 [, h0 b5 R
% T) r% p1 [1 l2 \8 z" F" |7 e
打包固件,生成的完整固件会保存到rockdev/目录。
! f3 O/ A5 I( T

) r& X: s  V5 Y1 A$./build.shupdateimg/ v9 K: m$ ~  ~: [9 a
8 W2 t+ h2 d: h" M

( x% w  }2 L$ C
' j$ r! j# o, a2 D* S4 X. F

! ]4 m6 a1 }5 y
5 r6 ]7 C; i+ ]1 a% V1 ^# a  b

0 @* x3 W* \1 t8 d" B( U2 \[PS]全自动编译! Z9 s( V9 M9 T  ~

# R- F3 l( p6 _/ T全自动编译会执行上述编译、打包操作,生成完整固件。% A$ P+ [1 q' n
: U- n5 u+ _5 Y: @: i
$./build.sh; L0 F3 V& n. l' ^* F

" ?+ O1 o# m' u! n, A5 U, j' B" J2 N$ u
8 k% i- k* e. N6 ^* w7 H

, V% i! m3 V# n: R" p  ]& C1 g, K1 @0 P- M. }

$ d1 G2 k8 {* P* N3 l, z/ J

  }' P" w  I: r5 F- j: c/ g# \三、分区说明% v! i6 F7 a& {( L9 D: M, a

( n3 V, [4 z5 \, u( O) p" X* K3 p4 _! P% J' Z

& \+ |8 z* E! ^3 O" V) |
% i" H6 S8 c5 I7 c7 @
1. parameter 分区表3 W$ |6 `4 E1 n9 Y  ]# F) H

  n; }4 U3 A, {9 Z# xparameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:5 ?' p- ]4 g% }8 I1 F6 I
+ u; R' a: ~7 L1 N4 u3 n; J9 S8 K
路径:
. O, Y! X6 z6 y& e) w( z% |$ e" c

! W; \' ^" F; ~, y! bdevice/rockchip/ok3568/parameter-buildroot-fit.txt
% M$ V$ v- [+ }/ `
: b) `% y. k. t
/ [, L  `# Z5 s- e7 k2 p

$ F" Q8 }1 R3 {; ]  I8 i- R

1 `6 ~% F" [" Z( D; \2 S

9 C0 G( ?" g6 ~9 S8 ?, k! [: c

4 W. B9 {% ]9 Y. @3 x) _CMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
7 ^0 b2 D" D/ \% ]( N; d- R6 |
/ k6 }- r+ b; F
; @# `: o  y" n5 t! I" X* ?

! N5 I) j- N2 d

( s2 W1 o4 q  [' v4 o2. package-file, ~: R! P4 a5 P: r( {6 Y
( X) y2 x+ f: Y1 j1 b8 b$ W, I
package-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。
" N2 j' k! C' w( L
* ]  M) K+ H& Z- A" }/ f  S
  d3 M- J1 L; d2 J0 N* q

6 m6 c* r- g: \7 O/ j( `
. V  L: \( e, ^
路径:: H- W1 s  j8 ^- H0 a0 |3 h
2 I) L7 K) A$ C& |& T/ S8 t3 D3 p) |
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file% l1 t5 B# c5 K# G- c8 R3 j
5 r0 O0 H4 a6 V* P: M7 @
#NAME        Relative path9 t# M! `+ q) C/ s

+ S9 Q; s8 f7 a% G% }9 X#) b  ]5 v# |- u( U2 s+ ^

* G# s8 c, E) G3 i9 G8 e- n* j8 b; f#HWDEF             HWDEF
  ]$ J- X# U$ \0 b8 F. B2 U6 T+ P$ Y* h
: |2 h7 C# O* I1 q0 [  n  J& b% q
package-filepackage-file
9 \+ F- L2 `0 a4 A

4 p! \7 G( b5 l, u1 e! Sbootloader  Image/MiniLoaderAll.bin
' c$ q0 F/ \4 r( @3 B! |; k' `8 C5 F
6 @% x, A% w- n3 q! {4 T$ E
parameter   Image/parameter.txt
; s! T( k0 z) d! @

$ J& A7 i- s. t#trust          Image/trust.img
- }% v. C. U! s( r! q) \+ s+ q
" }# U/ S4 G! R0 Y9 J9 J. v. }
uboot          Image/uboot.img3 }; {3 K6 E5 ]# e

& F, r8 X$ x& \misc             Image/misc.img+ ]3 r8 ?2 \8 I8 p; y: f
) W! v! v' I8 E1 Y& j: e8 V
#resource    Image/resource.img
; k* Y0 C0 w8 U0 @3 p5 j
" d) t* U+ d% V- ?; ~
#kernel        Image/kernel.img. x. Y9 X1 Q5 J4 i1 S

+ N3 Y: k" E. {0 \/ D- A" `boot            Image/boot.img7 F7 Z' ^- T  i: F' j2 s7 p

1 H7 y  u/ B5 E0 ^* n6 Drecovery      Image/recovery.img
' o" r* m, M4 X) g" h. _1 x

& s* [. r5 D( _; p8 f5 @rootfs          Image/rootfs.img' S! F5 ?; [- F- P7 b9 b, D) J
9 x" \3 g0 Z9 X
oem             Image/oem.img
; ]6 {  E9 m- I! i, X! _5 l

0 E3 @0 @+ ^% Q- g) ~8 fuserdata      Image/userdata.img
/ @. I. ?( Y% ^8 q: a  Y  f

4 i" I  h$ R( u: c( Q0 P5 K/ Q: y  F. U0 Z; l! a
% @. X9 c; k* E9 k) u3 A

  [- F3 g$ i, n, C3 B#要写入backup分区的文件就是自身(update.img)
0 L( n' _9 Q3 `0 B$ z
6 `) B6 _( {( w8 v2 w. w7 x/ \
#SELF 是关键字,表示升级文件(update.img)自身
- h# y3 O' l2 I  P1 M  W% L) q

7 R6 p. n4 m, a6 O#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录2 n) L3 R! D. N/ t8 ?) \

* ]7 a& H  g8 h& ?5 \4 z! u- N#在解包升级文件时,不解包SELF文件的内容。% F0 A$ m! e3 \8 R3 x+ \

& r9 _2 X( d( t: V6 J; j  A; b% F' O- x

* y$ i4 l! L) m, f, ~
% l% r1 l, y0 K$ H8 }1 P* c+ R; [
backup        RESERVED
; U1 J3 ]" n: u; h6 i- p' h3 u- F  }

: q8 d' r6 w5 C0 u! Y$ F# J#update-script   update-script
3 x, c, ]/ H/ p3 _
6 A! e6 f: I8 |2 C+ f8 b3 k
#recover-script   recover-script
+ J! u1 \/ m1 ~& ~' W+ x+ R; J" Q

3 Z, F* l) J( j- Z2 X) l7 g
# s1 g& q7 I: R  R& z8 k# G( x+ y# d1 `. @8 K2 {& w7 K

) Y* i; J7 B  e" e0 R9 s+ o4 u四、镜像制作
' W" D: F5 s  f' g1 w
& d% L, ^: i& J* y
' m: I5 L  K4 V0 n% H
8 i" J3 s( p9 D2 \) V6 D$ b

- h6 u- |* W0 N$ a( P编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。. h6 J2 n7 M; m# ~

4 `" Q5 \( X. h# @* Y) C
2 x- D" V9 C* a0 D3 Y$ U; ?5 e4 T" T; K3 ~/ E1 T0 `
  T" s2 F, _" F( f/ F' a2 p5 p
1. 工具安装7 ?  f  F4 B+ ]" @& \
) E; p7 F/ A1 l9 j+ r
下载工具包:
/ H6 V* }8 B1 }2 `8 I' F

3 @# |- M. b' H$git clone
+ d% b- C$ L7 K. |7 ], v# A% |5 l

: ~: O) u* ^. H" s+ [4 e+ A( ahttps://github.com/TeeFirefly/rk2918_tools.git2 ]) L7 F0 v6 F4 P7 q1 \
+ Z" _4 @1 D7 k

4 h, c  b, _( G4 Y, o! Y) i$ B/ u' S" {

( ^& Y4 ~9 D, Q6 t进入工具包目录:
# g% o0 n' _8 _5 y+ E* D
1 h+ C' b7 L7 b! ~2 A" o
$cd rk2918_tools: _# W1 F/ W8 P5 U% g7 M2 l
3 u" H- M* @9 i0 x) O
编译:
* J9 s4 ]& M* Z
- m5 ]2 b8 f) b) b* i" l4 D# P
$make: S. P9 ^& H( t, [: E2 f

% C5 M& S/ ~0 q& t( r0 s
& X) U# [2 a( X% `# o+ ?$ }4 ?& L/ Z7 r4 b6 r/ j
  M" r  e" G* r9 }3 ^

4 M7 h: B5 r0 q- l( Z将可执行文件拷贝到用户二进制目录:) W2 f3 |9 d2 ]5 v# [

6 K  K4 f7 @$ {8 \9 Z( W: J4 Q$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin. O  v4 w& o& S/ i6 f* k/ b5 v
. h# i  o1 ?( L( u
/ a1 {( U9 ?; d, H. j

! J- t* Y: _- e9 g& A. U7 [
8 E( _( x/ w, c8 M
2. 解包
9 M1 L1 S% M+ J1 A. c5 Y' b+ P
2 c6 c5 b+ T/ }3 Q) r+ m# t
将update.img拷贝到Ubuntu中,然后使用命令解包:, X8 C0 z8 x/ L; Z, b2 }9 Q

2 [; V4 S" F$ h& n" h$img_unpack update.img img
* T# A5 h: Q7 z4 i8 _3 m6 @

% c; V& m7 D- B  L/ E3 Y+ v1 _- w- j( ?) g$ k# S

$ K; x7 p8 u- y3 s8 l- r( r

2 ]1 V  q; s: B$ p

- G0 C0 \3 ^* `0 }% {% o" |$ X6 n7 R& a  @* @3 c

& k; N. o5 ]5 A& X: X. I* J! q3 a

  _5 f/ x$ _' F# g" p  v1 t解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
* G2 K4 y5 |3 U$ p% ?5 P

8 v* u% K0 r8 A/ e+ B$ C6 w+ o9 b; P" m8 J- F, w. S: P
! i- a: j: L2 B% S1 e
5 n# ~- X6 L* u7 B
4 m, E- P- {8 l
! ~6 k7 O6 O/ y
# [4 G& l9 U1 h1 m) H" }
5 H" Z* Y  y0 q7 l- r; X6 h
接下来进入到img目录,使用afptool-unpack 解压:
/ u  r# r* o7 x' C/ B

. y5 a9 c' l" H* s4 k7 H$afptool -unpack update.img update
, V4 {2 e7 K! w1 [$ L7 c
9 T& W& |9 P, a! h( E3 q8 t; n
- q" @) Y4 y+ W3 |5 S* D
& X; X1 y+ u5 @/ E! D

5 l, x2 U! o: K; y& [1 a% P: k8 B' Z
# K, T5 g0 J& {* J9 V0 W. b' z9 {
' f% B" g5 U2 W) G
解压到update目录
3 y. Z, }0 E& h
$ Y3 A, r. c& X  X3 C' o$ M/ b
打开update目录,里面有很多img文件。3 d7 M6 [7 @* n  @5 R5 b
6 }) P. D! X5 F% [
; C) b! l% O) n9 `% W  K

/ j" b: n9 V& u. ?! e

, U! ?& d2 Y* N+ g将需要的文件复制到rockdev目录下。/ n% T- L- S' i) v  I: q
, ^* g7 M3 B- b! e

; Q5 B: [- `5 ~3 _! d% p9 f0 U1 x7 [. A9 v6 K9 Z) K/ U9 \
' `$ [$ K) a: ^/ T
3. 合成update.img
1 w  u: q% F0 f
- ~! j& S* [) z8 {
然后源码目录以下命令即可:3 R) V7 c) t5 F; ?% m

! X( }; W9 t5 m% Q" W$./build.shupdateimg2 K3 n$ ^) o0 g9 {- o2 J/ K8 ]. H

2 @* V9 ^8 v, v! W% i$ g/ H; c  _+ m
& X# N$ B  p' n$ f# R3 _
2 y5 |  F  U2 r, W; c5 M- v
2 M9 `/ v3 {" U  K1 D1 \! P

该用户从未签到

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

该用户从未签到

3#
发表于 2023-5-22 13:11 | 只看该作者
3 J* L3 L" `% F! p) M. M" n9 i2 L7 ?' m
步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-16 05:02 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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