Uboot驱动模型之框架driver-model(1/3)

本文详细介绍了U-boot的DriverModel(DM)驱动模型,包括uclass、driver、device的概念,以及它们之间的关系和创建过程。重点讲解了设备管理中的probe、remove、bind和unbind等关键步骤。驱动开发者只需在源文件中定义驱动,通过设备树配置设备即可。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

U-boot  driver-model 简称 DM。如字面意思,它是U-boot的驱动模型。就像Linux 内核的驱动模型一样,它提供着设备创建,设备与驱动绑定,设备管理等功能。

DM模型

数据结构

3da7c7569e5c4ef9a960bd014d0f81c3.png

  • 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。

        代码分析:

        c180c3328ed94cf797d8588373734cbd.png

uclass_driver的定义

        把uclass_driver定义到指定的内存段落,uboot提供了UCLASS_DRIVER()= {}方法:以UCLASS_ROOT分析如下:

33b55ef2e1b5448c814a5778a6bd8ba7.png

我们从u-boot.map中可以看到定义后具体的模样:

f29350d1e781432fa0cca90505f50306.png

从u-boot.map中我们还可以看到u_boot_list_2_uclass_1以及.u_boot_list_2_class_3的地址:

ae2d66d3cbfd48918f4973da585767e0.png

udevice的定义

udevice的定义并不是hardcore的方式进行的&#x

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值