linux网络设备—mdio总线

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

一.结构体

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;
}
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值