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
相关推荐
bosins1 小时前
WSL2 启动即崩溃?调整超时参数解决 Docker 阻塞问题
linux·docker·wsl
web守墓人2 小时前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
kuroomi2 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
daemon.qiang3 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
2401_869769594 小时前
linux 权限 指令与权限(重启之后)
linux
码农客栈4 小时前
Linux CAN 驱动
linux·驱动开发
GeW6 小时前
红帽RHCE从挂科边缘到一次过,我做对了什么
linux
时空自由民.6 小时前
WSL解决USB 串口连接问题与linux串口权限问题
linux·单片机
OpenPomeloxCommunity6 小时前
Linux驱动基础(三):firmware的声明与加载
linux·操作系统
云计算练习生6 小时前
什么是系统调用?为什么程序访问硬件必须经过它
linux·windows·操作系统·系统调用·操作系统原理