暂无个人介绍
问题是这样的,内核启动识别网口的时候,多识别了一个,驱动本身是支持双网口的,理论上另一个phy不存在,应该识别不到。 后来发现是读phy_id的时候,对于不存在的Phy地址,有返回0的情况,但是内核认为只有0x1fffffff的才是空,多加了个判断条件得以解决。
下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。 将下面代码编译后,将可执行文件a.out 重命名为mdio mdio eth0 1 读取phy寄存器1的数值 mdio eth0 0 0x1120 将0x1120写入 phy寄存器1 eth0 为mac层控制器的名称, 一般为eth0 或mgmt0。
最近在一个项目中,集成一个交换机芯片的时候,遇到一些麻烦,发现交换机的性能总是上 不去,100M的交换机,实际交换能力只有10M。跟做硬件的同事一起,花了几周时间调试, 才找到问题。原来是接到交换机芯片上的几个子系统,用的Micrel 8041PHY芯片,默认关闭 了硬件流控,导致交换机无法通过流控来控制网络数据交换,结果使得其性能下降。而交换 机每个端口的PHY与子系统的PHY都使用的Auto Negotiation来协商链接状态,子系统默认不 支持流控,交换机也关闭了流控。