DM即driver module,也就是驱动模型。
uboot为什么引入驱动模型呢?驱动模型又是一个怎样的一个模型呢?第一个问题很简单,既然uboot要引入驱动模型,那肯定是因为驱动模型要比老旧的驱动方案要好,至于好在哪里,那就必须要先搞清楚第二个问题了。
首先我们先区分两个概念,设备和驱动,也就是device和driver。device持有物理设备的资源信息,而driver实现对设备的管理。
以RTC芯片为例,硬件拓扑如下:
I2C控制器出I2C总线,RTC连在I2C总线上。
RTC对应的device持有RTC的资源信息,包括I2C地址,位宽,这些信息要么是接口相关的,要么是跟硬件设计相关的;而RTC对应的driver则负责对RTC的管理,如将从RTC中读出来的时间值解析为用户可以识别的时间值,以及将时间编码后写入RTC芯片,driver和device结合起来才能实现RTC芯片的访问和管理。
其实RTC的资源信息不止I2C地址和寄存器位宽,还有寄存器定义,那么寄存器定义是否也需要放入device中呢?其实不必,当然放进去也可以。其实硬件设备的资源信息是否要放入device中有一个关键的原则,如果该资源信息影响driver的通用性,就把它放到device中。拿RTC来说,RTC I2C地址是跟硬件设计相关的,不同的硬件设计下I2C地址会不一样,这个信息就需要放在device中,那么针对不同的硬件设备平台,就只需要修改device中的信息即可,而不需要修改driver。寄存器位宽和寄存器定义都是跟硬件设计无关的,完全是RTC自身的参数,所以可以不放在device中,直接在driv