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
相关推荐
动力 continue6 小时前
Linux 基础篇 · 压缩打包与用户管理
linux·服务器·基础命令linux
NJCloud7 小时前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix
ltl8 小时前
Cgroups v2:为什么内存限制设了,宿主机数据库还是被 OOM
linux
NJCloud8 小时前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb
2401_868534788 小时前
UNIX常用命令英文全称与中文解释整理
linux·运维
阿祖zu9 小时前
开源项目-让本地 Codex 临时接管远程 Linux 服务,实现快速运维
linux·gpt·agent
Android系统攻城狮11 小时前
Linux PipeWire深度解析之pw_factory_create_object调用流程与实战(七十二)
linux·音频进阶·pipewire音频进阶
lsh曙光11 小时前
playbook剧本(2)--Ansible变量
linux·运维·网络
lengjingzju11 小时前
编译与调试完全指南—第14章 系统配置与调优
linux
大鹏的NLP博客12 小时前
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
linux·c++·交叉编译