首页 > 其他分享 >uboot的driver和uclass_driver的区别?

uboot的driver和uclass_driver的区别?

时间:2023-10-25 22:32:22浏览次数:35  
标签:info uboot name bind driver uclass device

一,前言

之前看到关于设置gpio有多好api,这个c中的api可以,那个c中的api也可以,感觉有些混乱。所以我又细看了下,发现根本原因是我把uclass中的driver和uclass_driver弄乱了。

二,分析

1. device_bind_common中会创建device,其中name是哪里来的?

答:其实就是driver结构体中的name成员值。

a)

dm_scan

dm_scan_plat

lists_bind_drivers

bind_drivers_pass

device_bind_by_name

device_bind_common

b)

dm_init

->device_bind_by_name(&root_info)

->device_bind_common(info->name)

static struct driver_info root_info = {

.name  = "root_driver",

};

所以对于dm_init的info_name就是root_driver。另外一个特点device_bind_common前先要drv = lists_driver_lookup_name(info->name);这个info->name其实就是通过U_BOOT_DRIVER注册的driver结构体的.name。由于root_driver应该找不到,所以为device创建name是在dm_scan的路径。它会遍历driver。

2. driver和uclass_driver的区别?

答:driver就是去match device的。每个uclass中有很多device,每个device都绑定了具体实现操作的driver。对于一类设备,比如gpio,uclass对象仅一个,而uclass_driver就可以理解为某个uclass对于的driver,用来提供抽象的接口,便于操作下层具体的设备驱动。所以uclass_driver可以理解为中间层。比如board.c中要操作led灯,比较好的方法就用led的uclass,传入设备名称即可对齐操作。uclass_driver会遍历此uclass下的所有led设备,与name匹配后就找到device,然后调用device的driver->ops进行操作即可。所以若驱动都用,仅板子元素不同,应该最常用的就是uclass中的api来重写board.c然后就是修改设备树中的io,就完成一块板子的简单变更了。

3.关系图

uboot的driver和uclass_driver的区别?_设备树

三,小结

还是画一个图来说明uclass和uclass_driver,device和driver的层次关系比较好。

标签:info,uboot,name,bind,driver,uclass,device
From: https://blog.51cto.com/AppleCai/8025771

相关文章

  • FastIo driver
    由于你的驱动将要绑定到文件系统驱动的上边,文件系统除了处理正常的IRP 之外,还要处理所谓的FastIo.FastIo是CacheManager 调用所引发的一种没有irp 的请求。换句话说,除了正常的DispatchFunctions 之外,你还得为DriverObject 撰写另一组FastIoFunctions.这组函数的指针在dri......
  • NetSuite Test Driver Account 如何查看系统邮件发送的历史记录
    title:NetSuiteTestDriverAccount如何查看系统邮件发送历史记录date:2023-10-015:55:48tags:[NetSuite]categories:NetSuiteNetSuiteTestDriverAccount在系统中很多时候无法正常发邮件到邮箱的。比如:订单的通知邮件,定时邮件,emailAPI发送的邮件。如何查看测试......
  • uboot配置usbhost及代码初步分析--Apple的学习笔记
    一,前言之前uboot没配置过usb,但是现在uboot基于DM模型基本和linuxdriver类似了。那么为了学习linuxdriver,我可以先学习uboot来做技术储备也是一样的。而且usb在uboot上应该也有用武之地,所以有必要进行刻意练习。二,分析1,之前对发现driver用了wraper的方式来打包进行绑定,我理解唯一......
  • 安装chromedriver 118
    您可以按照以下步骤安装ChromeDriver118:首先,访问ChromeDriver的官方下载页面:https://sites.google.com/a/chromium.org/chromedriver/downloads在该页面中,找到适用于您操作系统的ChromeDriver118的下载链接,并点击下载。下载完成后,解压缩下载的文件。您将得到一个名为"chrom......
  • qemu和vscode调试uboot及设备模型数据流分析
    一,前言对于通用的流程,我需要形成闭环的代码理解,验证我理解的准确性。于是我选择用调试的方法来看数据流,用qemu来仿真,vsocde来调试,但是不能仿真am335。所以用了qemu支持仿真的v9。二,过程记录1,编译ubootmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distcleanrm-rf./v9make......
  • uboot为LED添加DM驱动--Apple的学习笔记
    一,前言开始玩所有板子一般都是先点灯,比如我可以在汇编中点灯,可以在board_init中用writel写寄存器点灯,当我要进一步熟悉下设备树驱动模型,不管学习linux还是学习uboot这块我理解类似,所以我要通过添加设备树及配置开关来实现默认打开led0和led1的功能。二,实现的过程1,先有了dts信息,我从......
  • uboot/Linux下MMC/SD/SDIO阅读记录
    1uboot下MMC/SD/SDIO1.1uboot下MMC/SD/SDIO相关配置uboot下关于MMC/SD/SDIO驱动以及工具配置:DeviceDrivers->MMCHostcontrollerSupportMMC/SD/SDIOcardsupport supportforMMC/SDwriteoperations--支持对MMC/SD/SDCar......
  • uboot定制自己的板子--Apple的学习笔记
    一,前言既然下载了最新的uboot版本,那么就玩玩吧,先要定制自己的板子。二,问题分析及解决1,出错信息U-BootSPL2023.10(Oct192023-19:58:50+0800)TryingtobootfromMMC1U-Boot2023.10(Oct192023-19:58:50+0800)AppleCai'sam335BoardCPU:AM335X-GPrev2.1......
  • Pytorch深度学习环境配置 | NVIDIA-driver + Pytorch + miniconda
    本贴为实战,看理论请移步【地表最强】深度学习环境配置攻略|【nvidia-driver】,【cudatoolkit】,【cudnn】,【pytorch】为了验证我的环境配置方法没有问题,我特意租了两小时云服务器来从0配置环境。云服务器厂家:Ucloudubuntu22.043090*21.装NVIDIA-driver参考:http......
  • 将达梦数据库的JDBC驱动包 DmJdbcDriver18.jar 安装到本地 Maven 仓库
    将达梦数据库的JDBC驱动包DmJdbcDriver18.jar安装到本地Maven仓库 一、问题背景在博客《SpringBootMyBatisPlus整合达梦数据库》中写道,从 https://eco.dameng.com/download/ 中下载达梦JDBC驱动包,如下: JDK1.8 对应的JDBC驱动包为:DmJdbcDriver18.jar ......