[Bootloader][uboot]code总结

在这里插入图片描述

文章目录

  • 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.mzph.cn/diannao/13223.shtml

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

相关文章

16.投影矩阵,最小二乘

文章目录 1. 投影矩阵1.1 投影矩阵P1.2 投影向量 1. 投影矩阵 1.1 投影矩阵P 根据上节知识,我们知道当我们在解 A X b AXb AXb的时候,发现当向量b不在矩阵A的列空间的时候,我们希望的是通过投影,将向量b投影到矩阵A的列空间中&…

ModuleNotFoundError: No module named ‘sklearn‘

ModuleNotFoundError: No module named sklearn 解决办法: pip install scikit-learn

7B2 PRO主题5.4.2免授权直接安装

B2 PRO 5.4.2 最新免授权版不再需要改hosts,直接在wordpress上传安装即可

网站接入百度云防护CDN后回源率非常高原因

最近,有站长反馈网站接入百度云防护后,网站回源率非常高。 今天百度云来给大家讲解下,CDN回源高的原因: 1.动态请求比较多 网站的动态请求很多,一般是回源率高的主要原因,因为CDN对待动态请求是每个请求…

Vue的学习 —— <网络请求库Axios>

目录 前言 正文 一、Axios基本概念 二、安装Axios 三、Axios使用方法 四、向服务器发送请求 前言 在之前的开发案例中,我们通常直接在组件中定义数据。但在实际的项目开发中,我们需要从服务器获取数据。当其他用户希望访问我们自己编写的网页时&a…

定档 11.2-3,COSCon'24 第九届中国开源年会暨开源社十周年嘉年华正式启动!

中国开源年会 COSCon 是业界最具影响力的开源盛会之一,由开源社在2015年首次发起,今年将举办第九届。 以其独特定位及日益增加的影响力,COSCon 吸引了越来越多的国内外企业、高校、开源组织/社区的大力支持。与一般企业、IT 媒体、行业协会举…

网络安全快速入门(十三)linux及vmware软件的网络配置

13.1 前言 在通过我们前面的了解,我们现在已经对Linux的基础知识有了大致的了解,今天我们来大概讲一下关于linux系统及vmware的网络配置问题,在这之前,我们需要对网络有一个大概的认识和了解,话不多说,我们…

01记-“计算机基础知识”

感觉媒体: 直接作用于人的感觉器官,使人产生直接感觉的媒体:声音、图形、图像、动画等。 表示媒体: 为了加工、处理和传输感觉媒体而人为研究、构造出来的一种媒体,常见的有各种编码方式,如文本编码、图像编码和声音编码等。 …

Java中静态方法为什么不能调用非静态成员?

在Java面试中,这个问题经常被问到,因为它不仅涉及到Java的基本语法规则,还深入到了JVM的工作机制。理解这个问题可以帮助面试者更好地掌握Java的静态和非静态成员的区别以及它们在内存中的分配和使用。 静态成员 vs 非静态成员 首先&#x…

AtCoder Beginner Contest 318 A题 Full Moon

A题:Full Moon 标签:模拟、数学题意:给定一个起始 m m m和上限 n n n,每次增量 p p p,求能加几次。题解:数据比较小,可以直接暴力;数学方法算的话,注意边界。代码&#…

HNU-算法设计与分析-作业5

第五次作业【回溯算法】 文章目录 第五次作业【回溯算法】<1> 算法分析题5-3 回溯法重写0-1背包<2> 算法分析题5-5 旅行商问题&#xff08;剪枝&#xff09;<3> 算法实现题5-2 最小长度电路板排列问题<4> 算法实现题5-7 n色方柱问题<5> 算法实现…

时间格式数据向前或向后归于整时

假设你有一个“时:分:秒”的时间格式数据&#xff0c;例如"12:34:56"&#xff0c;你想要将它向前归整于整时或者向后归整于整时&#xff0c;可以按照以下方法进行处理&#xff1a; 1、向前归整于整时&#xff1a;将分钟和秒数设置为0 import datetime# 原始时间 ti…

公共字段填充(AOP的使用)

Thread是线程池,ThreadLocal是线程变量,每个线程变量是封闭的,与其它线程变量分隔开来,在sky-common下的com.sky.context包下有一个Basecontext类 public class BaseContext {//每一个上下文创建了一个线程变量,用来存储long类型的id//创建三个方法,用来设置,取用,删除idpubli…

绝地求生:PGS3参赛队伍跳点一览,17压力有点大,4AM与PeRo大概率不roll点

在PCL春季赛结束后&#xff0c;PGS3的参赛队伍名单以及分组就正式确定了&#xff0c;最后确定名额的DDT和NH被安排在了A组和B组&#xff0c;感觉这次PGS3的分组比较均衡&#xff0c;没有“死亡之组”一说。这段时间已经有网友汇总了PGS3队伍在各个地图的跳点&#xff0c;并且把…

「AIGC算法」近邻算法原理详解

本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基于距离的分类算法&#xff0c;其核心思想是距离越近的样本点&#xff0c;其类别越有可能相似。以下是KNN算法的原理详解&#xff1a; 1. 算…

python安装ESPHome

1. powershell输入python 或者 python3 可以查看python版本&#xff0c;没安装则会自动跳出微软商店&#xff0c;安装即可(注意这里会自动安装在C盘默认路径) 2. pip3 install esphome -i https://mirrors.aliyun.com/pypi/simple 3. 根据报错信息找到esphome的安装目录&…

python脚本编辑oss文件

1、安装oss2库 rootubuntu:~# pip3 install oss2 Collecting oss2Downloading oss2-2.18.5.tar.gz (283 kB)|████████████████████████████████| 283 kB 6.9 MB/s Collecting aliyun-python-sdk-core>2.13.12Downloading aliyun-python-s…

Vmvare—windows中打不开摄像头

1、检查本地摄像头是否能正常打开 设备管理器—查看—显示隐藏设备—选中照相机—启动 USB2.0 HD UVC—打开相机查看 2、检查虚拟机的设置 虚拟机—虚拟机—可移动设备—USB2.0 HD UVC—勾选在状态栏中显示 虚拟机—打开windows主机—右小角选中圆圈图标—勾选连接主机 此时…

Android14音频进阶之ADSP调试(七十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

Java | Leetcode Java题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution {public int numDecodings(String s) {int n s.length();// a f[i-2], b f[i-1], cf[i]int a 0, b 1, c 0;for (int i 1; i < n; i) {c 0;if (s.charAt(i - 1) ! 0) {c b;}if (i > 1 && s.charAt(i …