[Bootloader][uboot]code总结

news2024/11/24 0:11:21

在这里插入图片描述

文章目录

  • 1、U_BOOT_DRIVER
  • 2、DM框架
    • dm_scan_platdata
    • dm_extended_scan_fdt

1、U_BOOT_DRIVER

在这里插入图片描述
使用这个宏可以定义一个驱动实例,宏定义是
在这里插入图片描述
其中使用的struct driver结构体
在这里插入图片描述
使用的ll_entry_declare宏定义是
在这里插入图片描述
归结为
在这里插入图片描述

2、DM框架

1、 DM框架
DM模型抽象出了以下四个概念/数据结构
在这里插入图片描述

其中uclass是
在这里插入图片描述

使用UCLASS_DRIVER定义一个uclass driver,uclass_driver是uclass的驱动,并不是具体硬件的土洞,做一些uclass通用的准备/回收工作。

udevice 是具体的硬件实例,dts中配置了两个硬件node,会有两个udevice,例如dts中配置了两个timer,就会有两个timer udevice,uboot会将udevice和它所属的uclass以及具体的驱动driver绑定起来。

driver 是具体硬件的驱动,对应每个硬件的驱动实现。使用U_BOOT_DRIVER定义一个驱动实例。

模型的全局数据结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/51a2e4bac93e4f02a752581a026763d1.pn

在 driver/core/root.h 和 root.c 文件中有 dm_init_and_scan 函数,进行dm框架的 init和设备树扫描。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7863827924354f389bbe26efa8f5f27d.p

dm_init 过程中使用的宏定义
在这里插入图片描述

Uboot有两种方式描述设备:①平台数据;②设备树方式。这店与Linux内核也一致。在dm_scan_platdata中,会扫描所有的平台数据并绑定驱动程序,将扫描所有可用的平台数据为每个数据创建驱动程序。

dm_scan_platdata

在这里插入图片描述

使用的lists_bind_drivers 函数,会搜索并将所有驱动程序绑定到父驱动程序,在文件drivers/core/lists.c中,传入的DM_ROOT_NON_CONST宏是dm_root,udevice设备的跟节点,作为parents:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/041b300d0c234181a076708edd7ca0f8.png

通过ll_entry_start 方式获取内存中某个section的数据,
此处是获取section(“.u_boot_list_2_driver_info_1”),在for循环中,获取到section的start位置,通过ll_entry_count 计算section中的数量,在循环中逐个识别,并bind。
在这里插入图片描述

section(“.u_boot_list_2_driver_info_1”)
在这里插入图片描述

Struct driver_info 是 实例化设备所需的信息。通过map文件查看到driver_info声明不多,大多数通过设备树更新。
在这里插入图片描述

device_bind_by_name函数在drivers/core/device.c 文件中,parent变量是dm_root,global变量的root变量,info是当前section的driver_info。
在这里插入图片描述

在lists_driver_lookup_name 函数中,根据name从driver段中查找
section(“.u_boot_list_2_driver_1”)
在这里插入图片描述

根据u-boot.map文件可以查看到
在这里插入图片描述

全部的段,由1开始,3结束,中间的记录都是 .u_boot_list_2_xxx_2_xxx 的格式。
在这里插入图片描述

dm_extended_scan_fdt

在这里插入图片描述
在这里插入图片描述

dm_scan_fdt函数分析
这个函数是如果u-boot配置了支持设备树绑定设备驱动,那么将会执行该函数。dm_scan_fdt函数用于扫描设备树,绑定驱动程序。这将扫描设备树并为每个节点创建一个驱动程序(只检查顶级子节点)。
和kernel的方法相似,通过match 属性compatible进行配对
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1679229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试之路 - 精准而优雅

引子 这几年业内一直在做精准测试,大都使用工具 diff 代码改动、分析代码覆盖率这些平台集成的能力。 业务测试中,我们在技术设计和代码实现的基础上也做了一些精减和精准的测试实践,通过深入测试有针对的设计 case,发现隐藏问题…

智游剪辑1.5.0发布!

智游剪辑1.5.0发布了,快来看看更新了啥功能吧! 主页卡片升级 现在功能卡片新增图标,比以前更好看更直观 我的收藏 遇到自己喜欢的功能直接点击收藏就可以了,后面我们就能快速找到这个功能 批量ncm转mp3功能 目前看后台有很多人…

STC8增强型单片机开发【热敏电阻】

目录 一、引言 二、热敏电阻概述 三、STC8增强型单片机简介 四、基于STC8单片机的热敏电阻测温系统 五、热敏电阻测温系统的优化与扩展 提高测量精度 扩展系统功能 六、 温度计算步骤 通过ADC采样计算出热敏电阻位置的电压 通过欧姆定律计算热敏电阻的阻值 通过阻值…

Java微信小程序订阅消息提醒的实现与对接

文章目录 一、准备工作1. 注册微信小程序,并开通订阅消息功能。2. 获取小程序的AppID和AppSecret。3. 在微信小程序管理后台,设置提醒模板,并获取模板ID。4. 小程序端需要获取用户订阅允许提醒的权限(1)引导用户触发订…

win11快速安装mysql数据库系统

win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意,此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上,输入…

【找到所有数组中消失的数字】leetcode,python

很菜的写法: class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:nlen(nums)#存1-Nnum_1[i for i in range(1,n1)]#预存数num_2[]nums.sort()for i in nums:num_1[i-1]0for i in num_1:if i!0:num_2.append(i)return num_2能过但是…

link.click()时浏览器报错The file at ‘data:image/png;base64,iVBORw

代码如下: const dataURL canvas.toDataURL({format: "png",width: 400,height: 400, });const link document.createElement("a"); link.download new Date().getTime();link.href dataURL; document.body.appendChild(link); link.click…

webpack优化构建速度示例-合理配置loader的include exclude:

实际上,babel-loader 在 Webpack 配置中默认并不包含 exclude 和 include 选项的默认值,通常,为了优化构建性能,开发者会显式地设置 exclude 和 include 选项,以便 babel-loader 只处理必要的文件。 src/index.js impo…

【漏洞复现】Secnet-智能路由系统弱口令

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统 0x02 漏洞描述 攻击者可直接利用弱口令登录系统 0x03 搜索语法 fofa: title"安网-智能路由系统" || title"智能路由系统" || title"安网科…

做海外问卷调查有什么方法技巧?

大家好,我是橙河老师,很久没更新文章了,一方面是比较忙,另一方面是觉得关于项目介绍的文章,写的也差不多了。 后面的文章,还是着重讲解不同渠道的特点、做题技巧、人设创建这些实战性的内容。 我不像其他公…

有什么操作简单的副业或兼职呢?

以下是操作简单的副业或兼职 1. 网络兼职 可以在网上找一些兼职工作,如网络营销、客服、文案撰写等,只需要有一台电脑和网络连接即可。 2. 手机任务 可以用手机做做致米宝库的任务,一天有一百多块钱,还可以电脑学习项目资源&am…

PCIE协议-2-事务层规范-Virtual Channel (VC) Mechanism

2.5 虚拟通道(VC)机制 虚拟通道(VC)机制提供了对可以在整个结构中传输使用TC(流量类别)标签区分的流量的支持。VC的基础是独立的结构资源(队列/缓冲区及其相关的控制逻辑)。这些资源…

异步I/O库-libuv介绍

1.简介 libuv是一个跨平台的支持事件驱动的异步I/O的库,使开发者可以以非阻塞的方式执行文件I/O操作、网络通信、子进程管理等。 libuv的主要特点包括: 事件循环:libuv有一个基于事件循环的模型,它不断地轮询事件,并…

VC++ 6.0开发文件重复整理工具开发

开发背景:手机上的文件越来越多,想要备份下文件结果文件太多杂乱无章且重复文件冗余存储造成存储空间滥发,所以决定开发一个小工具来整理重复文件。由于本人电脑运行慢,选择VC6.0作为开发IDE,操作虽然麻烦点&#xff0…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络,先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace ,所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

java技术:nacos

目录 一、docker安装 1、创建一个nacos 2、复制配置信息出来(方便修改配置文件) 3、删除nacos 4、修改配置文件(主要是一下几个) 6、创建数据库 nacos 7、重启nacos mysql 一、docker安装 1、创建一个nacos docker run …

添砖Java之路(其七)——static

目录 static: 1.被类的所有对象所共享(和c有点像) 2.多了一种调用方法,可以通过类名调用 3.随着类的加载而加载,是优先于对象的存在。 工具类: 为什么主类的方法要加static: 理解 public static void main&#…

你还在手动加好友?试试这款神器,释放双手自动添加!

你还在手动添加微信好友吗?尤其是在忙碌的时候,手动加好友不仅费时又很容易出错。试试这个自动添加好友神器——个微管理系统,释放你的双手,轻松拓展好友列表! 1、多号同时登录在线 系统支持多个微信号同时登录在线&…

USB-OTG:1、OTG原理介绍

目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…

运维别卷系列 - 云原生监控平台 之 05.prometheus alertManager 实践

文章目录 [toc]Alertmanager 简介Alertmanager 实现的核心概念GroupingInhibitionSilencesClient behaviorHigh Availability Alertmanager 配置文件globaltemplatesrouteinhibit_rulesreceivers Alertmanager 部署创建 cm创建 svc创建 stsPrometheus 配置告警Prometheus 配置文…