Linux内核mdio子系统
为什么要学习mdio子系统,因为一个新的硬件产品在开发之初,总是遇到这样或那样的问题,这其中包括网卡的问题。大部分soc内部有mac控制器,需要和外部phy芯片建立关联。mdio就是ethnet管理phy寄存器的桥梁。了解这些驱动的核心流程,才能尽快定位和调试软硬件问题。
参考内核源码版本:linux-5.3.4
为什么要学习mdio子系统,因为一个新的硬件产品在开发之初,总是遇到这样或那样的问题,这其中包括网卡的问题。大部分soc内部有mac控制器,需要和外部phy芯片建立关联。mdio就是ethnet管理phy寄存器的桥梁。了解这些驱动的核心流程,才能尽快定位和调试软硬件问题。
参考内核源码版本:linux-5.3.4
早期linux内核为设备驱动开发者提供了很少的基本功能接口:申请动态内存,保留I/O地址范围等。早期的硬件设备编程困难,即使属于同一总线上的两个不同硬件设备之间也很少有共性。因此,需要为设备驱动开发者设计一个通用的模型。现如今,情况不一样了。总线类型规范了硬件设备的内部设计,导致如今的即使是不同类型的设备都支持相似的功能,针对这样的设备的设备驱动应该关心以下实现:电源管理,即插即用和热插拔。系统中每一个硬件设备的电源都由内核来管理。比如一个电池供电的电脑进入“standby”模式,内核必须强制每一个硬件设备为低电状态。因此,每一个可以设定为”standby“状态的设备的驱动必须包含一个可以将硬件设备设定为低电状态的回调函数。同时硬件设备也要按照精确的顺序设定为”standby“状态,否则有些硬件设备可能进入错误的电源状态,例如,linux内核必须先将硬盘设定为”standby“状态,然后才是硬盘控制器,如果该顺序反了,硬盘控制器将不能给硬盘发送命令。为了实现该类的操作,Linux2.6提供了一些数据结构和函数接口,这些数据结构和接口为系统中所有的总线,设备和设备驱动提供了统一的操作方法。这个框架就叫做设备驱动模型。
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.