|
mhsxbbxr04l64066433858.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
mhsxbbxr04l64066433858.gif
2024-12-5 22:02 上傳
3 }% O) h, f; {9 F8 i
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
# S# D( g8 \& z, o/ C來源于小伙伴提問:
- ?( g6 p5 I! ^6 g d6 l) N5 E: }& J
8 T8 e7 r8 J! `; C6 k
ocsbogin2pq64066433958.png (45.49 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ocsbogin2pq64066433958.png
2024-12-5 22:02 上傳
2 W& D# \) X7 `% C! N8 v$ e
" f5 v( B. B1 w3 A1 _6 ^; Q
以太網(wǎng)驅(qū)動(dòng)開發(fā)中出現(xiàn)的問題通常涉及硬件、驅(qū)動(dòng)代碼、網(wǎng)絡(luò)協(xié)議棧等多個(gè)層面。6 _) c. s( t' F9 z5 x
: J& D/ Q; ^: p
npxh0z05dno64066434059.png (971.29 KB, 下載次數(shù): 0)
下載附件
保存到相冊
npxh0z05dno64066434059.png
2024-12-5 22:02 上傳
8 T9 q% t& m& m
- D2 ^1 m" |7 {
1
0 t6 `1 H4 L2 j問題現(xiàn)象5 E& b {- j) h- Q5 }" n
板卡有兩個(gè)網(wǎng)口。一個(gè)網(wǎng)口在拔掉另一個(gè)網(wǎng)口后,不再接收數(shù)據(jù)。通過打印發(fā)現(xiàn),沒有收到中斷信號。3 @; h* }2 V$ s5 m
1 g+ ]9 q3 V1 U! `
可能原因分析: L2 A3 P8 q; i1 R# b6 F
硬件連接問題
: [) N6 u9 ^4 R& f2 G兩個(gè)網(wǎng)口是否共享某些硬件資源,如中斷線、PHY地址或電源。是否存在硬件級的干擾或競爭。6 Y9 g; P( g/ [# o: y# i4 i6 `
0 M2 Z; l8 V- u, l6 X
* s: P& i# v$ [2 V5 _PHY管理與初始化問題( y! ]+ ]& {7 i& V& k
PHY可能被誤操作,導(dǎo)致一個(gè)網(wǎng)口拔掉另一個(gè)網(wǎng)口后,PHY狀態(tài)異常。網(wǎng)口的 PHY 地址沖突或配置問題可能會(huì)導(dǎo)致鏈路狀態(tài)檢測混亂。
8 O0 x+ x3 d" C- C9 a+ H8 t2 Y1 B+ k4 {
驅(qū)動(dòng)代碼問題
/ g; b& A5 A+ s$ f9 r中斷配置問題:中斷可能被錯(cuò)誤屏蔽或未正確清理。驅(qū)動(dòng)初始化邏輯問題:拔掉一個(gè)網(wǎng)口后,另一個(gè)網(wǎng)口的中斷或數(shù)據(jù)路徑可能被異常清理或復(fù)位。驅(qū)動(dòng)對多網(wǎng)口的狀態(tài)管理不當(dāng),例如某些全局變量被錯(cuò)誤共享。
1 g h2 ^; y3 G; ]- r3 M2 b
3 S. O1 O' o( |$ L. ]! I網(wǎng)絡(luò)協(xié)議棧問題
% A8 F: N1 ?5 ?/ E/ E# f- M網(wǎng)絡(luò)棧是否正確處理了鏈路變化的通知。某些情況下,協(xié)議?赡苓M(jìn)入異常狀態(tài),導(dǎo)致收不到數(shù)據(jù)。, i: n: W z3 J1 R
% ~ z% | ]0 Y9 @. R
2
) i( O6 E- e- j* t! q3 J具體排查步驟7 s) v* @2 G* T
1. 硬件層面
# j$ B( S; K) F4 ?& E5 k檢查硬件共享資源:
* P$ ]- r( Y/ Y3 z; X( J檢查網(wǎng)口是否使用獨(dú)立的 PHY 和中斷線。用萬用表測量中斷線是否獨(dú)立或在 PCB 上共享。確保 PHY 的電源、時(shí)鐘源等是獨(dú)立的。% o5 m9 S7 M6 i
' S# B0 F6 Q4 |7 Y2 e
鏈路狀態(tài)檢查:0 n X# ?0 W7 R' O6 {1 j$ I* E
使用示波器觀察拔掉網(wǎng)口時(shí)的 MDIO(管理數(shù)據(jù)接口)總線通信情況,看是否有錯(cuò)誤信號或意外操作。網(wǎng)口拔插行為驗(yàn)證:測試單獨(dú)使用一個(gè)網(wǎng)口(不接另一個(gè)網(wǎng)口)是否能夠正常工作。1 o% b- @/ S R5 e# ?) N3 U& Q0 A
. |( w% K) c: \: _& f* t/ C
2. 驅(qū)動(dòng)層面
: {" a0 }+ L" a( j; p N中斷管理0 I2 U% l% q! @- K9 l
確認(rèn)中斷是否被觸發(fā):查看中斷處理函數(shù)是否被調(diào)用。, h" J' z2 o4 H! [5 R# |
g+ r2 l' t/ n7 o在中斷服務(wù)程序(ISR)中加入統(tǒng)計(jì)計(jì)數(shù)和詳細(xì)打印,確認(rèn)拔插操作后是否仍能收到中斷信號。4 q/ i$ m( n2 J4 \6 k0 ~ o
% e4 j; m4 a7 v8 T) a" V; estatic int irq_count = 0;6 X4 J. i2 \# D
void eth_rx_irq_handler(void) { irq_count++; printk("IRQ triggered, count = %d
, v: R% S. d6 B& ^; ~& I", irq_count); ...}) X1 w: X% q7 L
中斷綁定問題:確保每個(gè)網(wǎng)口的中斷綁定到正確的設(shè)備。檢查中斷號是否被其他設(shè)備錯(cuò)誤占用。( V+ E O8 o1 ?5 x- f- c
6 N3 Q1 `! Q) C# {PHY 狀態(tài)管理2 g/ h- Y6 [7 P' \
檢查 PHY 鏈路狀態(tài):使用 MII/MDIO 接口讀取 PHY 狀態(tài)寄存器(如 BMSR 寄存器)。確保拔掉一個(gè)網(wǎng)口時(shí),另一個(gè)網(wǎng)口的 PHY 狀態(tài)未被錯(cuò)誤修改。; a' L5 B$ F l4 |9 ^5 ?" B
6 S* Q4 X8 v( R3 gint phy_status = read_phy_register(PHY_ADDR, PHY_BMSR);printk("PHY status: 0x%x
1 E8 R$ s% U* H& G2 P h", phy_status);' U0 o* w' W- Y9 }
在驅(qū)動(dòng)中打印 PHY 狀態(tài)的變化,確認(rèn)拔插時(shí)鏈路狀態(tài)是否異常變化。! X" p2 W: g! D: X
3 w2 \, H9 }9 C) m3 t
驅(qū)動(dòng)邏輯排查. X. `. Y8 ], R) R- t3 P0 d
復(fù)用變量問題:檢查是否有共享變量影響了兩個(gè)網(wǎng)口的狀態(tài)。/ M$ q' K7 U/ H* S
: C* D/ M4 M5 J$ S( }+ M- g確認(rèn)驅(qū)動(dòng)中是否有特定邏輯誤將兩個(gè)網(wǎng)口視為同一個(gè)設(shè)備。
9 m6 Q9 t! g: o p# N, p7 @7 @4 m" o7 J) e1 {, [
確認(rèn)網(wǎng)口復(fù)位過程中沒有影響其他網(wǎng)口的硬件或軟件狀態(tài)。
5 |7 j) T# g1 @6 U# T7 t37 k9 u* F5 ^0 W% M* W
網(wǎng)絡(luò)協(xié)議棧層面3 t4 ?# [3 H J# G+ p( C S
調(diào)試網(wǎng)絡(luò)棧接口:確認(rèn)網(wǎng)口數(shù)據(jù)路徑是否被正常處理(如 NAPI 機(jī)制或 Rx 描述符隊(duì)列)。鏈路通知事件:檢查拔掉一個(gè)網(wǎng)口后,另一個(gè)網(wǎng)口是否錯(cuò)誤地收到鏈路斷開通知。
f* T- L& U0 a6 g3 a) z5 a1 Q; {8 h, o
: }) m, B2 y, M" ?& b4' {0 w. q- T! W
系統(tǒng)與調(diào)試工具
+ F, Y4 U9 [" F: U使用工具監(jiān)控流量:; ?- C: o" q0 P! i
使用 Wireshark 或 tcpdump 捕獲數(shù)據(jù)包,觀察收發(fā)情況。查看是否有中斷丟失導(dǎo)致數(shù)據(jù)包未被正確處理。
: z3 X' q3 p4 L! y
* e. x6 D0 n% W. R) x使用寄存器對比狀態(tài):比較兩個(gè)網(wǎng)口的中斷寄存器、PHY 狀態(tài)寄存器、DMA 描述符等,找到差異。7 M4 [, O! ?5 B
; ^" I& \6 ?3 O+ Y# _& \4 K) K6 w4 X, h, c0 W& A i, O1 a
打印驅(qū)動(dòng)日志:在驅(qū)動(dòng)中添加詳細(xì)日志,包括中斷狀態(tài)、鏈路狀態(tài)、數(shù)據(jù)隊(duì)列狀態(tài)等。0 p" ^" W" a& h& E, ^% }+ R2 R
5
7 l# t* C. {; z, T4 M; \解決方向建議/ s6 k4 R; {6 h+ K3 I& i
確保硬件設(shè)計(jì)沒有資源沖突,尤其是中斷線、PHY 地址等。在驅(qū)動(dòng)中分離兩個(gè)網(wǎng)口的狀態(tài)管理,避免復(fù)用變量或錯(cuò)誤邏輯干擾。優(yōu)化鏈路狀態(tài)管理邏輯,確保 PHY 和協(xié)議棧能正確處理鏈路變化。增加打印和調(diào)試工具的使用,定位問題根因。
; l _. y" j# y6 I
' o8 J3 e5 W3 ~ f( ?如果有具體代碼片段或更詳細(xì)的硬件架構(gòu)描述,可以進(jìn)一步幫助分析。# _" R/ W3 n9 \: x( | c
dmeyqqztjtf64066434159.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
dmeyqqztjtf64066434159.jpg
2024-12-5 22:02 上傳
2 Z0 e, {$ Z# j* u* c7 f% [+ L, \. m
isnlxj5an4564066434259.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊
isnlxj5an4564066434259.gif
2024-12-5 22:02 上傳
" A1 h& b' h$ X8 A- \5 {( h
點(diǎn)擊閱讀原文,更精彩~ |
|