zoukankan      html  css  js  c++  java
  • linux下以太网功能不能正常使用的原因及解决办法

    一:以太网在bring up时遇到的问题
    检查寄存器基地址,寄存器定义,寄存器配置(百兆,千兆,rmii,rgmii,内部,外部phy), pinmux, 检查phy的配置.
    probe失败可能原因:
    1.MAC reset失败。检查电源,clock。
    2.无法读取phy id。检查phy的电源,clock,pinmux.
    能正确显示link状态,但是数据不通:
    1.检查寄存器配置,pinmux, 主要是rmii, rgmii相关配置
    2.检查phy driver是否正确匹配上,phy driver中的phy id与 phy device 中的phy id如果不一致的话,phy driver就匹配不成功,导致phy config函数没有执行到。

    二.传输过程中传输中断的问题

    tx方向的传输中断。增加每秒运行一次的work queue, 检查在dma队列中是否有待发送的数据(已经交给dma),如果有,记下队列index, 过5秒之后再检查这个待发送的数据是否已发送完成,如果还未完成,认为TX传输中止,reset ethernet.
    rx方向的传输中断。每条检查一次,检查phy的状态,如果状态异常,则reset ethernet. 还可以仿照TX方向增加监控和恢复机制。
    在reset ethernet时,需要注意kernel panic。 reset过程是,停止TX,RX,释放之前alloc的所有memory, 重新alloc memory, 初始化mac, 初始化phy。出现panic的原因是,驱动代码还在使用已经被释放了的memory。因为已经停止了TX,RX,按道理不会再运行TX,RX部分的代码了。最后发现是tx timer handler里面会操作memory。当停止TX,RX之后, 释放所有memory, 然后tx timer handler触发,操作被释放的memory, 导致panic. 解决方法是,减少tx timer的expire时间,并且在停止TX之后,增加delay, 使tx timer handler完成之后,再释放memory.

  • 相关阅读:
    webpack打包提示: Uncaught Error: Cannot find module 'strip-ansi'
    CentOS 7.6 内网穿透服务lanproxy部署
    《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集
    网络监控解决方案及拓扑图
    漫画:什么是 “混合云”?
    听说过Paas、Saas和Iaas,那你听说过Apaas吗?
    Squid设置用户名密码
    别再售卖 5块钱 的 Win10 激活码了,后果很严重
    Jackson 实体转Json、Json转实体
    Spring
  • 原文地址:https://www.cnblogs.com/zongfanstudy/p/13962480.html
Copyright © 2011-2022 走看看