概述
U-boot driver-model 简称 DM。如字面意思,它是U-boot的驱动模型。就像Linux 内核的驱动模型一样,它提供着设备创建,设备与驱动绑定,设备管理等功能。
DM模型
数据结构
- ulcass:有相同操作方式的一组设备。一个uclass提供一种访问组内各个设备的方式,它们都是使用相同的接口。例如一个GPIO的uclass提供get/set 值的操作方式。一个I2C的uclass也许有10个I2C的ports,其中4个ports共用一个driver,另外6个ports共用另外一个driver。
- driver:提供与外设对话的代码并提供更高级一层的接口。
- device:绑定到特定端口或外围设备的驱动程序实例。
uclass的定义
uclass的定义并不是hardcore的方式进行的,它的定义依赖uclass_driver,uclass_driver的定义是hardcore方式。
uclass的定义或者说是创建原理是先在u_boot_list_2_uclass_1~.u_boot_list_2_class_3内存段落中根据uclass_id寻找匹配的uclass_driver,如果存在uclass_driver,则创建一个uclass_id的uclass。所以uclass的定义需要hardcore的方式定义一个uclass_driver。
代码分析:
uclass_driver的定义
把uclass_driver定义到指定的内存段落,uboot提供了UCLASS_DRIVER()= {}方法:以UCLASS_ROOT分析如下:
我们从u-boot.map中可以看到定义后具体的模样:
从u-boot.map中我们还可以看到u_boot_list_2_uclass_1以及.u_boot_list_2_class_3的地址:
udevice的定义
udevice的定义并不是hardcore的方式进行的&#x