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.

  • 相关阅读:
    二叉搜索树和双向链表 --剑指offer
    复杂链表的复制 --剑指offer
    二叉树中和为某一值的路径 --剑指offer
    二叉搜索树的后序遍历序列 --剑指offer
    从上往下打印二叉树 --剑指offer
    栈的压入、弹出序列 --剑指offer
    顺时针打印矩阵 --剑指offer
    树的子结构 --剑指offer
    JSON.toJSONString(joinPoint.getArgs())报错getOutputStream() has already been called for this response
    常用linux命令
  • 原文地址:https://www.cnblogs.com/zongfanstudy/p/13962480.html
Copyright © 2011-2022 走看看