• 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.

  • 相关阅读:
    php 字符串
    iOS copy&mutableCopy理解
    Swift学习(二)
    Swift 学习一函数&函数属性&懒加载
    LICEcap GIF 屏幕录制工具
    UIApplication介绍
    进度条渐变色
    -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    DedeCms 5.7友情链接模块注入漏洞
    phpcms v9会员中心文件上传漏洞
  • 原文地址:https://www.cnblogs.com/zongfanstudy/p/13962480.html
Copyright © 2020-2023  润新知