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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码8 C( i) A# K5 a4 k

6 w# j$ |) U- k  d7 S$ {) E% H* d) ?! v" f6 h, h- |# I- S2 {4 V+ E+ V
! V$ y; [$ N1 K- }1 r2 m/ N9 H
: X  C* \1 C0 w( F0 {2 o
1. 创建工作目录8 @7 b& {+ X3 e7 A

5 `' q2 L" Y& l+ _- {  k2 q$mkdir -p ~/rk3568  c& U7 w! r: \" P1 \5 Z

8 U2 }! [# `2 [4 l$ |5 u& E0 V* C9 Y# R
5 }5 ^# @1 p: A. c  P
6 m( m2 L7 D0 c9 X1 B
2. 拷贝源码; F, a+ L& {! F

- K. R+ p. E6 _: s/ Z: S( |将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。+ g3 {! \5 H) W9 L8 m' N# M
( e+ j" r+ ?/ C! @, k/ O

: B, s% M) m4 ^# @& r' v" A- i/ Y/ E3 l% n2 {  i* A+ R& `3 @+ Y
8 O$ V  O! k; M
& C0 C% l, g6 b& @# w4 g2 ^& `
* U. A$ Y: y5 d, E2 Q
; M" x' a* S' F  w- d
$ X" K7 B- m  {, m
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。
& B7 K% z9 D: j1 ]0 o8 F/ S. V

4 ^+ l$ c- D* }" n- u2 q9 k  k/ P2 k. R, t! ]" O' Q& e

0 ]  Z+ ?1 Z4 Z. O8 x; R
, O4 W8 c+ O$ f/ U  F5 `# e
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。6 g) e5 `: Q8 W' k

7 `/ J% `1 Y. [- @+ w1 o! `9 w$ q& y

9 X2 P$ \& P3 W! b" z! Y  r
6 A" `! Q) ~6 g
3. 解压源码
: X, ?) h2 y0 g" [( j

. g9 u7 w6 y$ K# j$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2, r5 ~  l; p( G, _3 L8 R$ r9 ?8 E

- L& ]: W# p3 D; C" }, F: G6 O$tar -xvf OK3568-linux-source.tar.bz25 u$ N  z, Z6 i* }% ]$ H

$ f  a3 d' h7 H. s- C; T5 A
; w2 F/ C, n! M( }
  `- e% y  F1 y' o

0 q/ g1 q, R  L+ q$ ?耐心等待完成即可,解压时间有点久。
' Q* g/ [) W: d, T( e* g
% Y! C0 `. [, E; [  ?
$ b( v/ b' |, J* V; _+ ?6 q8 B7 F

- u8 l8 K  C% c+ z
. i  B$ {3 N  f0 H
4. 进入源码
( ~9 m6 m1 X. F8 S, J5 V3 T8 d
' ~; Q3 q$ |, K' o( [5 Q& |
$cd ~/rk3568/OK3568-linux-source
* f8 z/ y7 M0 Q! u

3 y! {2 t; e% o! n. {% c目录结构
+ U4 k9 e  V7 z+ j4 G9 C( i$ z
* e1 `: f# L- p0 B6 X6 t$ b0 L  G. M

$ h% V* \& n% r; n( v' _/ r* R2 L! f$ w& G9 `; `
" v( v8 z- M2 T* `* b

9 p9 F1 L2 c* H% @/ y* x7 \1 D" J9 F: m1 |. T

* H6 z7 z5 z, a& p) o- G二、编译SDK! e# ^5 p) B  T: }0 p- _

- _$ h: P7 e& j1 u; }
5 E! [" V7 O9 ~$ o! B& {& s9 c2 z5 O$ M, O* i7 ~7 C0 w- y2 L/ B
6 Q6 o! \2 p$ \
1. 编译前配置
7 r1 |2 d- W1 N" I5 Z
$ j" ^/ \/ E/ T4 `
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:
/ p  i* _5 K" _1 t6 S5 d
9 s" i  Q) z. l: l. s
$./build.shBoardConfig-ok3568.mk  . x! W5 `/ Z) d. d8 y$ q6 ]
6 l8 M2 t* z3 K8 K4 D1 o( b: P8 \
相关配置介绍:- ^5 {6 p6 l4 k0 ^8 M. j
& G9 p# \* h% _: k2 @  w

% J, w/ E! X4 ~" b9 C9 Z) F9 r0 [4 D: t: @4 a' {( ]- R' |
( c% j8 a( U* V4 P
2 V7 T, L1 Z9 s+ Q% b, ?$ p
5 ]) ?0 ]' q8 ~, P8 T# d/ Y

1 P' Q0 i$ }3 p, F. X/ `( h- m5 J  J2 G2 p: l( ~7 `4 l

: k. p3 c; Q" C4 i3 @
: ~/ L# Z) U+ F8 E5 k. W# [) c/ s

' e& l7 q9 w3 [2. 编译: O# Y9 ?* i3 I! [6 I0 u0 w

: |* L' l, `- w8 p; Z编译u-boot- R4 ]1 O( a0 c& F+ i

7 h: N$ k& U9 k- p5 x0 C( Z  a$./build.shuboot- B9 h6 A4 M8 ?1 @

$ G, |1 `$ F! q0 ]- L. `% l, Q) Z  o9 V" L
( {3 s! Y& i2 x& j6 Z

; M/ F: @0 b' j* D
" d1 L5 i# Q; m7 x4 K4 H3 e% \
  \3 B! m. h  o& _8 w" p6 U# y
% ?4 P4 w8 W" k8 j& q
……
6 y+ a6 s3 ]; f; Q$ ~9 o* f
$ G; |+ b. V! B& Y; R' H5 ?

8 W1 e0 X$ t# U: \% S6 C
9 x. Z* a) w: }* f1 s! W
5 g5 |+ Q7 K* S4 U9 y5 Q; O3 W
/ r! g$ `. p- n& U: F
: y2 u) i2 }+ B" H
9 V# ?! d2 Z% c8 k! J- m
( G% H% W/ u9 O
编译kernel/ H4 Q  r9 O, g

8 u  ^, C! I9 E+ p9 N0 t& B! U$./build.shkernel
$ w, d5 f- d; M( M6 Z

% `6 X  n4 p3 t3 ^' G$ |7 V6 t8 \2 v  Z& E+ ~" A, D& c

9 h. n  z& n1 A: I; l
4 O" T" l7 Y% J# p
% h7 M" b! P; j, U8 O7 K

# b9 |4 b6 z0 N, W! w( I9 k$ h1 L
4 c; L* ^7 v( X" Z: c4 r) C, v6 [+ h) r* g

2 `! \0 Y7 a. k* x/ `/ A( E7 {3 a

( r$ g6 y0 I' U# T' x……
, X! Z! W% q& g8 h
! i! Z( O$ j# t
* n+ Y0 O. e) k4 D
& x* C1 k: w2 i9 }9 {# L
9 r. v, w% P! j* H# ?# O( R" M2 y

' g4 x: L% l6 s! F( ?$ h" ^
8 w. N/ _9 X! g: W& q2 [9 o- t$ |7 f! \3 E
0 f( G1 i& z. @( Y( d! b

3 i% z7 Q0 ]* N  w7 M1 ^4 ?' ]+ c【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。
# r# b7 v: G; ^# f$ r

8 t, y* R0 p* S" M' s4 T, b- _& z) {3 T3 j. ~5 `

/ |4 N3 I! Q+ X6 p  r
8 a" N6 U0 S; n1 B3 ]! h

+ p4 O1 p4 Z! O* }9 n& P- R  U9 a4 T编译recovery4 ]3 v  G: i, [) R4 i

; |. l: \' q( ]; t* Z" b$./build.shrecovery# V; x! E, a8 {) x4 ~1 `0 l

$ |) g2 B; P2 O2 R* c! g4 _" ~  g( C* @/ J" g3 ]  Z: c4 h
7 U: U6 r8 j3 h+ u0 Z/ X& R" Y% _4 D

2 h/ l9 w) d0 i1 P& z! b; O; a

2 f  S) {9 `  q$ J……
% V) Q0 y2 P3 c( K1 o# t

8 x) T, K9 s; v
& ^  z& ~, D: u) `; d. k( ~" `& h5 K, R" X; ^
: d+ }5 s- u* T* z% c' L( q6 c) O9 t
0 K8 V) |- |" j5 Q7 D; b
9 ]  C( g& h6 ~6 @% V# S! }

. C/ l3 R4 m& O6 n) A  p1 Q& @6 ~% }6 i; r, H
+ |! b9 X- k) h# n  e3 F" Z2 ?5 x
编译Buildroot根文件系统
8 W* W) d5 f) P1 o/ E
' h3 p( l# V! }1 E% a
$./build.shbuildroot
" w0 n0 k* x7 g% q

. {$ W2 M  H* Z9 d7 d! U' W/ n+ ^0 j) K
: X3 ~  B9 T7 S& y9 Y6 R" `+ Q
; I0 i2 W9 W$ t+ u' |  N& Z5 B

. L4 R% |0 }3 p, D; N1 O7 |! ^' ~

* b( X, j( L. S; }! I制作文件系统的时间会比较久,请耐心等待编译完成。
  k$ k! x) a* H6 N3 G1 p" V% k3 F6 ]
7 W. Y3 j5 m/ n  _1 ^2 k

' C& H! w4 M! q! w+ h% `. g7 @# y6 e( K. N- d; Y/ R

* g, @/ P# g/ y) p" z* w. s1 |! l0 d【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;9 Z/ y. S& L( K
6 e5 l/ Y0 d/ R  P/ y0 m9 |
【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
8 C; h/ i  `9 s* O6 x) X
% B1 d6 K& t) m/ h

) E( J) N, Q" z( K/ N* J0 h& P) |4 h0 D8 g. J8 O
. }. k3 E$ V* m1 n" C
3. 打包固件7 m" ^7 y% U. Y* N

: E! \! ?8 U/ y$ R4 A更新各部分镜像链接到rockdev/目录:
: u8 w) T, O2 q2 ?7 q

& g; D0 ^" F3 u- U- _' h$./mkfirmware.sh
9 b7 W3 d) t% c5 G
( S9 \1 w3 ^: k; S  Y
打包固件,生成的完整固件会保存到rockdev/目录。1 P1 C( `  K6 d4 z( G' r, U# X+ u

& w; d, k$ R! @: J- Y$./build.shupdateimg
1 S" D; k2 \0 n
% }% r1 Y" {5 B2 W# n5 [

" p. m5 _+ e" J4 o" U% R1 a- w* I: i& S$ U* X* U& Y

# G! q' p0 F* D/ P7 j. ~2 u+ P

+ f, H! r' L* S2 ?  X
3 ?" {) m. j% F8 c& j
[PS]全自动编译
0 X: W$ L. U% Z! r# n
1 T$ v/ m, ^# R  i, T
全自动编译会执行上述编译、打包操作,生成完整固件。
+ x* {0 \8 B$ p" ?3 ~

, B' {$ ~- x2 a& g% Z$./build.sh
3 S0 K" m# o3 E/ {/ N( ?5 L6 Y
) S8 e( }( Y9 i5 a2 t" u
* o  v8 y, L! l: A" V
% _# s1 ?8 D3 g3 }6 J' N( h

# D* _1 h: j  V1 c* s
6 t& T' a( G. Q" b; n  f# n" ~: k9 r, n$ d9 X

* Z2 r! ?& p; E5 I6 i三、分区说明7 U2 H9 l& ~  M7 _/ `1 i; ~
9 r5 Y4 r8 v+ T+ T; V
! q. ^4 m8 v2 E, ]3 u4 m# z4 m

3 v) {. P* B6 ]+ o6 [

" N; u8 ]9 i8 g0 s4 `* y1. parameter 分区表, t. i' Q/ U1 q0 k
" O3 v. [9 H5 k$ o$ Y$ e1 E
parameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:: C% X' |5 p! O" b
) l# L' b; ?: b6 j4 ]% i0 k  E- R
路径:
/ \5 Y& b; q9 ]( s5 _8 W& E* C& O
6 ]' S- \! ~- y! I
device/rockchip/ok3568/parameter-buildroot-fit.txt) |4 n8 y7 B# J8 h

0 x% l4 J+ m7 {# E+ r4 K
! U6 o0 N2 N) s# D$ b7 m7 J/ h
) w* Q- b, r1 o5 ?! w

: c) H3 N% U5 _3 X3 z

6 L& }4 X; i7 y; n2 R, j

0 f4 ]; }+ P7 x* UCMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
. U. |" d' ]* Z' v8 A/ k
( m7 p, L& ~/ k# i0 j1 R# z
% I/ p* Z5 w3 `3 g0 \! a1 b/ T/ ^. n& X

9 y7 j% q6 t+ \
( ~3 n' O  o7 R. N3 K
2. package-file
7 B$ {9 [7 _3 p* E( L* @* x; P) I- ^2 F

$ p. j& ^5 h5 J9 N5 ^package-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。  S; n, m- ~2 ]& P9 l3 ^4 r

. r. D7 _1 Y: ]6 j3 w6 f, e' K8 `: o0 w5 G7 S3 M
! ?& f& `" m/ G; u

; J5 J5 u$ }) I0 P- f  |) P路径:
2 j% f* w0 o1 F$ q+ x; j
) T! B; a. i* v# ~4 k4 I
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file
  _# Y# `1 I4 @) H! ^

6 R6 I/ |$ Y: a# _  ~#NAME        Relative path
+ \6 l4 [: r, a

* I4 f" }" x5 T4 R0 b4 e2 S, p#* S" F( O2 l/ r- D8 E

! B* E+ |9 F" g/ m7 S, C#HWDEF             HWDEF
3 a  f2 H1 u+ I5 H( |0 S, i

9 f# D6 D/ Y2 j$ }& J  c# ^$ n+ ?0 epackage-filepackage-file
7 q% U. `  q/ S1 \& c; z" B8 p
2 }1 }% A4 I: e$ J; V+ M7 f; \5 ^
bootloader  Image/MiniLoaderAll.bin
4 i& C. P' x0 T. ~
6 z8 t! F% Z/ Z4 j* M3 A% Y) x
parameter   Image/parameter.txt" O( m7 R; i. E9 M( M& V
( i( Y1 U* z& p! y1 }
#trust          Image/trust.img
, l) H# Y! W5 z+ h, @0 B. S
6 l$ J. d; z! I$ |, _5 w9 v4 a
uboot          Image/uboot.img
$ ?3 z' C+ T: Q7 i$ f8 f& G

/ P4 S) p" E! x: v7 ymisc             Image/misc.img
8 t" N0 G- H2 d5 x
) J/ S% \& r2 v5 F6 Q0 r" e
#resource    Image/resource.img
7 n0 X) G6 I" {2 i- x) D

8 W8 ^/ ]  {# A1 Y+ ]#kernel        Image/kernel.img$ C6 t- E, G) e3 z' O' f
! A; _! W5 c% S9 F  ^+ m/ C
boot            Image/boot.img
" m9 {+ @6 h2 K# m
$ ], u1 U: b6 E6 v) Y, s2 ~
recovery      Image/recovery.img
! v: f9 u* g2 y2 H
, B) L1 Q4 C' C4 v: M8 ]
rootfs          Image/rootfs.img
) P- B8 U6 z2 c4 r+ k) z+ z
2 j6 T% F8 a& N  b& i) X# Y/ b# X
oem             Image/oem.img
) `/ _8 R# A8 M1 w6 y, `% |5 l

! u& F7 Q& f  L. J; L' V( }userdata      Image/userdata.img
3 Q8 X. X% O6 {

9 A' M7 P: D- q: N
# s7 l, m" P8 S% Q: Q* ]6 r: [# O
& b7 \# q% a; ~4 C& l3 t6 q$ ?; }
#要写入backup分区的文件就是自身(update.img)8 F4 J. i8 _! f0 ]! N
- C( V- s/ z: U) i; G6 _' d( }
#SELF 是关键字,表示升级文件(update.img)自身
# ^8 m% d4 o% Y
1 ~+ \6 ~( {4 Y  w( }9 @
#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
) C8 P7 L: Y0 }5 p8 p- e
$ N# N; a: }, S& N3 T/ \  h, f, W
#在解包升级文件时,不解包SELF文件的内容。* C7 }& L$ D7 T+ l

9 H) S* t# d: d: ~1 y- L" t, K0 F: P- K9 H" b& B& }+ W

/ b0 p% e& v. P( _8 x
$ ]9 ^* e- c7 M9 n! F) E/ N
backup        RESERVED: n# M  e/ m. O
: G4 |/ x$ B. x* i
#update-script   update-script
0 e' R$ |. E. }6 e- c5 M& f
" o) G8 @; _9 Q' z0 Y, Q7 C8 D8 K, t: c
#recover-script   recover-script
# U; c- f9 u( W2 O2 J

* E. v5 n" e6 K
: C" @1 A- @2 ?/ q
; d' e  j! [- B* j6 B1 L
' N! L9 R! j( g' ]
四、镜像制作. m9 T; q' [/ l, I! ?9 e
! v1 Q. f2 u% i. G) Y, d4 D) j

# \  `* ?4 J% P% x) a- w
$ b9 c( z3 }: r$ H
' s( k2 p  p3 H( W8 p' E1 h
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。6 v+ c+ A( d/ g% l7 N8 S
/ P- C' C7 ]+ a
: p% ~8 ]+ w8 {, m6 w( y  J, }6 w3 D
+ T7 n, o8 x) R8 e

; B3 X) w( ?9 |0 \% m& i) v( o" k1. 工具安装; j$ t. x) l9 n8 v
* ~7 t* S! O3 y8 n' m! C
下载工具包:6 a8 P* L9 M: x1 k! {/ I0 A
) r/ E) T0 d5 S5 N/ H2 p5 E
$git clone
9 ?; T+ d& Z3 O# i

! c, l; I2 D- b& C& Khttps://github.com/TeeFirefly/rk2918_tools.git2 K; @. [5 x8 l  `( s5 f5 H' ^
5 [7 ^+ P2 y$ S+ K+ Z

9 G* }9 r' p  v1 V- K6 u5 E
, L$ b/ v; I4 d& a3 z
; z+ ~$ }& y% a, _
进入工具包目录:
/ Q$ ]/ q4 z" ~
0 R0 ^: E+ t3 D6 b
$cd rk2918_tools
. N) Q( J: k, M& M9 l# ~& h3 ^! ~0 q( n% g
) `, {7 @! D! H0 N- P) @2 E
编译:
% k. h( @: m" ^- }5 Q

) b$ y& L) ^' ~$make7 P3 u0 a2 ^4 F
; \  S) D* M! E1 m0 j

) L: m0 X8 I/ {; g* s4 W' a2 `- {$ |7 [

6 z( L; O5 X: N" L/ [

/ a% D* y' o* i' @3 @' e$ X. Q将可执行文件拷贝到用户二进制目录:% C) B" q2 X+ D$ D& z7 c( i  f

- K4 k! I# R; _. s$ B: I$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin; C0 C% f5 L3 a. ~

' v4 d% o: L& \/ h: J# Y9 H
& |5 Z$ V5 ~, R2 k% d( n* s6 A0 b8 C, m; ]' D! ~3 x( |

5 q5 W% Q( a- n8 b2. 解包' E! V' R0 U% d% G7 m, \, A$ n& `

+ |. u" T* _  J! |8 @- S# Z将update.img拷贝到Ubuntu中,然后使用命令解包:( u3 D+ A% ^' a2 t$ L2 P

, W- o8 C5 ~8 G* E( f) P$img_unpack update.img img
' _+ F. Y: [, [2 }

0 a- ]5 `0 o% K) V
0 [, C3 U5 |" b2 `2 W/ t& z9 g: O2 k' J3 U
( t2 G7 S9 O# o2 ?5 X; S3 }

6 L) B2 g9 s/ z5 d# ?/ d
* a% h. i- H# A5 E! O6 J$ ^% m9 ]% d( @+ j

, t2 x1 P% Y8 D解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。
( d( X; F5 Y" G: V4 f" ]! Q5 g8 E
/ A& Y! O" W" [8 z1 z2 j& @- G% o

! d$ k2 d; H7 Y0 m
' K% c1 H$ L. \( E
3 O% C) j# Z: T% u7 Q
; c6 ]2 x# S1 }2 s3 @" i

% ?, ], H$ N/ U  v
' Z( ]7 H) P( W: g5 g3 T

7 l- d, w7 C$ n' [4 l: l" ^3 @  l! [接下来进入到img目录,使用afptool-unpack 解压:% k+ O' j2 S' m) f: @1 j

3 V3 Y5 `! G" l: K5 \$afptool -unpack update.img update
* t# V3 I& a  p5 S
) _: a/ q' k6 W# {, `9 x

& @' _+ g: c9 h  o+ Q5 B+ }
# G* p* v% T2 x

7 P3 W2 C' _9 z  }2 r6 h

& \. q" W9 i# t# L5 q" p8 |# Y; x
( U- l  Q2 I, e% n$ z; ~% o
解压到update目录
9 j, W5 W8 m* }6 a
5 r' r5 F: l& H1 C% P( D
打开update目录,里面有很多img文件。' R) }7 R7 L" p3 \

% O! C4 _( l! q0 p1 r3 f+ b/ f6 X2 w' I* I) ^
' ]7 i' j4 E7 u$ C) v

6 o0 f; J2 a$ f将需要的文件复制到rockdev目录下。
" a$ e$ w8 D! X8 {

/ C5 {1 F% M; }2 b& I# y+ a, z+ R7 x! y$ T+ u) W) H& }

6 P$ v' \. \% I& g$ C" X! g
! P0 G0 U# m6 y4 ~' W
3. 合成update.img1 d% A! o+ B& R8 I

, q; G  E- f( Q) k; o2 l8 K然后源码目录以下命令即可:7 A: ~5 q% k& d! k

% L' W/ j3 M5 I3 ?$ A1 l8 Q7 V+ N$./build.shupdateimg
3 l, |% E3 O# A7 W$ I2 v

5 N6 ]0 ]" k. M% D
2 a! J/ M* }1 [" f! ]0 g8 l% Z- O7 u2 l( d9 N1 ?  ^- B

4 }, T$ [9 k& `) g5 f

3 v1 F% b& ~# t; a8 k& T! F9 q0 _

该用户从未签到

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

9 J  D7 I  U9 N# J/ N7 t步骤很详细,要是能申请一个开发板就完美了

该用户从未签到

2#
发表于 2023-5-22 09:54 | 只看该作者
步骤很详细,要是能申请一个开发板就完美了、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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