EDA365电子论坛网
标题: i.MX8MQ自制底板无PCIe问题详解 [打印本页]
作者: 罗罗诺亚 时间: 2022-8-20 14:14
标题: i.MX8MQ自制底板无PCIe问题详解
本帖最后由 Heaven_1 于 2022-8-23 17:32 编辑
1 ^! f8 o( F+ c/ ~2 |- ?# d7 E# V) Z) G, _1 S$ y, n7 z5 M# n
在飞凌嵌入式OKMX8MQ-C开发板上有两个PCIe接口,对应着两个PCIe差分时钟,两路PCIe分别用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。/ _4 I4 t# [% S' Y/ e: d
) d' r+ W& } \2 g4 v/ R+ w! R- b P$ x2 `; [* j, j4 r/ N# ~
! `8 E0 w4 X4 }: ?" q9 V
9 T( X/ D5 v, H) X; d/ s
很多使用FETMX8MQ-C核心板的用户在自制底板时会不做PCIe部分,故而不会焊PCIe的差分时钟,等到使用出厂镜像验证底板时发现会出现无法正常启动的问题。; J5 q6 c8 |9 [& P( U; [0 D( r
' @* x+ b* I( b4 a9 p
& L. f% K3 [/ V
0 Z( o# v+ \/ W4 k4 V
- G8 _3 F* e# Q w) s# D
今天,小编将总结常见的2种自制底板无PCIe导致的问题及其对应解决办法以供大家参考。8 E5 m# b3 C( |+ ~; i8 A6 I! E
( ]* y( N# m R9 z+ t# j. L5 l H$ K
0 ?1 K- H- H& f" w9 b* {
0 ]8 i; [+ h8 c6 p' v! I. Q. B9 ?8 `5 d
+ X. A f/ v! o& x0 @% H6 i J
/ J3 o9 g; g/ o5 o0 h, f. A7 P! w( b4 `- H$ U5 V; d
1.“使用出厂镜像启动时发现无法正常启动”' ?# \! j( A: g& v6 s2 ^
" z+ B, W, t- Y1 v- M
# d \+ {% b9 S! d2 X" J! x! @1 U+ t7 Q
. L: b8 S/ i+ }
问题描述——
. M+ i6 @, Y5 H' p6 j! w
# R0 b. C6 O- X/ i2 c客户自制底板去掉PCIe烧录出厂镜像,启动时出现的卡死信息:
: g/ T ~* R. c' n& k
/ i0 s3 U9 W, Y5 c. u. D
5 q1 b* m: @+ e3 d+ p$ P% @, k4 x) H; e4 t+ g3 o; f& @' f* Q3 A
# A2 o, ~, _! z7 S- s

[backcolor=rgba(18, 18, 18, 0.5)]
% W* Q) R' j( X# m( h' h. Q9 D5 t1 C% M+ s
: [1 o) y; l5 c
# _' v5 H6 f' o- Z7 {
& w3 T% U% d% |! G t
编辑切换为居中
; K4 J6 V0 {' L. v; ]
% U4 G2 m5 [6 @3 }; ^- B
6 ^4 Q4 z5 @1 r1 m0 Z
/ q* M' k7 W8 V( x4 i: d' V7 a: H2 f7 N+ {- Z
添加图片注释,不超过 140 字(可选)% n3 I9 m$ B! T. H
- S2 n: t2 l9 F) R$ ~) H& Z
4 y. V7 l) U1 ~
# [' w7 w/ Y- O% s' G$ Y+ t" p a9 N- C# m2 l9 J4 G) \9 o; E4 F
, s6 s/ l. B; O! A
7 ^# t8 C$ y2 m0 F
U4 ]; L* y7 g7 U1 O产生原因——
' c* _7 e, v: @: K' a3 |- X+ ]8 Y# N' q# o9 E, G5 H% }/ _
PCIe影响了启动,需要在设备树里把跟PCIe有关的功能关闭。
$ Q0 O7 \. T: S3 t& O3 }
1 F- p" f/ B/ I6 F$ ]4 a/ u( U
' w' n7 ]; r( f
# B7 `1 Q, u2 P% g$ ]1 L' ~0 I4 U& n) H: Q/ T# G+ l
解决办法——
. G7 s( l. F7 C2 C# L, l- r4 Y2 y- a+ h' B. U7 j' Y3 d8 Q" j$ h
修改内核设备树:4 T5 z6 P! K6 @ l8 `! E; K6 U
8 B1 m! }- A/ O( ^# VviOK8MQ-linux-kernel/arch/arm64/boot/dts/freescale/ok8mq-evk.dts
0 m# X& o) ^, J$ e% }" x
! O) N) | k9 Z. e! U1 L
- d0 u) Q; ^9 {8 H$ e
: s, e4 ^+ U& X6 S q5 Y& ]' K) g, h

[backcolor=rgba(18, 18, 18, 0.5)]
# b0 _; r' J+ L6 L/ W+ @4 w
7 j4 M, x8 t& j4 N3 L4 H' r2 {: C+ s
3 r2 \# f7 a& H9 j7 v
$ T2 o4 u5 E" r- V) V3 V' g6 v1 Z7 x5 ?# q$ s$ ~* b( y
编辑切换为居中
( r7 ]' d; m+ c; J3 X8 _ ?4 z) \! s; K4 M3 l5 ]4 S; D
2 e# O% Y$ n$ v/ {; \
! u; J- o, o. y/ x# v& I r/ M5 @/ |9 D, m8 Z- z& u
添加图片注释,不超过 140 字(可选)3 G) o/ U- E& p$ A6 X
% G _* P2 q5 X0 m- m
' F, C* k/ E1 G
' k6 V" M; P# Y+ Y$ L B% q8 L* u' J
4 B$ L3 \6 Q# z/ C0 f) C+ {6 B将设备树中的PCIe全部从“okay”改为“disabled”,重新编译。编译后会在/OK8MQ-linux-sdk/images/boot下生成ok8mq-evk.dtb。
& o8 h$ l* o' u D2 J! k
! o7 J! q5 H0 j7 _8 y" Y; z1 I a% I- S7 [
" Z# o B' z M
' J& t; Q4 n; L+ B% H7 m完成上述修改后重新编译并用新的镜像进行烧写。9 k0 K6 D/ B( i& t& B
7 S1 o& i& n6 P+ ?0 ]% X1 p5 B$ Z8 m: X) O
# [ J% S7 |- e% F; j( c$ K
/ X5 m1 N: b* y) ~8 `" y正常启动后打印信息如下(红框中是在上述卡住位置向后继续启动的打印信息):
+ |, u( d" J7 D6 ^- }2 i/ t: K# `+ s; q9 z- J
; K( m* [; p( s# T+ T1 |5 k: n, y+ o) p7 X5 S; c' h
, V7 G8 A7 V0 F# h2 @2 g# w

[backcolor=rgba(18, 18, 18, 0.5)]
0 I( y: Y( N, S0 d, l
; G. v3 v0 {/ x
% g7 f+ j& V( E' Q
8 a4 a! }% e, o$ ]
H- l, h) @, m- ?* r" C编辑切换为居中5 l% e }% U( J
: s1 ?' A" O4 Q4 `% ~; S+ i# P
% b& O& N) m0 Z# u) y" H( k" m1 _9 Y% Y0 g4 A: c
+ x; S$ l) z: R% A* w$ t
添加图片注释,不超过 140 字(可选)) R& Z" J9 n! g: b G8 S% _
: K, x: |7 g. S B: o1 @7 k
; c" n' Z; A7 k# e+ u* A4 c4 @' G# u3 H# ?! N W: `: l; r K
' K0 [ Z: j# m; P
注意:飞凌目前提供的最小系统方案也是没有设计PCIe的,故用户如果使用了飞凌的最小系统方案,也需要按照上述方法进行修改。" Y' J0 C6 Q2 J& }% M" _( j2 T
" p) f2 K, {# V# L
6 f; U& W/ ]6 G
1 U0 D C0 M3 U' R# q
6 |/ L" y4 b# z; s/ l2 q6 X1 `* ?( f" I+ S
9 f; A! i% ^& B: `8 q7 A
/ x6 S G, f5 D! Z- c( z2.“使用TF卡进行烧写时发现烧写一半卡住”
. i @9 P4 B- Q3 F0 d7 {* [2 ]" t( {# E" Z$ e% r, {
9 z2 z9 A5 [( R* ?
8 P* C) t* c& Y* t
/ H3 a+ ~( o2 Z" @$ ~4 D( h$ h3 k0 [
问题描述——
. ~1 ~* W m9 ?# ^2 m
* Y2 ]! ^' l/ V( G5 \2 h客户自制底板去掉PCIe,使用TF卡烧写时看到命令行打印信息在下述位置卡住:
8 [- j* s) k' h
, F1 o9 o, O& ~2 Q. o& J3 U3 g0 o; c* E
6 w: o& b |- C* \0 i$ c' L
8 ~" B3 {4 G, \" N( {/ i0 N

[backcolor=rgba(18, 18, 18, 0.5)]
L, a* F5 ?7 k$ ?+ C
# g: U& T8 a* \% T$ [" c' t/ j
: k% |: I/ G9 Y0 \' W
0 h# [! F' {4 z' o# I
4 r, M! x1 F' W& H8 W8 G3 r
编辑切换为居中! S, H% g/ _/ ^! }
, y, a5 e- K, m L5 c, F0 e" ~4 j0 w7 k [
/ ?, Q# \6 ~3 \
) ?% ~: N! j' w* A2 H添加图片注释,不超过 140 字(可选)
. w' i3 G3 m2 k' S+ w3 G
+ M4 s+ D3 W6 ^: c& e
; i3 B/ ? m- J, b3 A. s% I
1 k# O! Z0 a7 y. E) d& _2 U: _; f6 S3 N5 Q' f9 I
注意:并不一定就卡在上述位置,但一定在上述打印信息附近,不会太远。
% U }3 C& \/ v+ Y5 m; |# I! B* H: v# S! s8 B
9 q( t; \+ C8 y+ l& J8 H6 j8 t' ~
, V$ r: B8 \# c0 k' z8 U2 Y% o( @4 `' V; G, X
产生原因——
0 J! Z# t O9 c, H3 s
. b0 H7 f# n* v/ O+ g烧写引导镜像中的PCIe的启动影响了烧写,需要替换烧写工具中的内核阶段引导镜像。: D, ?$ O. P( U8 l- P
9 u. ]/ ` B- O- z" h& c+ Q% g q9 S9 N
4 i0 _' Y4 ~" H, |% a& e% ^' B* L
- c' c- a; {. l/ N% K9 s" @% @# ~0 S7 R' D q
解决办法——
* n3 x0 S. ?4 Q; n6 d& X
8 K, |: n, e4 v4 b. g8 m首先按照问题中的方法修改内核设备树并编译。进入“OK8MQ-linux-sdk/tools/update”路径,可看到该路径下有很多dtb文件:8 N @2 Z/ }0 t6 K' z# V! d
2 z# o1 u4 ?; B
7 y+ Y2 J; J; c: [8 M M q8 ?! l( V) I5 e
6 B" o7 k: p' ?+ P
[backcolor=rgba(18, 18, 18, 0.5)]
- R/ p8 _ ?5 e) J8 a/ J. p; t3 p; n9 W* ~6 z$ \7 b
+ K4 {( q' L; z" y( o
1 V0 e& y- [! q5 o+ C E' W
9 j, C; F# o. R编辑切换为居中
" s E8 h1 ~' i6 F$ a3 r( @' v
& R( u3 }% d* s
7 ] b0 i. f% _+ O+ }
9 {3 g* m+ n( H/ N" m5 W. v" J! Q' U; P1 n' @
添加图片注释,不超过 140 字(可选)
! M* d- n% r5 ^3 V' G( D- b/ A1 T& p: }
$ L, t4 K2 D6 ^
/ r! m( R6 P4 y- D, Q& s& E ?) l& [
用编译生成的“images/boot”路径下的ok8mq-evk.dtb替换掉当前路径下的ok8mq-evk.dtb。: P. ?6 r: [% _+ B0 d
. }; ]4 Y. X( x; k2 M' T: p& E8 I" k
& w5 i) _* W. t, C8 m7 E
) s% y) S# I7 d4 X; N执行编译命令,生成新的烧写工具:8 U9 W: N" l! Y
I1 Z u$ {8 u8 d1 i
0 o h" j0 H$ `! [4 q" J% k5 k4 |/ r; u7 \! @9 a) z! h0 _6 z6 {: T
! L. ?+ X1 p* n1 t, ?

[backcolor=rgba(18, 18, 18, 0.5)]
3 [- g' R3 H. v! L" d. @/ |; i6 ?, Q5 d" E. S+ {1 k: N. e
0 D2 d- c, w* r6 } w, ~9 H' l( h8 a- @; ~" `+ I/ e+ Q
( x) q1 }9 j2 f) V编辑切换为居中
% M: \0 \0 U# s) Q. n1 b
$ {1 V4 D# K* R* s) Y- s" A$ q: ~. B1 e: S' y, K, l9 y
) U+ L2 Q. |$ s3 P# a' r
3 u3 b/ y0 N" P5 \8 F
添加图片注释,不超过 140 字(可选)- c7 }7 U* ^- Z9 J
! w5 {- b! @+ J5 J; [8 {
1 n+ T/ j8 ]8 E# Y( f2 X: ` I' f8 |2 X. O: a5 s
3 C$ d9 L2 ]$ P
使用新生成的update.itb替换掉完成制卡后TF卡中的update.itb,正常进行TF卡烧写。. E2 B7 }1 X& @4 {2 Z
+ F0 S' w# v! I- l7 g% _0 _
进入OK8MQ-linux-sdk/tools/sdfuse路径,可看到新生成的烧写工具update.itb。6 f6 a2 g; t# x4 g6 H9 c% h' E9 ?
) e6 l; q' U2 k. C
% h1 {/ O8 t7 J; }1 E9 H
/ W+ K. h, x" Y: ~/ n& E
$ T/ ^4 r& O m/ x注意:" z7 L* @% U/ u, X& u5 I
! M+ h$ B8 _- n1 `& k) n8 X
- 我们的烧写工具部分源码是不开源的,若您确实需要做相应更改请联系您的对接销售,由我们帮您修改。
- OTG烧写不会因没有PCIe而受到影响。$ b8 K5 L* ~+ |- k3 Q7 ~/ ? K
# H) j k: X+ [" |8 Z! u9 `2 I. O- P1 u e7 ^
+ }) w) w$ G% y/ Q% z7 K; d$ h* f; }
上述的两个问题就是用户在自制底板去掉PCIe时可能会遇到的两种问题。* C" W( j% o- g0 a
" o( {! p( ]6 y4 }' ~1 c, f
" m' i3 F/ Y; c4 n* t# W
4 L+ c# j' e, U: e0 f
% P: |4 d) S* I' W5 [# u当然,只设计了一路PCIe的情况也需要注意:4 l9 F# _3 V0 i* H* C5 S# ~* d+ h
n: I& V8 H" w: f8 y- {4 W4 L% C8 ^" {如果自制底板只做了一路PCIe,只焊了一个时钟芯片,也是会影响启动的。那么也需要修改设备树,关闭未做出的那一路PCIe;$ V1 C. @' i% D! H& s
: z& q, s3 ~1 |
$ o( ^4 E6 l+ X, M v0 c$ j
4 t) X* ^! G& C8 o* }6 ~
3 q g2 d: a, y如果自制底板只做了一路PCIe,而差分时钟焊的不是与接口对应的,那在命令行用lspci命令查询就会找不到设备。
7 c& [) Q$ Z# w( V; C) M
6 v+ s' b' K! o8 y/ b9 l" J
7 L1 v& V( Y1 ?' v; { p8 c
$ u( \+ z* {1 y: \) @
# M l3 N$ j/ `* G% `& x6 r o! k& x8 }, p
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) |
Powered by Discuz! X3.2 |