今年在FPGA上和IC那边一起验证了MAC/PHY, 基于linux 3.6.4, 这边小结一下代码.
phy的初始化顺序
第一步
phy_init
mdio_bus_init
bus_register(&mdio_bus_type);//autoprobe
phy_driver_register(&genphy_driver);
第二步, 具体的phy驱动的初始化(以icplus为例)
icplus_init
phy_drivers_register(icplus_driver, ARRAY_SIZE(icplus_driver));
phy_driver_register
new_driver->driver.bus = &mdio_bus_type; //也是mdio_bus_type
new_driver->driver.probe = phy_probe;
new_driver->driver.remove = phy_remove;
driver_register
bus_add_driver
driver_attach //下面没跑,因为先注册的是driver, 还没有match的device, 只是示例而已
__driver_attach
driver_match_device
drv->bus->match //也就是 mdio_bus_type 里面的 mdio_bus_match
第三步,网卡驱动
mt_eth_init
platform_driver_register(&mt_eth_driver);
mt_eth_drv_probe
mt_eth_mii_init