嵌入式linux 修改mac,MAC to MAC 环境下,嵌入式linux的修改

MAC to MAC ,网卡驱动应该如何调整

正常情况下,完整的网卡由MAC和PHY两部分组成。

PHY的含义很广,不知道的wiki之。

简单地说,是物理层芯片。在TCP/IP协议中,数据链路层之上的所有数据,都可以在你的内存里由软件来访问控制。但是最终在网线和光纤上的数据,不会严格按照内存里的数据发送。这是由物理特性决定的。例如高速串行总线上,如果有大量连续的1出现,会导致AC耦合电容充满,影响信号完整性。所以4/5b 、 8/10b转换是phy常见的工作。

MAC和phy之间是由MII以及衍生升级的RMII、RGMII、SGMII 连接。其中还有2根类似i2c的MDC/MDIO总线。MII用来传输大量的数据。MDC/MDIO用来访问PHY的寄存器,获取和配置链路状态。

phy的另外一头,再经过网络变压器,出来的就是熟悉的RJ45 了。

典型用法如下:

MAC ----MII及其衍生总线----PHY  -------网线、光纤------  PHY ----MII及其衍生总线---- MAC

MAC和PHY可以集合在一个芯片内,也可以分开,都很常见。phy寄存器也有一部分是遵循通用标准的。

在嵌入式产品中,典型的如交换机,很可能核心就是一个交换机芯片。高级的交换机芯片允许通过管理口IMP进行配置,这个IMP口通常连接到嵌入式cpu的网口上。这个cpu和交换机芯片都在同一个紧凑电路板上,如果它们之间再经过2个phy,实在浪费钱和电。

于是另一种经典应用诞生了: MAC to MAC

MAC----MII及其衍生总线---- MAC

在这种配置下,因为缺少了关键的phy,对于软件的影响很严重。没办法进行链路自动配置了,不知道速度、link、全双工/半双工。

在嵌入式linux环境下,需要uboot和linux都进行修改。

uboot需要配置交换机,强行设置交换机端的MAC为需要的速度和工作模式,强行设置为link 。

然后也需要强行设置cpu的对应网口,忽略phy的操作,强行配置速度和工作模式。然后才能在uboot下使用这个网口。

linux下也一样,会简单些,因为交换机端MAC已经配置好了。

linux的操作有些通用的可能么就简单写一下:

genphy_config_init 开头添加,

点击(此处)折叠或打开

#if 1

//xy add

if(phydev->addr==0x1e)

{

printk("p1013 eth1 has no phy,force to fixup ,step 1\n");

features |= SUPPORTED_Autoneg;

features |= SUPPORTED_1000baseT_Full;

goto end;

}

#endif

在phy_state_machine 的开头添加

点击(此处)折叠或打开

#if 1

//xy add

if(phydev->addr==0x1e)

{

phydev->link=1;

phydev->speed = SPEED_1000;

phydev->duplex = DUPLEX_FULL;

phydev->autoneg = AUTONEG_DISABLE;

phydev->state = PHY_RUNNING;

if(phydev->fix==0)

{

printk("p1013 eth1 has no phy,force to fixup,step 2 \n");

netif_carrier_on(phydev->attached_dev);

phydev->adjust_link(phydev->attached_dev);

phydev->fix=1;

}

}

#endif

这里增加了一个struct phy_device的成员fix,记录只需要修复一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值