|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-8-23 17:32 编辑 0 r Q! `; X. k3 H, c
! R$ @/ D/ F6 G1 \在飞凌嵌入式OKMX8MQ-C开发板上有两个PCIe接口,对应着两个PCIe差分时钟,两路PCIe分别用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。
" N7 g. \8 I' `
- j6 F" ~/ L9 i- r1 U
7 c9 k+ n7 k) p+ Q5 Y& I1 [: ~
o/ N% o; K% v3 ?/ S3 p' i8 V5 U5 z( C* Y3 _% X" l1 l
很多使用FETMX8MQ-C核心板的用户在自制底板时会不做PCIe部分,故而不会焊PCIe的差分时钟,等到使用出厂镜像验证底板时发现会出现无法正常启动的问题。; j9 m; l A& H/ R6 u/ j' B
/ m5 C9 D% a5 G3 C0 i+ y0 ], d; [' j+ Q1 c
! Y- H$ Q( s$ q# w2 {% X
+ U% K7 D& X% |
今天,小编将总结常见的2种自制底板无PCIe导致的问题及其对应解决办法以供大家参考。
6 \ f8 {6 H2 d+ h4 P1 Q* _4 f' d* P, ~. Y+ Q) H" S$ A/ N
' z$ o: W3 D6 B% s v
. Q2 N5 J; C: W( Y7 L
+ d! p8 U! d6 E5 C- ]# y1 i' o1 h
/ m9 ^, E0 B X
$ X- {( d, `! v) o' E/ L( j
3 P8 p7 u4 w% a# V S0 y N& X1.“使用出厂镜像启动时发现无法正常启动”( K( @# d# d. T
1 j1 \7 @/ @3 b5 T @$ U# u) c' ]! i# W( a
' A# E( d' D# J% M- G# D: p
" w' f5 P* d' q* g; s4 W问题描述——8 i3 K7 R, {# H) A+ W$ z; v
1 j# n1 P8 v- V5 T' l) d" F* }* H
客户自制底板去掉PCIe烧录出厂镜像,启动时出现的卡死信息:
7 o* r# o; h3 h& P4 @' d) Z
8 S4 S% M! Z, I4 B5 v% B9 _9 K* N
0 j* z0 a2 K1 F E+ r! U3 C; J9 \+ E% N5 [, q* o5 |2 g
![]() [backcolor=rgba(18, 18, 18, 0.5)]
, r7 |3 s6 b( h2 l4 g) c8 k* f# g5 B# p; t* Y7 u! n
) X8 x8 U% j$ U0 V7 W( h0 a4 A
- f# `3 ~) j& K+ N/ t% R$ I$ K& U Z6 s) f
编辑切换为居中: j7 r2 w9 d- y5 [( s2 n8 f+ G
7 }' z5 U; l# m& O$ ?
( ?& u$ Z; ~7 x* N# v
% p U8 N" c+ l3 K9 M, ]
/ S, T) l5 m$ |) n, k- q0 j- e" A添加图片注释,不超过 140 字(可选)3 Y1 ~, i, I+ S3 ]6 h! e
- n# ]) T3 k1 N
_0 ~+ H- o: M5 v1 P r" j
* O( m6 l" w, | D9 i3 e, D) q8 @6 @, c% q( l
6 j+ V+ u2 u% d( {
+ V, k6 m1 w, P' l- n7 z3 t5 K
1 e. f7 P* {( j产生原因——
1 W5 f/ w/ v6 J, J2 q
1 U# n3 N, I+ {! \' p' a; kPCIe影响了启动,需要在设备树里把跟PCIe有关的功能关闭。( H) [! x7 Y- b# P& R8 Q: W
( v9 p; y3 \/ |- ^/ W4 T. L: n: F$ W( n5 [7 Z6 S. V
5 O# X, T+ z- p9 ?3 F9 r) \2 ~" I7 m h
解决办法——
: b& o4 M( b0 j3 f" y# e
. C3 |) z7 x* Q4 \修改内核设备树:
6 [2 l0 L7 y: Z% `8 n( l) c& E( t0 M6 a4 X' J. ^2 o0 S s7 w
viOK8MQ-linux-kernel/arch/ARM64/boot/dts/freescale/ok8mq-evk.dts
6 A. E2 `0 Z7 G+ L$ u5 ?6 V
, }4 m9 z+ s" L4 h6 z3 U* _( f
# N9 g. M6 q4 I* w7 X9 g9 d: G7 C( M3 o( v+ W% Z5 Z2 ?% f; V
2 _" b6 Q" f' G2 v% i) f
![]() [backcolor=rgba(18, 18, 18, 0.5)] 3 ^2 z6 Q/ W- P* l4 z; [
/ U" [% n! ]( t
7 r4 Q. K; i8 J0 k4 i# _" t+ z, E! F; p$ D- v' q7 Y# t! m
! q5 g0 D4 M6 S- @' }
编辑切换为居中
, Z; g" v5 V) R( b! n: g4 [9 |
" Z& m; R4 n/ ~$ c2 I, C& {1 c* L& J6 ?
5 o1 [, i* a% l* L7 Y* |! a# r8 r2 o
添加图片注释,不超过 140 字(可选)
$ j7 A$ E H1 l% k
; y7 ]( t& u! h& n! v# \( n, k/ z3 _9 `
; \' f J* z( Y3 Z! R: `0 y8 r
" ~9 l2 h: ?1 z* A1 y" K
将设备树中的PCIe全部从“okay”改为“disabled”,重新编译。编译后会在/OK8MQ-linux-sdk/images/boot下生成ok8mq-evk.dtb。% [5 G) F% g( s4 H& j0 ~: a4 I6 m8 e! Q
; n5 y: |& U( O! q( I8 t/ B) h1 u. z5 _5 o" F( U( Y
6 d$ P) R5 {1 _, Z# j: @6 [/ }4 v0 B$ I' M
完成上述修改后重新编译并用新的镜像进行烧写。2 Q9 x. @- G0 k* \1 x& a
" y0 D- t8 \3 S$ ]
8 v q. B2 h; S0 w$ f
& L/ M% r# D. e5 t8 Y' P
5 `0 t- H2 @* r- R. ^5 V
正常启动后打印信息如下(红框中是在上述卡住位置向后继续启动的打印信息):& ^' _- G/ V2 M4 l, k
' F7 i- X, H5 m; b5 Y7 F9 h3 c7 h0 I
& k& n0 `3 K! z4 R5 r- B) e3 o8 {- n9 ^8 Z; C
6 d ^1 [0 S0 A9 G9 O3 B- r![]() [backcolor=rgba(18, 18, 18, 0.5)]
1 z7 Z; G9 k+ g, l: W: j$ X4 ~0 ]* i8 ]0 G$ N0 H
* C% I3 V/ F4 ^8 b0 ~5 n% b) w
) E8 y1 c: N, d# M
6 B( r- V" [) T编辑切换为居中
6 \: q: O' ^, t( K- F% T! G. J
' E* }; @3 X! ^# x1 B' ^8 d3 }
; G- ?* D! k' G1 s5 d* m& Z: j$ H
$ r# P c1 d5 `5 a
; X4 |* ]% d6 v9 L( Q添加图片注释,不超过 140 字(可选)
! o7 b L( Y7 b0 O; R3 U9 i" g) G/ C% k) i/ g) F/ y
% T# X) P9 ? @; k% S' h
" X2 x+ [6 V9 @( s& U" W8 {/ c6 O0 z& L: @* H/ C
注意:飞凌目前提供的最小系统方案也是没有设计PCIe的,故用户如果使用了飞凌的最小系统方案,也需要按照上述方法进行修改。$ f* H2 R2 R( b0 s
* U& u! U7 r3 d8 G0 w4 {3 }+ T# s0 P" J
4 i& z: Q( C# J% y. M- r+ u2 D% G( S4 V
5 x% ^7 |8 ^7 r. ^6 ]8 |) |" }1 }& ^2 F( [
k8 L9 z- ^( @' e0 D7 R
2.“使用TF卡进行烧写时发现烧写一半卡住”" ~: D% [7 u* Y/ B. [# P
9 h- u3 x9 r( Y( q" d3 J/ {$ g7 j) r: L9 o: J( }
( I. N4 A% {; N
- E( M/ R7 \1 ^# R7 g/ q
问题描述——
u/ E) P& ^# l; u' @( R$ L2 i
$ m' H4 X- I1 n客户自制底板去掉PCIe,使用TF卡烧写时看到命令行打印信息在下述位置卡住:/ O) I' a6 ?3 d! P. f- l
% F. {3 t! L, e3 N1 }! q0 I- X; m: v, l# K
: z$ ]5 N! g, m1 w! l
, J. ?9 q% L. j![]() [backcolor=rgba(18, 18, 18, 0.5)]
, g6 @9 p$ w% O2 Z: x8 M0 m7 Q" Y& Q
: i5 _* Q7 P( C
! j. f" q$ U6 Z# T
5 h+ H; }- ?# u; j0 O! k
编辑切换为居中
, `- n9 R, s' c) Y8 r/ t, R3 i Z9 H+ Y$ i
/ x4 U3 H5 L2 F8 G i
1 q7 |/ `" T+ P f7 l% Y9 [" @( w- v* n
添加图片注释,不超过 140 字(可选)6 G; @9 E: j! M, y
4 g7 U/ X! e, s3 j# C* B& T' c& v
1 g+ ]/ j2 f1 I$ Q, h3 i! J7 j. t9 \1 j! p7 x
6 V% X1 K. g, ^' a" Q注意:并不一定就卡在上述位置,但一定在上述打印信息附近,不会太远。/ F. O9 ~/ G5 _! X' V9 K
U8 R) a( N/ B6 N6 x+ S- \. p/ T2 X* J [ l0 R1 q7 u
2 l+ Y, m+ s" _# [: g4 J# M
# i4 c- W& j4 Y7 ]% M产生原因——! S; w1 K4 s7 e9 q3 i5 @# A
+ Q! l. J- R5 r6 ]7 U8 W6 |
烧写引导镜像中的PCIe的启动影响了烧写,需要替换烧写工具中的内核阶段引导镜像。
+ C2 E6 h4 c8 B: ~% U$ k( T; p' M5 E9 d
/ i* z: G8 `/ }( p3 D' }2 C8 d
4 s- P$ b2 p; ]& v1 q5 |
6 {, n: I& b6 G解决办法——# K% `* L! h+ b
! m- }. ~$ I7 @+ g- _
首先按照问题中的方法修改内核设备树并编译。进入“OK8MQ-linux-sdk/tools/update”路径,可看到该路径下有很多dtb文件:4 E+ u& N! u1 U
2 |; M& e- ]& H9 u- N$ G
- I8 e- f! l5 e. o% E3 `5 ~* o7 z! H, u ^9 T$ t- L
; h5 X1 v, ]$ {3 I [6 l e |1 l2 V![]() [backcolor=rgba(18, 18, 18, 0.5)]
3 _- D( a7 Q1 ?. b1 p( ^/ U h1 P* W
, p# U& N1 ^* C6 C* s# U
9 b: R6 T2 W$ H& t
) D7 \3 a4 u6 t5 x编辑切换为居中
' }6 T3 @0 ]( W, p2 y
/ [, `" S( Y w8 ~3 B& ~" P. r8 i$ Y9 m' w8 B! Y- g$ b
$ H% ~) V# E: p* O. l( ~8 c( P, Y3 K+ Y7 ]
添加图片注释,不超过 140 字(可选)+ P0 B0 P6 e3 w8 t+ E8 M- E0 x
7 s; }3 A5 A5 X" J% R0 P [8 G
1 v6 I0 r6 X6 z$ X) O/ p. _4 w
: Z' K3 Y) C! z" M
用编译生成的“images/boot”路径下的ok8mq-evk.dtb替换掉当前路径下的ok8mq-evk.dtb。
" V' }5 V) v9 T* j0 h& z
$ A4 \' ^% S# H$ d: X) X$ p9 f( g! d. [; X m$ |4 N
I$ s* r3 {, R; [7 K% _2 J7 T
' A& _( I" e1 O5 [ j' G) t" k执行编译命令,生成新的烧写工具:/ G& }- Y, h, A* t* v3 n+ G
1 K: k* y: i% j7 p. l# Z/ I7 X8 z9 {3 k
& h+ x* T$ Q: |( e& {5 `
# `- o' U) t& z$ Q4 ^ A4 Z0 Q4 _0 q9 b+ r1 |
![]() [backcolor=rgba(18, 18, 18, 0.5)] ; `3 ~& I/ d$ k5 i! j- {+ k
. Y& \3 _4 b6 g
' q1 x0 w7 g# \$ C4 X4 W: B& W3 A5 I! Q# X6 q7 Q- b
" b3 e8 P$ K4 C1 F, v
编辑切换为居中# F2 s$ J# P" o
+ {9 z* Y; o7 ?7 y' L" d
7 J# g* y+ L3 ~* r/ S. H* c+ Y' l+ J6 @* r0 F8 I, t7 H
6 |2 r+ T4 U& U4 f" J添加图片注释,不超过 140 字(可选)7 l, X7 W; K# ^2 l$ f# {# r, S( z3 c
, x7 j: |( R0 C' U$ s
. C: t: Y3 T6 o/ e& M! q: S% s) y% @' N: y2 f6 R( M4 I
2 v: u) s+ R$ i( `' J7 }
使用新生成的update.itb替换掉完成制卡后TF卡中的update.itb,正常进行TF卡烧写。
2 N! y& p+ c; a# B. M* y- {. p
! i8 ?* L z: W进入OK8MQ-linux-sdk/tools/sdfuse路径,可看到新生成的烧写工具update.itb。& G' c/ F- v u* K. n7 i( L2 d# L/ N& m
- _1 d* u \5 m2 W- l( b* h
4 V4 C6 W. r' I9 a' D ]4 ~* r4 C0 t1 v& `+ Q
* M, w% @- f2 X @* W8 o
注意:! F9 p; k7 K7 {2 I: T4 N1 R: O
4 K3 h, s8 d8 x- 我们的烧写工具部分源码是不开源的,若您确实需要做相应更改请联系您的对接销售,由我们帮您修改。
- OTG烧写不会因没有PCIe而受到影响。
* w& @+ s- g2 S" o$ c " E' s2 z$ I: g# i9 s! o
7 u# |* l& q% g- P
9 Z, H7 z0 i, h
上述的两个问题就是用户在自制底板去掉PCIe时可能会遇到的两种问题。0 m+ B0 A. a" ~/ M, R" |! v
) c' ^* [/ J0 R( F/ `* z
( ^, N7 R8 H U" E$ w2 Y
6 P6 Z& H( [5 k; `8 G+ w \* [9 `2 ^
当然,只设计了一路PCIe的情况也需要注意:$ j4 B7 ~% I' Z: `# H/ W6 p! k$ t
- B7 w T2 g5 `" @% `+ ?
如果自制底板只做了一路PCIe,只焊了一个时钟芯片,也是会影响启动的。那么也需要修改设备树,关闭未做出的那一路PCIe;
5 o$ Y4 m/ `; M) E0 ~6 y6 \' Z; Z! l
" v; ^1 P* E( c& ^& q9 C9 S2 u
* a4 L4 i: q% }% z8 W0 S; Q4 e0 O7 S, ^
+ g9 ?+ n5 r4 P( k$ g* w# x
如果自制底板只做了一路PCIe,而差分时钟焊的不是与接口对应的,那在命令行用lspci命令查询就会找不到设备。
! [ w% e5 [# ^1 @) i1 L U* H8 H# c; y% r7 q/ x& C
2 H$ x: F8 K7 \2 }3 m+ x
5 g- h6 ^& G& i8 U K
; c% ^5 h, }3 H; _$ T/ F6 i+ [# }$ P/ S0 h# M4 k1 \) d
|
|