Uboot - DM框架

DM(Driver Model)的作用就是把"设备"和"驱动"解耦,并提供统一的设备管理框架,如而 CLK、GPIO、SPI、I2C、MMC、USB 都只是运行在 DM 框架上的一个UCLASS。

DM 初始化入口:

scss 复制代码
dm_init()
dm_uninit()
dm_init_and_scan()
dm_scan_plat()
dm_scan_fdt()
dm_scan_other()
作用:
初始化 DM 根结构  
初始化 uclass_root  
扫描平台设备  
扫描设备树  
开始 bind 设备

UCLASS 管理函数:

uclass_get() 复制代码
uclass_find()
uclass_destroy()
uclass_add()
uclass_bind_device()
uclass_unbind_device()
uclass_find_device()
uclass_get_device()
uclass_first_device()
uclass_next_device()
uclass_first_device_err()
uclass_next_device_err()
作用:
根据 UCLASS_ID 找 struct uclass
创建 struct uclass
把 udevice 挂到 uc->dev_head
遍历某个 uclass 下的所有设备

DEVICE 绑定和 Probe 函数

device_bind() 复制代码
device_bind_driver()
device_bind_driver_to_node()
device_bind_by_name()
device_bind_common()

device_probe()
device_remove()
device_unbind()

device_get_child()
device_find_child()
device_find_first_child()
device_find_next_child()
device_find_global_by_ofnode()
作用:
创建 struct udevice
设置 dev->driver
设置 dev->uclass
设置 dev->parent
挂到父设备 child_head
挂到 uclass->dev_head
执行 probe/remove/unbind

Linker List / Driver 查找函数

lists_uclass_lookup() 复制代码
lists_driver_lookup_name()
lists_bind_fdt()
lists_bind_drivers()
作用:
从 __u_boot_list_2_uclass_driver 找 uclass_driver
从 __u_boot_list_2_driver 找 driver
根据 compatible 匹配 U_BOOT_DRIVER
绑定设备树节点

udevice 私有数据函数

dev_get_priv() 复制代码
dev_get_plat()
dev_get_uclass_priv()
dev_get_parent_priv()
dev_get_parent_plat()
dev_get_driver_data()
作用:
获取 driver 私有数据
获取 plat 数据
获取 uclass 私有数据
获取父设备私有数据
获取 of_match.data
相关推荐
2023自学中8 小时前
Linux 图形系统
linux
mounter62511 小时前
高性能网络技术演进与创新探索:RDMA、eBPF/XDP 深度解析及 LSF/MM/BPF 2023 专题演讲
linux·ebpf·linux kernel·kernel·rdma·xdp
名字还没想好☜11 小时前
Python itertools 实战:用 groupby、chain、islice 优雅处理大数据流
linux·windows·python·迭代器·itertools
ziguo112214 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
无垠的广袤14 小时前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
会编程的土豆14 小时前
MySQL 入门:库、表、行、主键是什么
linux·数据库·网络协议·http
△曉風殘月〆15 小时前
如何在Linux中安装Qt开发环境
linux·运维·qt
不会就选b16 小时前
Linux之文件--fd,重定向
linux
三十岁老牛再出发16 小时前
07.26每日总结
linux·c语言·mysql
fengyehongWorld17 小时前
Linux update-alternatives命令
linux