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() 完成初始化。