電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 32|回復: 0
收起左側

以太網驅動怪事:拔掉一個網口后另一個網口收不到數據?

[復制鏈接]

660

主題

660

帖子

4567

積分

四級會員

Rank: 4

積分
4567
跳轉到指定樓層
樓主
發(fā)表于 2024-12-4 08:00:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
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
- 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( ~

* 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! w
  • static 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

    6 J3 S# E- j6 y$ X  ~: h3 M . w- M6 h* P" d: [/ D( i5 h; |
    點擊閱讀原文,更精彩~
  • 回復

    使用道具 舉報

    發(fā)表回復

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯系客服 關注微信 下載APP 返回頂部 返回列表