电子产业一站式赋能平台

PCB联盟网

搜索
查看: 238|回复: 0
收起左侧

以太网驱动怪事:拔掉一个网口后另一个网口收不到数据?

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

积分
8805
发表于 2024-12-4 08:00:00 | 显示全部楼层 |阅读模式

mhsxbbxr04l64066433858.gif

mhsxbbxr04l64066433858.gif
4 |/ q) e; s( V) V8 {' F
点击上方蓝色字体,关注我们
# D4 e" w/ b. E5 j$ f来源于小伙伴提问:
! A# w6 ~7 \) r
! \, S, H: D* Q& f- O: E& _; |

ocsbogin2pq64066433958.png

ocsbogin2pq64066433958.png

! O; S/ m0 u2 y& |* e( b- z; c2 h3 ~' a! a7 @. j; L4 ?
以太网驱动开发中出现的问题通常涉及硬件、驱动代码、网络协议栈等多个层面。& T5 D% x1 H( }+ u4 c
- r* l+ i9 m, F. L* p. V& ?5 Z3 P) T

npxh0z05dno64066434059.png

npxh0z05dno64066434059.png
7 t" |) G; Y; ?/ N, O
; o( n8 m5 o2 w* S( M9 w
1
& W1 W% @; k; n. ]2 [3 L$ p" h  b. L问题现象
# J( U. `2 |( d7 z板卡有两个网口。一个网口在拔掉另一个网口后,不再接收数据。通过打印发现,没有收到中断信号。9 I0 z3 B, V/ M, J$ a* T* O+ M

* X9 l$ L! n2 Q6 N. H可能原因分析
" T5 l2 e8 P9 ?8 q/ V! i% S硬件连接问题/ x* @6 A+ J+ c
  • 两个网口是否共享某些硬件资源,如中断线、PHY地址或电源。
  • 是否存在硬件级的干扰或竞争。
    6 m/ y- f4 X" s

    0 u/ n( x7 P- ]* E

    9 K* ]0 g7 g2 U, i, D8 g' g5 YPHY管理与初始化问题
    ! n5 r! o# S! s, d9 v4 r) p/ J, Y
  • PHY可能被误操作,导致一个网口拔掉另一个网口后,PHY状态异常。
  • 网口的 PHY 地址冲突或配置问题可能会导致链路状态检测混乱。
    % d/ q/ F  }2 K

    7 \0 s0 K4 B; }* S* l驱动代码问题
    3 t; {0 ?; Q% o; y7 v
  • 中断配置问题:中断可能被错误屏蔽或未正确清理。
  • 驱动初始化逻辑问题:拔掉一个网口后,另一个网口的中断或数据路径可能被异常清理或复位。
  • 驱动对多网口的状态管理不当,例如某些全局变量被错误共享。
    & ]5 v; t/ j% J; R, x

    ; m' g0 m1 q* W  c# G/ r网络协议栈问题. S2 g) i5 {- O+ F. ]% v
  • 网络栈是否正确处理了链路变化的通知。
  • 某些情况下,协议栈可能进入异常状态,导致收不到数据。& u2 T5 f$ X9 k8 v
    1 F# b2 t9 J! b+ K
    2: j& H& M2 A/ V7 P1 r
    具体排查步骤, ]6 ^8 `1 t% f+ w: |, i, I" C# \
    1. 硬件层面
    8 z% ^) n) |) v; f8 X检查硬件共享资源:  L2 b3 V* P2 C& b
  • 检查网口是否使用独立的 PHY 和中断线。用万用表测量中断线是否独立或在 PCB 上共享。
  • 确保 PHY 的电源、时钟源等是独立的。: T0 \$ d" o; R. Y
    $ `8 E6 t- ~3 h1 m" h3 _
    链路状态检查:
    - x2 t; u' m( F& ?
  • 使用示波器观察拔掉网口时的 MDIO(管理数据接口)总线通信情况,看是否有错误信号或意外操作。
  • 网口拔插行为验证:测试单独使用一个网口(不接另一个网口)是否能够正常工作。
    3 b6 Z8 I$ l4 n. y+ N

    1 e% c5 O7 d' d, t6 I  i2. 驱动层面
    : M) n( B6 y" S! V* O5 E中断管理: l) J, L' R* x- q2 E
    确认中断是否被触发:查看中断处理函数是否被调用。1 S) s/ W) e3 a; T, S6 r
    % [2 q7 e( n& C0 Z; Y/ z
    在中断服务程序(ISR)中加入统计计数和详细打印,确认拔插操作后是否仍能收到中断信号。
    5 Y0 k; u, p3 X( _0 F3 ?, I( A7 i. L$ }, e" W3 G9 F& }/ O0 N
  • static int irq_count = 0;
    3 T2 L0 a" W/ V( i  T) bvoid eth_rx_irq_handler(void) {    irq_count++;    printk("IRQ triggered, count = %d. t; _  `3 d( j8 o
    ", irq_count);    ...}3 U( ]) j2 Q1 h9 r& y6 ?0 y
    中断绑定问题:确保每个网口的中断绑定到正确的设备。检查中断号是否被其他设备错误占用。
    7 |8 U( L9 f' N6 k! E( O. w- ]
    4 n/ A! p) A' s. _4 B7 O7 hPHY 状态管理
    ! @+ g, P1 P% W5 F: v检查 PHY 链路状态:使用 MII/MDIO 接口读取 PHY 状态寄存器(如 BMSR 寄存器)。确保拔掉一个网口时,另一个网口的 PHY 状态未被错误修改。
    - J* P# ~6 p' l- \& Y
    9 w; b2 {  N: Z8 o' D
  • int phy_status = read_phy_register(PHY_ADDR, PHY_BMSR);printk("PHY status: 0x%x
    , s6 r  _5 A& Z8 u7 T/ T8 b7 c", phy_status);
    ( |4 ]! l2 d: m5 m$ }5 j在驱动中打印 PHY 状态的变化,确认拔插时链路状态是否异常变化。( n5 R1 _' w" _# l7 y$ @( c* D
    ) ~, A/ ~9 `$ `, u+ l+ G: q4 @
    驱动逻辑排查
    8 r" o% y9 S8 I3 X% X; |& ~* q复用变量问题:检查是否有共享变量影响了两个网口的状态。
    6 N0 @  D5 u6 b- H2 i! G4 ]% y' O2 L/ Y2 m
    确认驱动中是否有特定逻辑误将两个网口视为同一个设备。$ c0 {! E- O) E% |' p

    0 D. l+ M- X2 U4 W确认网口复位过程中没有影响其他网口的硬件或软件状态。
    + R8 Y# z8 E. m* V* [3
    5 [- J( v2 u7 n( j. i  \网络协议栈层面/ U; U* @$ Z, N8 ~  W
  • 调试网络栈接口:确认网口数据路径是否被正常处理(如 NAPI 机制或 Rx 描述符队列)。
  • 链路通知事件:检查拔掉一个网口后,另一个网口是否错误地收到链路断开通知。
    9 [! H+ Z, \# W, D3 O" z
    ! }4 Y7 @% `( g# S# g) o
    4
    , v# I" s& J  I/ J系统与调试工具% {; H: Y0 J! c* n/ I; M
    使用工具监控流量:( A0 @: A; y* y0 I7 |; W  N
  • 使用 Wireshark 或 tcpdump 捕获数据包,观察收发情况。
  • 查看是否有中断丢失导致数据包未被正确处理。* G1 K4 A5 ^* l
    8 k7 a3 F# ^- F( h7 g$ W0 y
    使用寄存器对比状态:比较两个网口的中断寄存器、PHY 状态寄存器、DMA 描述符等,找到差异。
      ~; a7 l. H9 v/ E, c
    ; ^3 y# d9 m" H" \5 T% w, A: [' v) Q
    ) I0 G7 m8 [$ {4 B. Q: M
    打印驱动日志:在驱动中添加详细日志,包括中断状态、链路状态、数据队列状态等。  Q* A0 v; Y3 B8 z( r
    5
    ' E  s" d3 C. B解决方向建议
    / R& L; W7 L' B$ ]0 F; o
  • 确保硬件设计没有资源冲突,尤其是中断线、PHY 地址等。
  • 在驱动中分离两个网口的状态管理,避免复用变量或错误逻辑干扰。
  • 优化链路状态管理逻辑,确保 PHY 和协议栈能正确处理链路变化。
  • 增加打印和调试工具的使用,定位问题根因。! P/ P& |6 F  p$ u. Z& \' j

    ) m8 x7 p, N2 Y/ b" r如果有具体代码片段或更详细的硬件架构描述,可以进一步帮助分析。
    ) i- {# q5 J* a( G2 p4 E/ m$ A4 n

    dmeyqqztjtf64066434159.jpg

    dmeyqqztjtf64066434159.jpg
    9 u" Q# L/ I  h! T% J+ p

    isnlxj5an4564066434259.gif

    isnlxj5an4564066434259.gif

    $ N5 Y9 S; c5 Y点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表