09、PHY驱动框架
phy id的定义位置:kernel-4.14\drivers\net\phy\realtek.c


一、phy_driver结构体分析


二、phy驱动的初始化


phy_driver_register 的参数就是 PHY 驱动的结构体,该结构体中包含了 PHY 驱动的名字、ID、配置初始化函数等信息。

具体流程为:drive_register() 调用 drive_find()通过驱动所属 bus 的 driver容器drivers_kset来查找 driver,如果没有找到,调用 bus_add_driver()将driver加入到bus的drivers_kset,并生成些文件夹和链接文件。然后 执行driver_attach()调用bus_for_each_dev()遍历该总线上所有的 device,也就是遍历bus的 klist_devices 列表,对每个 device 使用回调函数__driver_attach(),__driver_attach()调用 driver_match_device()来鉴别 driver 和 device 是否匹配,匹配上之后执行 driver_probe_device()调用 really_probe()中的 bus 的 match 函数,看 device 和 driver 是否真的匹配了,如果匹配上,才执行真正的 probe 函数来建立连接指向自己的在 sys 中的 driver 目录,最后调用 module_add_driver()完成初始化。