一.结构体
struct mii_bus {
const char *name; //总线名
char id[MII_BUS_ID_SIZE]; //id
void *priv; //私有数据
int (*read)(struct mii_bus *bus, int phy_id, int regnum); //读方法
int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val); //写方法
int (*reset)(struct mii_bus *bus); //复位
struct mutex mdio_lock;
struct device *parent; //父设备
enum {
MDIOBUS_ALLOCATED = 1,
MDIOBUS_REGISTERED,
MDIOBUS_UNREGISTERED,
MDIOBUS_RELEASED,
} state; //总线状态
struct device dev; //设备文件
struct phy_device *phy_map[PHY_MAX_ADDR]; //PHY设备数组
u32 phy_mask;
int *irq; //中断
};
二.初始化过程
在phy_init函数中调用了mdio_bus_init初始化mdio总线
int __init mdio_bus_init(void)
{
int ret;
ret = class_register(&mdio_bus_class); //注册设备类
if (!ret) {
ret = bus_register(&mdio_bus_type); //注册mdio总线
if (ret)
class_unregister(&mdio_bus_class);
}
return ret;
}
设备类"/sys

本文详细介绍了Linux系统下MDIO总线的初始化过程,包括在phy_init函数中调用mdio_bus_init进行初始化,以及设备类和总线类型的设置。接着阐述了MDIO总线的注册步骤,包括mdiobus_alloc内存分配,结构体成员填充,以及mii_bus的注册,通过mdiobus_scan函数动态创建PHY设备。最后提到了mii、mdio、phy和mac之间的关系。
2326

被折叠的 条评论
为什么被折叠?



