|
mhsxbbxr04l64066433858.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
mhsxbbxr04l64066433858.gif
2024-12-5 22:02 上傳
! ]( m% Q* G* @5 T
點擊上方藍色字體,關(guān)注我們+ T4 w. F4 A! @/ g( Q3 j- ^
來源于小伙伴提問:- x: d5 ^0 Y7 C# V
% K) t" v9 m. F! V6 D6 Z! \
ocsbogin2pq64066433958.png (45.49 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ocsbogin2pq64066433958.png
2024-12-5 22:02 上傳
- K2 z% Z+ j- f5 W% y4 W6 v. M) y7 m- \$ s0 S
以太網(wǎng)驅(qū)動開發(fā)中出現(xiàn)的問題通常涉及硬件、驅(qū)動代碼、網(wǎng)絡(luò)協(xié)議棧等多個層面。1 z5 K4 e5 b: a9 S1 N
+ g& t1 j- u6 k2 |
npxh0z05dno64066434059.png (971.29 KB, 下載次數(shù): 0)
下載附件
保存到相冊
npxh0z05dno64066434059.png
2024-12-5 22:02 上傳
, r4 |+ z5 k0 c3 _( f
6 B% B( D& D' p13 C+ U z+ w' ?1 F V* p& B' E; n; I
問題現(xiàn)象7 X, B+ h+ k$ |! ?0 I
板卡有兩個網(wǎng)口。一個網(wǎng)口在拔掉另一個網(wǎng)口后,不再接收數(shù)據(jù)。通過打印發(fā)現(xiàn),沒有收到中斷信號。' q a8 A9 w( u
9 f! g8 E, C% W$ c可能原因分析
- n2 d4 u; B: ]硬件連接問題
* G9 c7 }- U3 {, Y" P兩個網(wǎng)口是否共享某些硬件資源,如中斷線、PHY地址或電源。是否存在硬件級的干擾或競爭。* B" P" o, ]4 j5 n
; D, X+ T: p" J7 T& m
/ S. J1 D+ i+ X8 k2 QPHY管理與初始化問題
$ f( `' ^- j# j. I5 N( T: @( F# b7 k3 APHY可能被誤操作,導(dǎo)致一個網(wǎng)口拔掉另一個網(wǎng)口后,PHY狀態(tài)異常。網(wǎng)口的 PHY 地址沖突或配置問題可能會導(dǎo)致鏈路狀態(tài)檢測混亂。
f0 T8 g6 q" ?! J
0 b9 l+ ?9 G5 ~5 J5 t& k! N* t驅(qū)動代碼問題% N+ _+ I' [2 h( f3 h3 b+ X9 i
中斷配置問題:中斷可能被錯誤屏蔽或未正確清理。驅(qū)動初始化邏輯問題:拔掉一個網(wǎng)口后,另一個網(wǎng)口的中斷或數(shù)據(jù)路徑可能被異常清理或復(fù)位。驅(qū)動對多網(wǎng)口的狀態(tài)管理不當,例如某些全局變量被錯誤共享。( u0 E$ Q# {' r$ q4 e! W% E* F
0 n& @6 o! P6 K# X2 C7 ]網(wǎng)絡(luò)協(xié)議棧問題& ^8 s9 ~% B" l
網(wǎng)絡(luò)棧是否正確處理了鏈路變化的通知。某些情況下,協(xié)議?赡苓M入異常狀態(tài),導(dǎo)致收不到數(shù)據(jù)。. n, I" A' H8 p7 m9 R
+ ^5 f3 O) D% C* I7 O+ v2 K
2( n# m) Z: Q! X8 c
具體排查步驟: e! [; j! g! b" t2 I2 z
1. 硬件層面
% P6 O$ v( e) m* N; `檢查硬件共享資源:. ]7 d3 N8 h, P& T _3 L9 O
檢查網(wǎng)口是否使用獨立的 PHY 和中斷線。用萬用表測量中斷線是否獨立或在 PCB 上共享。確保 PHY 的電源、時鐘源等是獨立的。# q. ?+ R& y$ ^
2 e2 o s2 i4 A3 `0 I7 F鏈路狀態(tài)檢查:: g: s n' {4 ]' o
使用示波器觀察拔掉網(wǎng)口時的 MDIO(管理數(shù)據(jù)接口)總線通信情況,看是否有錯誤信號或意外操作。網(wǎng)口拔插行為驗證:測試單獨使用一個網(wǎng)口(不接另一個網(wǎng)口)是否能夠正常工作。: X8 T k' r j# t
* L' u# M5 Z3 ^- F% T! V9 {' t
2. 驅(qū)動層面" p a ]+ X1 f+ D4 o. \! C! k
中斷管理
9 T$ g9 Q: B2 C# }! }: n. D確認中斷是否被觸發(fā):查看中斷處理函數(shù)是否被調(diào)用。$ O# [ y5 @& D- L+ w! }% A
8 w6 b5 P) P2 P
在中斷服務(wù)程序(ISR)中加入統(tǒng)計計數(shù)和詳細打印,確認拔插操作后是否仍能收到中斷信號。
8 E, w- C! e3 l% R: Z5 B
; D' e; M5 p, z. R% L' astatic int irq_count = 0;
$ ~/ H6 U4 z1 H1 L$ wvoid eth_rx_irq_handler(void) { irq_count++; printk("IRQ triggered, count = %d
0 ?5 A( F3 k% Z8 Z" V0 b2 K", irq_count); ...}7 p' H5 S* G. n5 e2 ~3 e2 z1 ~6 _
中斷綁定問題:確保每個網(wǎng)口的中斷綁定到正確的設(shè)備。檢查中斷號是否被其他設(shè)備錯誤占用。* M" B# a: a9 p0 L; g4 I5 O) g: b. e
* n) O, {+ G% J" V3 z
PHY 狀態(tài)管理
7 i8 {2 r8 g$ j/ A$ a檢查 PHY 鏈路狀態(tài):使用 MII/MDIO 接口讀取 PHY 狀態(tài)寄存器(如 BMSR 寄存器)。確保拔掉一個網(wǎng)口時,另一個網(wǎng)口的 PHY 狀態(tài)未被錯誤修改。% H5 ^. _& c$ g6 a: R. r( q+ }& ?; x
2 r0 W8 l J7 j
int phy_status = read_phy_register(PHY_ADDR, PHY_BMSR);printk("PHY status: 0x%x
2 G2 ~3 v# e0 H0 _ I% ]+ J1 h", phy_status);
& ?7 ~2 `. G! o( v5 g5 X在驅(qū)動中打印 PHY 狀態(tài)的變化,確認拔插時鏈路狀態(tài)是否異常變化。 r" B1 ]& ^8 y! Z1 y
1 z( R L7 ~$ J3 {, @) ]4 G驅(qū)動邏輯排查
* ^ p8 z% }/ h. U. j* ^/ z復(fù)用變量問題:檢查是否有共享變量影響了兩個網(wǎng)口的狀態(tài)。
6 f/ n& `5 x U$ ~: v, V- g- z8 Q; M/ O- u9 Z. I
確認驅(qū)動中是否有特定邏輯誤將兩個網(wǎng)口視為同一個設(shè)備。8 E1 c8 H3 J- t% x8 @$ `* C
* ^* `/ z, u$ o, @! J6 Q6 ~& F確認網(wǎng)口復(fù)位過程中沒有影響其他網(wǎng)口的硬件或軟件狀態(tài)。
0 ~5 [7 N( j0 V- w30 X' s: t" n& N. P
網(wǎng)絡(luò)協(xié)議棧層面
4 @& X( K% U. k- s調(diào)試網(wǎng)絡(luò)棧接口:確認網(wǎng)口數(shù)據(jù)路徑是否被正常處理(如 NAPI 機制或 Rx 描述符隊列)。鏈路通知事件:檢查拔掉一個網(wǎng)口后,另一個網(wǎng)口是否錯誤地收到鏈路斷開通知。
$ C% S6 l. T6 i% v
$ K2 h* |/ y8 j4
) T& y' w, B( l5 x% x: y系統(tǒng)與調(diào)試工具8 }: x+ f& z8 u! |$ t0 V
使用工具監(jiān)控流量:
+ ]! f" X( h \: g6 h# @5 M使用 Wireshark 或 tcpdump 捕獲數(shù)據(jù)包,觀察收發(fā)情況。查看是否有中斷丟失導(dǎo)致數(shù)據(jù)包未被正確處理。
+ J: G, E4 [/ o& E- R
0 p: X. B' @ h7 z9 f& d$ ^使用寄存器對比狀態(tài):比較兩個網(wǎng)口的中斷寄存器、PHY 狀態(tài)寄存器、DMA 描述符等,找到差異。
T2 K% o& W* G. I8 T" ~: t
2 Y) W; v4 S" O# V$ S' M2 I0 n
; s2 d z( C4 Y' t0 h打印驅(qū)動日志:在驅(qū)動中添加詳細日志,包括中斷狀態(tài)、鏈路狀態(tài)、數(shù)據(jù)隊列狀態(tài)等。
+ Y: |4 Z: a0 S8 O+ A; a: p55 n/ ^$ X" O5 M! P1 U5 }2 N+ k& u2 U
解決方向建議
% f" c# W9 i" ~6 {確保硬件設(shè)計沒有資源沖突,尤其是中斷線、PHY 地址等。在驅(qū)動中分離兩個網(wǎng)口的狀態(tài)管理,避免復(fù)用變量或錯誤邏輯干擾。優(yōu)化鏈路狀態(tài)管理邏輯,確保 PHY 和協(xié)議棧能正確處理鏈路變化。增加打印和調(diào)試工具的使用,定位問題根因。, E' t, B1 M6 v$ y! V, W
" p# v/ D% u; R B) Z7 X" ]+ P7 u如果有具體代碼片段或更詳細的硬件架構(gòu)描述,可以進一步幫助分析。$ \) i) P9 `$ p' W& F
dmeyqqztjtf64066434159.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊
dmeyqqztjtf64066434159.jpg
2024-12-5 22:02 上傳
( A7 t! F" v; t8 S2 M: g* j- _1 t
isnlxj5an4564066434259.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊
isnlxj5an4564066434259.gif
2024-12-5 22:02 上傳
' e2 s, j1 v* b. Z1 B0 V4 G# d6 w點擊閱讀原文,更精彩~ |
|