mdio 总线上的多个设备

Multiple devices on mdio bus

我在 MDIO 总线上有多个设备(一个 AR8035 PHY 和 6 个 DP83849IFVS 双 PHY)。总线连接到 linux 4.14.40 的 AM335x SoC。 Davinchi_mdio 扫描总线并找到所有设备并附加我认为适用于 AR8035 的驱动程序。如何通过 mdio 访问此总线?我想编写独立的(不是 PHY 驱动程序)内核模块,可以简单地访问 mdio 总线?我怎样才能做到这一点?我想用 phy_write/phy_read 做到这一点,但我无法从我的内核模块中获取 struct phy_device* 。如何从接口名称(“eth0”)中获取结构 phy_device*。就 locks/mutaxes 而言是否安全?

如果你已经有一个MDIO控制器的子系统,那么我可以考虑实现一个MDIO接口的UIO驱动,它处理读写。

与混乱的内核驱动程序相比,UIO 驱动程序是安全的,并且完全控制将由使用该 UIO 的用户应用程序完成。

** *每个UIO设备都是通过一个设备文件和几个sysfs属性文件来访问的。第一个设备的设备文件将被称为/dev/uio0,随后的设备将被称为/dev/uio1、/dev/uio2等。

/dev/uioX用于访问卡的地址space。只需使用 mmap() 访问卡的寄存器或 RAM 位置。

通过从 /dev/uioX 读取来处理中断。一旦中断发生,来自 /dev/uioX 的阻塞 read() 将 return。* **