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

RK3568开发板上手编译源码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、准备源码% B# S/ G0 I) _( P2 Q
4 [; G4 M* ^- d! \. l

. q" a: `; V4 }. X/ z4 @+ r+ u& S. w& Y" W; e) d
4 ?( c# A* L3 s* f. G
1. 创建工作目录
! E7 w" k% ?6 `
0 n, Z6 h0 I8 B6 ]) n: t6 b
$mkdir -p ~/rk3568* h& D, x6 O3 N- n0 x5 z. r
% V" J' G9 `/ Y" ~- n4 Y

, b3 G- f  s0 ^- k
2 i5 W2 d( C: ]5 T
& z8 E9 ~5 I, x$ s0 E7 q! k
2. 拷贝源码
$ O- q1 [6 h$ w. f

, m" [- H/ F1 \. F3 [6 M将RK3568用户资料中的源码文件OK3568-linux-source.tar.bz2.a*拷贝到虚拟机~/rk3568目录。
" P3 n: k  m4 P
0 x0 E% L0 r7 b  H; a; Q, h
4 B) R9 L) i( A' C* S
0 y/ w" W# S6 E& N& W
0 R* D5 ?8 n$ C1 O) c
( B  w! h+ ^& |; \' J

* c# Z. o) Q! V' w7 N
  D) y- Q: j$ i9 w* Y. ?( G$ s! R' J0 q8 E- m* _, s
拷贝文件的方式有很多,笔者使用的是共享文件夹方式。4 m& B0 D/ I6 @# Q' e
8 i: Z0 M  d& ~2 J/ l

2 o1 W% \. D7 b/ B
: B+ _6 ?4 j. F  c( Q* r
1 C) k! n% [, B/ M4 G: r
【注】OK3568源码使用分段压缩,每段最大4G,这样方便拷贝,因此有些存储器单文件最大支持4G。1 L: t- P$ H$ B0 E* h# d, M% A+ m2 l
" [# I: U5 _7 T8 u) B6 K! B

, A' Y& B: x  E9 B4 `& a+ F* V# W
# ]( S* @& ^- l7 s# T, Z

' s; w" ~0 S! k# g3. 解压源码
) H. P9 o9 h  o8 O

- F* D. T7 Z& A" K% X0 b$cat OK3568-linux-source.tar.bz2.a* >OK3568-linux-source.tar.bz2- ^# V7 j1 T/ r4 i' f! W' ]
  O. V- o* h3 J' p: E1 r: P( o1 m* l
$tar -xvf OK3568-linux-source.tar.bz2
% I( P! U7 E, x) G, s
( i, s( N, B" U& M: A: E/ v* {2 m

5 j: x' p% T7 S- F% a! w' c4 S4 `) f) i# \( l- W" K
: g7 s" K1 g( K* d
耐心等待完成即可,解压时间有点久。; M+ v9 k# V) G  n1 S" f$ \: @, A/ R

% M( o5 G+ n" ?- j# p* [& q3 K1 W1 b" X9 X5 b+ N' |

! g. w6 f! d2 }. P) S- h
0 A& l: O5 ]- C0 T& R9 w
4. 进入源码0 `9 M2 q/ ]9 Y4 N

# g( |$ V) L3 d( K! o% B. A$cd ~/rk3568/OK3568-linux-source. W6 o7 u' }! ]7 m; \/ u3 V6 M; b
1 B: t& a& H/ o, K$ S! g
目录结构
; o+ V; e8 g0 D& n
# d& }3 l. z2 l2 m0 [" R9 \& ^
+ ~- w2 m/ p: z: T3 D1 k
1 B0 `5 O- p) e' w  q7 r

- ~" Z- F, }$ j% K* v, `6 s
( D# c$ s# {' f, W
3 \3 q6 j: B3 S9 ?- F4 m4 [, @
+ N0 R8 l# r2 N' V7 b6 ]
二、编译SDK- [* B* U9 F4 v8 p( I

- `- l  P: S. p! C: ~
7 B2 T/ d' K$ J. z: q
5 z8 g* ]) }, r2 i

8 r1 a7 z9 Y/ o: s3 I" V. X1. 编译前配置
; ~) V- [! {& j/ \: n
; e. p; i0 N% J( g7 R7 Y  ^1 o
在device/rockchip/ok3568/目录下,有不同板型的配置文件,选择配置文件:% ?" k' g8 j! a, M, N4 Y

5 ^8 r( T! L$ D# H) Q$./build.shBoardConfig-ok3568.mk  # j) V# p8 C5 e$ r, W
% {* p+ j" J" Q3 l1 r- [* }1 s% e# [
相关配置介绍:
. B; e3 A8 l/ k

! X/ p( z/ u6 S6 S/ [  F7 c
3 ]" T1 o2 e( S% q
  K2 n' ~' x  U, k1 F3 G- H" F7 j  K

  S" r3 {. N8 I, }* [# N3 w9 B

0 _. J/ `) \9 v( G  M6 A& I  G2 R3 L* }+ v% Y9 }3 T' o

  Y2 O% B# T5 ?& N5 S$ f& W! @# r; i$ u2 a7 M
, k5 B. `5 {8 |8 M8 I% J

  M: e/ X, Y4 S% G4 C# l& U$ I) N: q

; A/ w5 K  v8 Y- u* L& G* Z$ ]$ U3 d2. 编译, {9 B) J8 I% T: }1 N# S

+ q, H: v6 c- N0 F: A3 p2 e9 E编译u-boot# L& P+ R/ m6 A) \* v3 U* P% _

9 o2 q7 T+ a; z2 l$./build.shuboot" e% p5 r9 O$ B9 w6 K+ X; D* Z; O

5 S8 ~% {2 G5 F! t: G4 T) o: ~' S* F* k* z% a7 ?% C- m
7 `) d2 K; I: `0 K" N

  F8 M) {5 S! ~! @5 F+ \9 Y
* F, Y" n- a  H+ W6 b# @$ p

; y& U( q  r; |: n+ H

' F! s( K$ H1 C( _( Z! z  {……( \5 F$ {7 _) Q7 C. z( w

" H# T1 _: z1 C
1 ~* p: G7 @2 D3 U" W6 ~( U  |5 G- q8 ~6 O. _0 u1 Q
9 |; |; x/ o. b. w% `+ K6 K! X) J. t
3 ^+ T% q6 h( ~; V) S0 d0 G- d
, z3 w0 ]: x8 V# d& L
! ?" Q# U  ~. G6 B7 v6 K8 [
+ H" }" D$ \8 {, a
编译kernel4 v2 @3 U# I! A' i7 t8 @& o

, H" p2 ?7 V6 n1 y4 c7 z$./build.shkernel. u) p9 B5 O1 {3 O0 E, c: t7 V
9 W$ x& T% s# p# b* R- o

6 |( c9 J% E- `% O. [* F" @1 P" X! j! N  [' R

- i/ C% R+ J1 Y& y! i5 t
$ x% V) M9 G5 Q
3 [4 V; }* U8 \; A

. d4 f) u; |& X- n& g6 i
3 ?% r9 h3 R( L# y! J1 f' S! F
+ _5 L/ Y$ ?7 H" a+ q8 J4 J- Y# W

, n- ]7 k! G' N  Y: I……2 u7 J3 f4 b& D0 `9 y5 p3 `2 R

2 R8 [2 i- ~$ w3 q& ^
' ?& ?2 ^# X% P  d, g3 z7 Y2 `4 O/ X8 o4 Z9 r0 c5 Y- m0 Z$ H

) q( l! ]3 U% X/ s2 x

; E4 A# R0 F; C. x" t  {) i
. N0 o7 [7 `9 {( {$ p* J) u" ^) a8 y3 I, S& |4 E  n

& G! T: ~4 H% {& i$ }# ^/ x
! y& L# N( j# t" ~# p" Z- \
【注】编译一段时间后会弹出下图界面,需要选择,提取图中信息,VCCIO4和VCCIO6选择1800000其余选择3300000,使用上下方向按键选择选项,按回车确认选择即可。) k3 J3 x1 L6 K- W1 C

; J$ ?. F5 I' \% M9 E
9 G: m, Q1 P! ~5 X
( }* n9 s' C* Q$ `$ J- w  L+ K

! z# \+ K9 D8 r' C& k" T  [
! b# h" d' p; {) K
编译recovery
$ D7 `" d7 V/ F) h9 W1 M& e  F

  n! s# ~: g' j) B6 d; h$./build.shrecovery
- q1 |. m: g4 I" Z" |0 ~" g* g' Q
. M; v# M" t5 h
- u/ ]$ n4 f  S( m
4 e  F0 Q* n, L% f, t: p. a

0 r- W( H5 z( C7 C$ P& r

5 v( w4 [7 F7 n8 J……
& u6 s! v! w: J& s( M; X% k

# H6 \( x0 G: `  n* _
) g. T7 a2 {9 B0 K$ Z
  d, L2 o9 P# M

" Z0 ?  L8 y$ l0 F6 j% C, ]
2 ?+ @% u& \5 ^: O; P

/ n" Y9 b+ m* p. ^4 W, p# z8 |0 Z/ C6 Y8 K# N: l/ e0 h
, O+ O  Q0 }% x( u

) P- O/ D" C0 s. a& e5 ~2 {) l& r" W编译Buildroot根文件系统4 T$ y# C, B7 ?7 k! B# ~7 Y
9 E9 M& Z( G" P9 ~/ E
$./build.shbuildroot
5 U! G* e6 k  w. G" ~3 A7 ~

+ y7 h: r: [5 G9 n6 [7 m  c/ b5 [2 j" Z; l0 n8 M: X2 o

% i6 |- B  N$ N, i/ s1 G) R
; N9 R$ \4 @9 X  ]! R
1 h2 X6 @$ O" |( {' G7 S
- \% \9 ^8 Q3 |; ?& w: L. G
制作文件系统的时间会比较久,请耐心等待编译完成。
7 `9 Q; f& f6 ^0 L2 {" g" K
- G6 ~1 b4 T3 x" M: D

0 A) ~) j7 o0 F+ @& U; y: B$ Z4 F# D- n8 I$ }+ v! ]

7 g( l1 f: c' e1 M1 g. ?【注1】确保作为普通用户编译Buildroot根文件系统,避免不必要的错误;
/ y2 w; K8 u9 {8 Z; ]

, l/ ^& s8 T0 ~9 S【注2】如果不想编译文件系统,也可直接从已有的镜像中解压后,将其拷贝到rockdev目录下。
! Q: ~! E5 x  \% F6 k
' ^9 Z( _# |$ i6 U2 `' `5 `0 i6 N  L

0 E! i9 |( n4 O3 F
9 l( E7 J/ @' S6 y7 a5 P
/ B5 W$ M  Z4 P/ o1 I. s* O
3. 打包固件
# y% r* g' Z% ~3 E! z! o# E9 B0 W

# I  g  I4 m% J' \3 P更新各部分镜像链接到rockdev/目录:5 Q/ R/ I, c2 ]& v* h
6 T1 t7 T+ Y& }5 A
$./mkfirmware.sh
; S& b$ ^! \! n/ e& m2 i+ r& o$ p) ^
' x9 |% }+ Q& p4 d
打包固件,生成的完整固件会保存到rockdev/目录。
/ \/ |# N! E1 M. a; c7 Y. P

% p' B4 X' [8 o& m  c0 Z2 T$./build.shupdateimg
! Q" \+ S3 i5 Z- Y

2 r# l0 m1 x. {3 N+ M
; [! s2 q0 O4 Y! ?2 p9 \( m* [! v3 h# P, s  m7 S- e3 b" @$ L  _
' x* k; t5 b' ?+ }# K: I: t+ A( l

0 t8 o! N7 Z; p" `5 q
, r! ~& `8 o+ }2 B# n- B" p
[PS]全自动编译
6 a" O% v, V2 Y& ?0 n) `$ J
3 T7 r3 I+ M9 A) K, w# v
全自动编译会执行上述编译、打包操作,生成完整固件。2 U5 |' D. U( H

6 \, X. j* s; b$./build.sh1 ]& a4 A! ?  c/ O

, }* e# C2 B5 }/ Q3 `0 r- q  A$ d. V) ], n/ T
1 ^: Y* z& b- |
* a: T0 w( g, z- m! w, d
8 m( i8 R7 g. |3 }0 ?
3 c3 w: b: c% Y# {1 x. X
; l8 L7 h& O- }- W: i  l
三、分区说明3 i& U1 P9 Z4 \+ c9 a
/ O5 R6 ]; E6 l6 G& |2 @

' z) C$ E& ^( Q( M* a
4 H$ G" U2 j6 q" a' h/ [

' C8 C4 Q' \# ^+ U1 ?, T1. parameter 分区表
" n) G% l! u; D9 g8 J0 h  u: G

  ?- ~, K9 m2 p% U# q/ s5 c1 F9 tparameter.txt文件中包含了固件的分区信息,以parameter-buildroot.txt为例:- C; `7 X0 V! @: O, C# a5 E
) j, I$ M; z+ H8 }- ?5 P. I* \& ?
路径:
9 m9 P+ ]* h/ p
4 j8 Z- p+ o) b9 `2 Y9 |
device/rockchip/ok3568/parameter-buildroot-fit.txt+ X1 ~5 |& X+ l* k- l. I! N
9 v, a6 @3 T+ Z0 @. m1 R$ G
9 D+ t% k" P' B" ~$ E9 n2 E: {2 }$ Z

/ H! h3 Y, ?1 p, A9 w9 O

1 T! M4 Z/ U3 e; Z) Q# s! _
8 [9 w) O# |% Y0 S# k; A. j8 D
$ h4 b. j4 M, r: ?
CMDLINE属性是我们关注的地方,以uboot为例,0x00002000@0x00004000(uboot)中0x00004000为uboot分区的起始位置,0x00002000为分区的大小,以此类推。
! u( ?5 M, p, |6 X, C/ ^- a
0 `0 B9 D0 C. o( X/ ^( T
$ W# N- \2 s" T( a. a

$ j* K# H: M/ s# d8 J4 t  \
  S& _- a! d# s; l) Y1 p6 Q
2. package-file5 y: y, l7 H; v5 _5 A6 k. ]; g
* `& M0 C/ @; A5 B& K/ s
package-file文件用于打包固件时确定需要的分区镜像和镜像路径,同时它需要与parameter.txt文件保持一致。7 O4 [# P& Y+ J* Q+ C
$ Z. o( Z& Y/ ]" ]( ^% ^& a

+ b9 \* x. v9 m/ K; B3 ^
( Y* |* ~9 ^0 h  M* A

1 b) E$ O3 S& J, w路径:; h% W3 h4 x/ \  A5 r  x
. v' v! g' W& z; j6 [
tools/linux/Linux_Pack_Firmware/rockdev/rk356x-package-file5 I9 y' D  L8 B/ y9 _2 S) e) S$ Q

# S+ y8 \9 ~- p) k#NAME        Relative path8 O2 m  F% {6 }) T' U- P7 T! ]
2 d' |& ~. M' ?7 W6 c# j# ]
#  w, L( E% u4 b
2 N' S1 @% u2 d. ]
#HWDEF             HWDEF
% U5 ~) f( [7 H& H/ s
% {: g3 j9 G3 }& d! O
package-filepackage-file: J. U! o. S- e9 a6 x
" b) s  W- d' x
bootloader  Image/MiniLoaderAll.bin* J5 l9 @% ^3 t; B2 V! G1 z: U

. P) D" r9 d$ S& r; Lparameter   Image/parameter.txt, Y4 }9 K" h% Z  l) a

2 u* A4 L" m* _0 M# @2 [#trust          Image/trust.img: `8 D7 J- @* S: i

9 x  b, B' L! o& T& u! D% ?$ Wuboot          Image/uboot.img
7 G0 y. D5 p5 z# i9 B
; U. h% I$ }+ S$ x
misc             Image/misc.img
# L+ r% R: u! T& a' n

3 |$ {' K0 r# Q: b1 e. b#resource    Image/resource.img  u1 ?  M( h2 j8 F
5 J6 k" A7 W/ ~7 @
#kernel        Image/kernel.img
( _; Z) F* x/ [* x! _7 e' [
! o' j* p, _' t- r& S/ M
boot            Image/boot.img" S4 F7 w. @( o# Y' B7 q( R
( N  u* k. i# o. R
recovery      Image/recovery.img; H  c! d7 v" G) e& k. E9 C3 I
; J5 n  c/ _, }$ ~+ T% U) R7 x
rootfs          Image/rootfs.img
5 Y" y, U% ?, @9 N  u

& ^+ H! M' a) ]4 P1 N8 Xoem             Image/oem.img8 ?. ^& L0 P: S

& ]2 t( M* B9 quserdata      Image/userdata.img7 U* H! V! ^, E& A" g# b5 R4 b

* ~# u. j& H. N' I) \: s  ]7 U
3 |' U! D& G+ A: M5 _# S+ s# c9 [
6 `# E6 l) [& Y5 v2 s  Y- q
3 `$ b) L" T% j$ G- u
#要写入backup分区的文件就是自身(update.img)
. x, D+ J1 p( Z+ l2 r$ s) O

# X* ], a9 k9 V( J# h' I#SELF 是关键字,表示升级文件(update.img)自身, g, |. z) W$ g0 k! s# Y+ J
( E2 _6 d, P9 j& o/ S$ k% M3 x5 }
#在生成升级文件时,不加入SELF文件的内容,但在头部信息中有记录
2 p1 Q. J3 n2 A" v' p, @  B

& L* S4 d+ G8 n( v) d4 m#在解包升级文件时,不解包SELF文件的内容。6 N( ~* Z- e( m" c" i* Y% k- q
  Q* S' c& w/ V% a7 |7 i
! D& Q$ D8 T* E' M
7 x4 A, \: b  d6 ^- E7 v: [* c

2 w' K. x5 l" D# s  N; x0 ^: I$ d, Vbackup        RESERVED+ r" d3 f) `( t% |, C
! T2 H2 h/ P- j4 {  ~& }- z
#update-script   update-script
2 ^6 a- f& g5 @! `% ?

* ~* `9 H" e$ ~! H  b  y#recover-script   recover-script9 C, J6 U6 s- o2 n* |, R
5 \: K3 u* U3 A9 V# Z1 J# z2 }: u+ m; n

6 ?* `0 a& }1 b# w1 M9 G1 D5 |! {
+ {8 D  ?3 Q/ V  J
' H+ m/ A0 H$ g( T0 e& T  i
四、镜像制作- J( [% ]. k1 Z. f3 ~  D' r
" _. s' T, }& q& i5 b  r0 v

7 b; Y" `" P4 R  W! x; R* ?
- V: `- b+ ^( p: y
1 V) V3 }+ t% O+ Y8 B' z8 @* i$ q
编译源码可直接得到镜像,但是编译时间太长,有些部分不需要再次编译,只需要从已有的镜像中解包,然后再和新编译的部分组合打包即可,下面是制作方法。
* H5 L! {7 D! t/ J- Y* b
' t1 a% _5 r8 \

  h; B) ]- [2 V% D
  [& J: r& y% `- w* B+ U* @" e" t

+ ^+ n* n( u8 z- i6 ]6 w1. 工具安装9 {- F* _) _0 F
: K3 \- k) }3 I' M6 X
下载工具包:
2 ]: Y- N' F3 S1 o0 b4 ]
% Y9 m) F9 K. w8 s1 D
$git clone
- L( w) |, ~" p8 c- x: `1 D
4 ]9 d! ?7 p7 o5 B3 ^( n
https://github.com/TeeFirefly/rk2918_tools.git
! z- Z1 g) z' V2 ~; }
4 j: i% |0 g) l6 n* `

1 `" m: }8 D3 I* n% |* W2 ?9 \3 a1 S

8 e- T' H# j+ h% Q* H: \进入工具包目录:, e, `9 X* @0 X; R3 m' k& g
# E  O) f8 t& W% T/ t
$cd rk2918_tools
4 N* r1 ]& F5 d: |/ `: J) q1 ^
: F; d* z! ?( N) m) h
编译:5 T5 s5 ^. q) c$ `, n: E1 {

1 ?- c- w3 O. s1 k" \* ]( y$make0 p6 x) L; i8 p/ Y
* t* s. p" P0 n% C

2 |! ?: O+ O/ t' k' H+ X! j; e) W0 X) v. o& k0 t

$ ~+ \! ~$ Q! \/ R5 x7 e" m

; P) X- ?+ W) t! h将可执行文件拷贝到用户二进制目录:( Z" C- A& `8 P$ d

' w1 q: c: t' q$sudo cp afptool img_unpack img_maker mkkrnlimg/usr/local/bin( g/ {5 b6 S0 B8 r7 b6 g
8 ^, x0 s! r( A
) E# s4 G1 \! H

$ B/ K% W- t/ ]# _1 w: d; R, p

6 w1 S4 e! U& x& c' N; N2. 解包% F8 V9 N1 R3 Q! Q6 O" Y* N. a
3 G$ C' g, T5 Y3 R
将update.img拷贝到Ubuntu中,然后使用命令解包:$ o1 v7 v" U" Z' r8 c
6 b$ ]  v7 v& S2 S1 \% y
$img_unpack update.img img
( ?: t+ ~2 \1 D2 r5 P- O  S

" H* p2 d/ |' L) K3 Z6 n1 F9 p. ~) ~$ w4 v+ H  Y0 b

# C6 o! f9 j4 M7 v9 T
8 U' t' T- z4 O
3 _$ t0 D* H- o$ t8 g2 }0 z: G3 g
, \: W2 V& p9 P) U+ V6 A- z- u6 |

; _3 h4 W" K$ G( ?5 l- M, [# v- `2 E
8 t% i# B2 W4 p! j8 Z& C& Z
解包到img目录,img目录会自动生成,解析成功之后,img目录下会生成loader.img和update.img。( o: L; A, {/ O5 x' g

9 L+ v9 n8 s* z
% B8 N. `+ n: p: G6 M4 Z# v  ]; o
$ E' {( Y) n. e( Y& t! R
. u& [% {' d; u5 I
8 ]% k$ R& B: @7 J7 u

) }+ P8 _3 D9 n# d" {0 ]

* D- [. M9 s. e

, t) l  P0 {0 ~8 e! H* V( V# F0 H: b) G接下来进入到img目录,使用afptool-unpack 解压:  k5 E  p9 T7 O; Z7 t
3 Z) R9 k% W! X- p, e0 u! f' x% g
$afptool -unpack update.img update
3 B  s* a5 W4 u& S
$ b+ f. q. t2 l: g. O
$ R7 [" ]4 B7 Q  j

$ B9 O- a, h$ l1 A& g2 q+ R) g
( h/ Z  k! o! I# A$ T. ]
. M$ P8 J7 o0 `0 Q8 m) H+ Q
  M$ G7 q7 R6 w  X% }! E/ J
解压到update目录
8 H, [% _& m# h
: w2 Z3 x+ O+ O; C2 _, l7 z5 I
打开update目录,里面有很多img文件。! B. ]& ~( h  o

1 P$ h/ U& ]; [) E; v' G
* \3 D/ Q4 }2 ^  b
; {  s$ e6 e# r5 g- [9 c, |2 C

+ X; k$ j' N$ J! x8 E& U" }; s4 ?/ ?将需要的文件复制到rockdev目录下。
! ^( a% n! P1 c( B/ h

) |6 e! m' D) U2 S7 g) m1 U
2 y) u+ [, u. A: w: a
% W+ {% r& Q9 v! K
" V% H2 b3 u% @( f" l6 I
3. 合成update.img% g/ F" c. s, _; }$ o# t$ g
: X) p) l2 h* d6 t
然后源码目录以下命令即可:
9 J' d6 o2 v! H/ M

9 k( @0 b/ s7 y# u! n0 t- F4 ~$./build.shupdateimg4 X1 n" I% u8 v$ y) E

4 a8 C0 i4 V; N; A# d$ j( g* L6 w0 a0 i

8 ]9 L  D% r% |, h* v
( N3 u  ~1 G9 M8 @. Z9 M

: ?* r- F) u1 K% @5 y: M2 {0 O. L4 T

该用户从未签到

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

该用户从未签到

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

" f- f8 A8 F3 E, M2 Y% L步骤很详细,要是能申请一个开发板就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 13:49 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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