|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-8-23 17:32 编辑 ' F) B) j4 K' n. x- S; h8 \# {
' ~, E0 r3 m, w/ N/ [
在飞凌嵌入式OKMX8MQ-C开发板上有两个PCIe接口,对应着两个PCIe差分时钟,两路PCIe分别用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。
) g: T) c. I2 r7 S
1 J. _/ g% r6 r' M0 P+ j& J, T8 X+ @9 [7 R
: l+ t# f4 Y* B8 F
+ p$ F- p% O1 @5 d9 X1 f
很多使用FETMX8MQ-C核心板的用户在自制底板时会不做PCIe部分,故而不会焊PCIe的差分时钟,等到使用出厂镜像验证底板时发现会出现无法正常启动的问题。
6 P. i% `# |0 i$ c f% l* [' l; P
$ a% d& @4 k- j# I1 v
- _1 u- ]. y9 C5 L( b; q# U) W3 g$ K6 i0 n9 t: X1 ^
* c3 C3 |9 D- c# J4 i今天,小编将总结常见的2种自制底板无PCIe导致的问题及其对应解决办法以供大家参考。
# L( a6 O5 ^( z6 i+ Z' k6 ~6 g! j; \. c3 Y- X- ^, K9 X* c
/ k3 |; |2 u/ o" E7 N6 i% N% U) X
& {1 G# _" t/ a! x0 @7 ~* ~. u- j, I3 d7 P7 F
: u* E# y/ G9 y/ S
9 L7 @) ~( E2 Q* s
% |" t3 m) }( `) P1 u R8 A1.“使用出厂镜像启动时发现无法正常启动”0 k! ~4 F# G; T7 i( N, P* I; O
4 {! c( t- f0 f( @9 |+ n
! ]) `9 c, l7 h+ g4 c4 Z
; H1 w# J7 G8 x4 y( @$ k/ X: K
9 N4 @8 o5 _) B3 x问题描述——/ r D0 N( I8 b8 Q4 ]
4 ^9 Z- E' w$ g x% @. e
客户自制底板去掉PCIe烧录出厂镜像,启动时出现的卡死信息:
+ b3 ]3 |; k4 d
0 _! F! E* [" H% x# u3 k. b. P# I& n7 `% z" @
4 N! c4 m9 `: {
) x7 [: _9 i( H7 P F, ~1 H. n
![]() [backcolor=rgba(18, 18, 18, 0.5)]
! m" q/ w) o% `+ N+ H6 j' b: E
% c& L5 I+ L! V% |( J7 j
7 v( w5 w$ Z2 x! e, i$ y! i6 ]. k0 z5 P% G1 Z0 C- w
! N8 q3 l2 c; D* K, D# T" G( ?4 Q- j
编辑切换为居中2 ?) }5 j/ i2 y+ t' r- B# r j) \
" N/ I) g2 Z) d* Z: I
" Y/ y: o' L" D% o0 Q
& w+ h0 m0 n& [8 G
J! o. O% z( ]+ a7 X* w0 c' Q
添加图片注释,不超过 140 字(可选)
% M. e2 w) K& j: k1 I) K
0 ?" M$ K8 e# v' A/ x! \' f
* \$ Q! F W1 l# h, V! G, L9 _- i+ O2 T; D+ a
0 p+ d8 E( A- a0 T, t! G6 p7 [/ L4 d$ q( a h0 z
* K( `! c' T2 R! a9 @
" T" B4 @6 r1 ?/ N! R4 X3 Z- V- W产生原因——
, j3 h+ A5 ~' |4 p
2 p/ k6 b5 y+ L8 n7 e$ KPCIe影响了启动,需要在设备树里把跟PCIe有关的功能关闭。
" N" k% v, u$ K9 w/ n8 e
% Q9 J% b6 _" I4 x4 E t
/ T* q- @5 z m; L$ L
, g0 x7 A7 R& A, i2 @6 X8 c9 y |" b+ w# j+ l
解决办法——$ p# y" f7 T0 A& k
0 A6 n* m: C) I9 [+ O6 O修改内核设备树:
6 [& E! l& b, t5 p" T2 G$ b, J0 e6 Z$ |+ q# ?2 w
viOK8MQ-linux-kernel/arch/ARM64/boot/dts/freescale/ok8mq-evk.dts
& z; W4 ~7 b( e, f- H) [% ]" Z; x5 V+ S! P/ ?
! ?* ]0 Q' y3 j& o- ~& K! t- `6 s
3 e$ l6 N+ K, m. K3 l6 t: o& o
! l3 a0 s/ A! Z+ y- ?![]() [backcolor=rgba(18, 18, 18, 0.5)] # w( M- ^, V% a0 K$ d" Y
( p. P" k$ N3 v+ z
% y! w) K9 Y/ J' G) M* B0 Y, K) N( }; T) f' n$ J; ~
( C9 F+ M" X, w% U8 K编辑切换为居中
. _8 e3 g' ~& V3 o; g+ x& h7 e5 |3 `
, R% v4 A# ]9 Q' h
3 y7 k% Y5 L: _- i' V/ Q
4 [7 p% |, T. V8 N添加图片注释,不超过 140 字(可选)2 Q% I' } ]' L0 c5 X
% ]8 d. @# ~2 r5 K) ]9 U
{5 f S8 R- C f5 ]1 S9 q
4 n& A0 s/ X1 w" b- P! Z- N* B0 P1 J7 k f: M
将设备树中的PCIe全部从“okay”改为“disabled”,重新编译。编译后会在/OK8MQ-linux-sdk/images/boot下生成ok8mq-evk.dtb。! e! a F8 L+ u6 y9 ^0 f
& T0 U. f0 h% Y; v& Q1 i6 x
9 E+ ]0 g* L/ d# j6 Q
# K7 l; D( B7 n; v# @2 M; b& T; P9 U
* k P) p7 t' m Y: _5 ~
完成上述修改后重新编译并用新的镜像进行烧写。
2 A& O b0 q3 K- v
# q* }3 g& A6 k' @
& V9 z' `$ N3 g' F R. ]6 W2 C
9 E" k* m6 }2 ?* R) i0 W# S; G) Z- n5 T/ |, }/ L! A8 ^. G
正常启动后打印信息如下(红框中是在上述卡住位置向后继续启动的打印信息):
3 |" l! c0 P8 H/ V
2 `, g' {& f7 n# q/ d
9 u/ I5 V3 a. l! n* v+ _& M7 H2 k9 F
+ |# x7 T1 C3 _5 z1 y
![]() [backcolor=rgba(18, 18, 18, 0.5)] 7 w5 \8 C5 W2 I2 W, f
6 H6 X% Q" ]3 {/ O Q7 h4 c5 ~ I
% Y$ g: p: n" f/ r7 F
) t$ s2 E: N& K+ D4 l编辑切换为居中
" T1 m( G# J. J5 [; m n! [
3 y# c3 A5 V* i$ I
& S) ]6 I# f/ k N8 R1 Y7 z# G' |4 L4 h
: i: S4 A8 |! m添加图片注释,不超过 140 字(可选)5 \& ^4 u& b: t7 o6 Y% t
3 D# S5 `; a, }8 o5 _$ V% X
" @/ o* R a/ l M; g- Y6 e4 Y. i9 w9 f0 ]: ^: }; \7 `" w
8 D: j. H4 M; S9 u5 Z: D
注意:飞凌目前提供的最小系统方案也是没有设计PCIe的,故用户如果使用了飞凌的最小系统方案,也需要按照上述方法进行修改。
0 s B% M ~) N# Q0 D/ K$ `5 i, z5 |8 D/ X; ^0 L& R1 w& _! [( n
0 M+ ?# e* J3 J& E
8 D& S! @" b* w0 Z, r' J# B, q& {! E/ _2 R2 |; R
. u4 ]/ n4 }' f$ J7 b% ?
' U- |: U7 t& {* }% M3 Y( p
( V1 ^8 v3 y7 q) z' u9 Q2.“使用TF卡进行烧写时发现烧写一半卡住”# Z7 M+ P/ B( `# k: k
3 A5 `% _' |& W+ s0 Q6 K
; @+ L* r8 p# k; w! V: x% k5 z% n2 `# I" L* w
! w' T5 v4 o0 q, _
问题描述——
. B( u& l1 x2 l
+ d ^! n! c# e h0 N' T# {; N/ T7 F客户自制底板去掉PCIe,使用TF卡烧写时看到命令行打印信息在下述位置卡住:6 c1 G) G# L+ X
3 S' K% L4 n+ B5 f, S8 ?$ f* S
* b( }' E0 q; Z9 [8 F7 J* f' c1 r
$ j4 J' _" [3 B6 Y) Q" ^# t( `
8 d) Y- W8 \. W![]() [backcolor=rgba(18, 18, 18, 0.5)]
& S6 _, Z, ~; i& V B) S7 b/ i3 f! F+ [5 U/ g0 A* Z T! I6 W
4 q C( H* U6 {/ H" @- t- }5 Q4 S& C
/ t+ B8 t! q2 h7 C# q8 {编辑切换为居中( j4 Z" ^( S5 D( J5 J
. r+ f0 ?$ w: M m% u! i' K: ]$ n { l( o' j
7 N$ c$ d0 @6 W! p
& S" x A+ J) e! r* S7 i" o4 s
添加图片注释,不超过 140 字(可选)
9 `& v# B! g: s, L. o% s. Y' ~
5 a3 J" U3 R* u; M4 s0 R7 k
! \% D* J r1 _) f* {$ x
( e3 f* D# i6 y) q注意:并不一定就卡在上述位置,但一定在上述打印信息附近,不会太远。: V& e4 T- L; h4 f
8 j. r7 C7 D* U9 v& }5 M
" W6 @" _0 ]1 u: f! t( W5 z+ d
7 h) F5 y; Z* [8 x
; Q/ T1 d$ @$ e) {产生原因——
1 U8 D: Y4 P1 c+ f# \' `- p+ C: }- C! [3 ?
烧写引导镜像中的PCIe的启动影响了烧写,需要替换烧写工具中的内核阶段引导镜像。
9 V" L {. \& e# r W. y* Y" G. r+ D4 X$ ?! `8 [
" g5 Z: L* v h3 u, U# b1 _4 }5 A3 U# d( B1 X2 @
8 \- O/ @2 Q' a8 a1 d, V
解决办法——
" ~, f' x- Q9 X3 _" A0 @- t2 X, n A: z( R0 a
首先按照问题中的方法修改内核设备树并编译。进入“OK8MQ-linux-sdk/tools/update”路径,可看到该路径下有很多dtb文件:4 [. {, _2 a& @0 y3 ^
8 h j7 m" V0 W) z4 K& Q
2 s* d+ R& f" @* g
) D, p. P. V$ r' w* N% _( p( ?- C _: @. c% D$ H1 x
![]() [backcolor=rgba(18, 18, 18, 0.5)] : e. q( a: u' L# V8 s% g
" Z3 t# U$ g1 R) k" D1 ?/ P
. V. ^4 g- H6 j9 n: x* X; Q- x, p7 T' J/ l. ` _, y
6 H% q8 j2 x3 G( V$ _编辑切换为居中; b# n" r! e, x# v
9 |$ ]) {0 {0 s9 n) B+ L
, t1 w* y9 l% Y0 t- |
7 K, M) t1 S8 ]: z0 U- e. F& N6 k, n) U
添加图片注释,不超过 140 字(可选) ]0 i- V" Y; Z* u) u, u
7 e9 t2 g9 J9 t
! F4 {: t6 y j" C# X0 B# X, L3 R
% {* A5 m. C2 [2 k3 s- O( K' `; {- m) G
用编译生成的“images/boot”路径下的ok8mq-evk.dtb替换掉当前路径下的ok8mq-evk.dtb。
9 a7 a# A$ Z4 q
: G# V& \0 Y+ w' O$ w
: E' d0 q- U" i" t* K$ P5 Q
% H# v; |! N& t' w5 d% z/ ?( Z' v! y6 w) S( Y& E2 Y+ ]
执行编译命令,生成新的烧写工具:
9 O# }5 A- I6 B* O: v. B, k; ~7 r: d
2 |7 {9 t; Q" c5 N* Z7 c
! j5 j- {" p, A
, i6 a- M. S( w![]() [backcolor=rgba(18, 18, 18, 0.5)]
; G4 [( E+ ~/ {% Y4 T/ S
2 A" ^7 F. P/ B: @" m
1 d* X& a A u% \; F$ Y5 Q8 x; W+ L# K% ?
9 ^: v* U3 t5 B( Z5 h; n
编辑切换为居中
2 E* H" t+ ` @" n
2 A, q& m# T8 R; Z6 u
- L) L% z% D1 R
& Q5 o8 c/ v; j+ n
" R x- o8 c$ A1 a7 Z! z添加图片注释,不超过 140 字(可选)
) X3 C, O0 f0 o: M% R
, i& e; C8 o' F0 h ]% ? |+ n& O+ s9 s8 C5 [2 H' G8 U
* S+ k! b. F9 J ]- @$ ~# r. S# A s
* y" h9 C! H" A- }使用新生成的update.itb替换掉完成制卡后TF卡中的update.itb,正常进行TF卡烧写。
0 o' C; \+ c3 S/ o( g
* V: A, @$ v; @, j1 c进入OK8MQ-linux-sdk/tools/sdfuse路径,可看到新生成的烧写工具update.itb。
% S% J4 K; p; f( X. b! V. T% ~
, t' s' S3 C. R' o: j# G, w" G8 ~8 W, C' o/ p
# \- V: I$ f& B9 l
# C; J6 m! j& s7 Q0 z# m
注意:
- S* H) [$ n) S% t! t$ z) h) G2 g/ G' c" y9 Y
- 我们的烧写工具部分源码是不开源的,若您确实需要做相应更改请联系您的对接销售,由我们帮您修改。
- OTG烧写不会因没有PCIe而受到影响。, u+ l/ v$ n- d' A! A
9 r. H" t7 L2 ^6 G% _
8 F- h; d# A6 W. ?
# N6 R6 j) b- P6 f0 I4 E+ R" H上述的两个问题就是用户在自制底板去掉PCIe时可能会遇到的两种问题。
+ L% r: k5 B4 e. r3 ~/ q+ R
+ b7 t" K/ g% g9 a2 D7 ]4 D- b* M$ d7 _
' r$ q0 k* K3 u% b) \, e8 r/ S6 w; d# z' b7 R2 O" j& ]( W9 c
当然,只设计了一路PCIe的情况也需要注意:
, T! P6 ?4 {/ a$ \# q7 S$ i9 K! J- ]: W) H) T
如果自制底板只做了一路PCIe,只焊了一个时钟芯片,也是会影响启动的。那么也需要修改设备树,关闭未做出的那一路PCIe;
5 E' }# L& `- V& b
. H# j0 X! |) L* `8 W9 y5 k+ M0 ^
) V2 ~. J4 ?7 m/ S5 w5 P' C
9 u7 e* k* M& U3 }& [如果自制底板只做了一路PCIe,而差分时钟焊的不是与接口对应的,那在命令行用lspci命令查询就会找不到设备。
! i8 p, `' ?' `( x
- U; R8 \6 L; I7 I0 o0 R- ~
; Y* p' b8 U; O( U; F3 |$ ^
1 @' V* s! g0 D9 G Y% | I
" u/ X( P: f: F( ?+ ^$ z2 x
z; Y+ i$ \$ P5 P/ u' ?, X |
|