|
mhsxbbxr04l64066433858.gif (60.41 KB, 下載次數: 0)
下載附件
保存到相冊
mhsxbbxr04l64066433858.gif
2024-12-5 22:02 上傳
5 O% v4 q- c5 o$ t
點擊上方藍色字體,關注我們
$ }6 I+ H1 I( H/ r來源于小伙伴提問:
+ s2 J: ?9 |3 L9 s- E' |3 Y2 q& G: n# \. s/ T2 [, T
ocsbogin2pq64066433958.png (45.49 KB, 下載次數: 0)
下載附件
保存到相冊
ocsbogin2pq64066433958.png
2024-12-5 22:02 上傳
- J9 c1 K; N$ t" U8 b
) t W! N, o( |以太網驅動開發(fā)中出現的問題通常涉及硬件、驅動代碼、網絡協議棧等多個層面。
: j7 e/ I# U9 @: i; y6 U9 u, L$ d# {/ O* @# q6 x( ~
npxh0z05dno64066434059.png (971.29 KB, 下載次數: 0)
下載附件
保存到相冊
npxh0z05dno64066434059.png
2024-12-5 22:02 上傳
* S2 L; b4 n7 q$ y
: ^' p6 ~( U) E, `. s1
+ ~+ n& G- w- U/ M問題現象
6 H" y& z# W" }% P板卡有兩個網口。一個網口在拔掉另一個網口后,不再接收數據。通過打印發(fā)現,沒有收到中斷信號。/ M. v( l( B% ]( n
/ B& q3 f( j* [( {9 |, z( c可能原因分析
# A9 Q* l; t, l! J" P2 {4 G硬件連接問題
& E( {. t/ }, Q1 U8 A0 \兩個網口是否共享某些硬件資源,如中斷線、PHY地址或電源。是否存在硬件級的干擾或競爭。, C( I* x+ d; L4 P9 F
2 z$ f# G# j% w. ~5 U/ T8 ?- c
j0 o9 T' D I, ^, kPHY管理與初始化問題7 A% ~' v- k0 `( i
PHY可能被誤操作,導致一個網口拔掉另一個網口后,PHY狀態(tài)異常。網口的 PHY 地址沖突或配置問題可能會導致鏈路狀態(tài)檢測混亂。
+ t& J9 Q/ Q3 n+ `5 C# ]
* X; a1 Z) U5 J# I, T' ]8 t驅動代碼問題
/ w( d. K5 z- D1 K0 Q# m8 o中斷配置問題:中斷可能被錯誤屏蔽或未正確清理。驅動初始化邏輯問題:拔掉一個網口后,另一個網口的中斷或數據路徑可能被異常清理或復位。驅動對多網口的狀態(tài)管理不當,例如某些全局變量被錯誤共享。
% _( c- \) W' W6 x- F( S
% j5 l# A6 P+ ?, \/ }6 |/ p網絡協議棧問題
8 C7 i! K1 \; U q$ Z) \$ \網絡棧是否正確處理了鏈路變化的通知。某些情況下,協議?赡苓M入異常狀態(tài),導致收不到數據。
6 O3 p- ?, Z/ `- V" H5 y% X" ]! }9 f, a/ m t" q1 p
21 ?* T6 Z+ J. J# K: h+ L* B
具體排查步驟
. }" u. S' p" v' t3 B5 }1. 硬件層面
: l% U7 N$ o+ F/ I檢查硬件共享資源:" K+ t" q' A% A+ {, \, u, S% y
檢查網口是否使用獨立的 PHY 和中斷線。用萬用表測量中斷線是否獨立或在 PCB 上共享。確保 PHY 的電源、時鐘源等是獨立的。5 M5 ^& t- ?* G
$ C U. n' \) u+ j鏈路狀態(tài)檢查:& R1 i- C* e8 \* d4 j) Y8 v
使用示波器觀察拔掉網口時的 MDIO(管理數據接口)總線通信情況,看是否有錯誤信號或意外操作。網口拔插行為驗證:測試單獨使用一個網口(不接另一個網口)是否能夠正常工作。
9 x& |1 d9 P. K8 O4 ~. ]/ J4 `7 \3 b# L1 A
2. 驅動層面
0 u# c4 w E5 A8 U中斷管理
3 R" m' f# J; v確認中斷是否被觸發(fā):查看中斷處理函數是否被調用。
6 r" z1 J1 M4 p1 N
: W4 `5 X7 S4 J! }* i在中斷服務程序(ISR)中加入統(tǒng)計計數和詳細打印,確認拔插操作后是否仍能收到中斷信號。
' M+ t- B. C. U. u/ h7 b
; a/ _3 f& r1 k' P! wstatic int irq_count = 0;5 B6 E& `; `1 D5 Y/ t( Z" ^5 k4 n3 n
void eth_rx_irq_handler(void) { irq_count++; printk("IRQ triggered, count = %d0 ]: h4 B" ^, @
", irq_count); ...}
; H2 I4 Y$ k$ s% a$ Q$ |% M中斷綁定問題:確保每個網口的中斷綁定到正確的設備。檢查中斷號是否被其他設備錯誤占用。+ S5 a/ _ b! x5 E" c2 c1 m. Y! T
( O7 x( A% T% u5 d P' Y$ m
PHY 狀態(tài)管理
& P' }8 ]& H, V檢查 PHY 鏈路狀態(tài):使用 MII/MDIO 接口讀取 PHY 狀態(tài)寄存器(如 BMSR 寄存器)。確保拔掉一個網口時,另一個網口的 PHY 狀態(tài)未被錯誤修改。
& C$ J, y" C1 O1 j7 s0 Z
8 r1 D6 w5 S$ q! G; \int phy_status = read_phy_register(PHY_ADDR, PHY_BMSR);printk("PHY status: 0x%x
9 f6 W$ [$ H! d# K3 U. C", phy_status);
: N4 j. c& m* ?$ s在驅動中打印 PHY 狀態(tài)的變化,確認拔插時鏈路狀態(tài)是否異常變化。7 L4 s6 U. I! b4 f
; _4 d; p, g6 H. a, F+ v* `$ _8 Z驅動邏輯排查8 _ R4 A. D7 X) x. |1 K
復用變量問題:檢查是否有共享變量影響了兩個網口的狀態(tài)。
3 K P4 V3 S2 P1 h9 t1 O! f" d) R% C- v# o
確認驅動中是否有特定邏輯誤將兩個網口視為同一個設備。
/ Z! V* Z8 P- L# H J: }, ~$ `3 U @# X! t7 b& K
確認網口復位過程中沒有影響其他網口的硬件或軟件狀態(tài)。
' {; K4 M0 g$ Q. q2 \3
( j" I r! `7 i( ?- ^, W網絡協議棧層面, U8 X6 C+ a- ~. T+ N1 I. H
調試網絡棧接口:確認網口數據路徑是否被正常處理(如 NAPI 機制或 Rx 描述符隊列)。鏈路通知事件:檢查拔掉一個網口后,另一個網口是否錯誤地收到鏈路斷開通知。( Y% ]* l9 ^ | r- f% X9 N
1 ~. H" t s) {) }6 K) O6 {0 A
4
/ h8 D& A) s" g; Y- m: s6 g系統(tǒng)與調試工具
5 M4 p1 [+ m* F- A0 C9 f使用工具監(jiān)控流量: T D. x6 r/ j, ]
使用 Wireshark 或 tcpdump 捕獲數據包,觀察收發(fā)情況。查看是否有中斷丟失導致數據包未被正確處理。$ T u* [* r( o. s7 v7 |
6 \" k5 g7 {0 R9 Q. x" ~
使用寄存器對比狀態(tài):比較兩個網口的中斷寄存器、PHY 狀態(tài)寄存器、DMA 描述符等,找到差異。' U1 _0 Y8 k; p8 v5 J
, ]* l7 V8 s6 l8 ^4 F+ ]) N1 f
) j; K+ k+ J$ `' T8 ]打印驅動日志:在驅動中添加詳細日志,包括中斷狀態(tài)、鏈路狀態(tài)、數據隊列狀態(tài)等。0 G/ q- M( W! I, W6 s. n# t
5. K: u# b! Y a& `' _
解決方向建議
6 \+ F Y% Q+ I+ o$ n確保硬件設計沒有資源沖突,尤其是中斷線、PHY 地址等。在驅動中分離兩個網口的狀態(tài)管理,避免復用變量或錯誤邏輯干擾。優(yōu)化鏈路狀態(tài)管理邏輯,確保 PHY 和協議棧能正確處理鏈路變化。增加打印和調試工具的使用,定位問題根因。
- V& d, h7 u1 z4 K# d) l# g' Y \, F/ t6 W7 ~! @
如果有具體代碼片段或更詳細的硬件架構描述,可以進一步幫助分析。0 _- ]; i2 X( ~, |& ?. U* f4 a
dmeyqqztjtf64066434159.jpg (71.14 KB, 下載次數: 0)
下載附件
保存到相冊
dmeyqqztjtf64066434159.jpg
2024-12-5 22:02 上傳
6 J3 S# E- j6 y$ X ~: h3 M
isnlxj5an4564066434259.gif (45.46 KB, 下載次數: 0)
下載附件
保存到相冊
isnlxj5an4564066434259.gif
2024-12-5 22:02 上傳
. w- M6 h* P" d: [/ D( i5 h; |
點擊閱讀原文,更精彩~ |
|