[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.pswp.cn/diannao/13223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13223.shtml
英文地址,請注明出處:http://en.pswp.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 …