Phy device主要是对phy的抽象,而net_device主要是对mac的抽象,而mdio总线以及mii_bus主要用于对phy设备的控制(包括设置phy设备的工作模式、速率模式、是否为自适应、phy的link状态等),而net_device需要根据phy的工作模式、速率模式、phy的link状态进行状态的同步,因此需要将net_device与phy device进行绑定与解绑。本章...
int(*read_status)(struct phy_device *phydev); int(*ack_interrupt)(struct phy_device *phydev); int(*config_intr)(struct phy_device *phydev); int(*did_interrupt)(struct phy_device *phydev); void(*remove)(struct phy_device *phydev); int(*match_phy_device)(struct phy_device *phydev...
->mdio_device_bus_match--通过mdiobus_create_device()函数创建的设备。判断名称是否一致。 ->phy_bus_match--通过phy_device_create()创建的设备。通过phy_id和phy_id_mask的与运算之后比较设备和driver是否一致。 5.3.2 MDIO总线相关API mdiobus_alloc()分配一个struct mii_bus结构体,然后of_mdiobus_registe...
int (*read_status)(struct phy_device *phydev); //读支援(Auto-negotiation)状态 int (*ack_interrupt)(struct phy_device *phydev); //清中断 int (*config_intr)(struct phy_device *phydev); //使能/禁用 中断 int (*did_interrupt)(struct phy_device *phydev); //判断是否由中断 void (*rem...
while ((dev = next_device(&i)) && !error) /* 循环到注册的 PHY 设备时 */ fn(dev, data) = __driver_attach() /* 匹配设备和驱动 */ driver_match_device(drv, dev) mdio_bus_match(dev, drv) phy_bus_match(dev, drv) /* 按 phy_id & phy_id_mask 匹配 */ ...
PHY与MAC整体的连接框图: 数据结构 每个phy 芯片会创建一个 struct phy_device 类型的设备,对应的有 struct phy_driver 类型的驱动,这两者实际上是挂载在 mdio_bus_type 总线上的,mac 会被注册成 struct net_device。 phy_device struct phy_device{struct phy_driver*drv;// PHY设备驱动struct mii_bus*bus;...
phy_device结构体:代表一个PHY设备实例,包含PHY设备的各种状态和配置信息。 phy_driver结构体:定义了一个PHY驱动的行为和操作函数,如复位、配置初始化、状态读取等。 mdio_bus结构体:代表MDIO总线,包含MDIO总线的各种属性和操作函数,如读写函数和复位函数。 3. 工作流程 初始化MDIO总线:在MAC设备驱动中,首先初始化...
phy_driver 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct phy_driver { struct mdio_driver_common mdiodrv; u32 phy_id; char *name; u32 phy_id_mask; u32 features; u32 flags; const void *driver_data; int (*soft_reset)(struct phy_device *phydev); int (*config_init)(struc...
phy状态机 phy_device_register //phy设备注册 device_add //这里是通过堆栈信息打印的,详见下面的 堆栈信息 bus_probe_device device_attach bus_for_each_drv __device_attach driver_probe_device phy_probe //非常重要的一个探测接口 phydev->supported = phydrv->features; //phydrv->features = PHY_...
phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; phy-reset-duration = <200>; 第二部分: ①“smsc,disable-energy-detect” 表明 PHY 芯片是SMSC公司的, 这样 Linux内核就会找到 SMSC 公司的 PHY 芯片驱动来驱动 LAN8720A。 ②ethernet-phy@”后面的数字是 PHY 的地址,ENET1 的 PHY 地址为 0,所以“...