Linux系統移植⑤:uboot啟動流程詳解-board_init_f執行過程

Linux系統移植⑤:uboot啟動流程詳解-board_init_f執行過程

_main 中會調用 board_init_f 函數。

請添加圖片描述

board_init_f 函數主要有兩個工作:

①初始化一系列外設,比如串口、定時器,或者打印一些消息等。

②初始化 gd 的各個成員變量, uboot 會將自己重定位到 DRAM 最后面的地址區域,也就是將自己拷貝到 DRAM 最后面的內存區域中。

board_init_f源碼如下:
在這里插入圖片描述
其中重點為initcall_run_list函數,其運行初始化序列 init_sequence_f 里面的一些列函數, init_sequence_f 里面包含了一系列的初始化函數, init_sequence_f 也是定義在文件common/board_f.c 中,其中存在大量條件編譯函數,用于判斷是否執行。
在這里插入圖片描述
init_sequence_f列表中包含了大量初始化函數,以下給出部分主要函數介紹

在setup_mon_len函數中計算了mon_len的長度,由于設備是ARM因此其計算規則如圖:

gd->mon_len的值實際上是U-Boot鏡像在內存中的實際占用大小也就是zImage的大小
在這里插入圖片描述
initf_malloc 函數初始化 gd 中跟 malloc 有關的成員變量,比如 malloc_limit,此函數會設置 gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN=0X400。 malloc_limit 表示 malloc內存池大小。
在這里插入圖片描述
(剩下部分函數僅做介紹不再查看其源碼)

get_clocks 函數:用于獲取一些時鐘值, I.MX6ULL 獲取的是 sdhc_clk 時鐘,也就是 SD 卡外設的時鐘。

env_init 函數:是和環境變量有關的,設置 gd 的成員變量 env_addr,也就是環境變量的保存地址。

init_baud_rate函數:用于初始化波特率,根據環境變量 baudrate 來初始化 gd->baudrate。

serial_init函數:初始化串口。

console_init_f函數:設置 gd->have_console 為 1,表示有個控制臺,此函數也將前面暫存在緩沖區中的數據通過控制臺打印出來。

display_options函數:通過串口輸出一些信息。

display_text_info函數:打印一些文本信息,如果開啟 UBOOT 的 DEBUG 功能的話就會輸出 text_base、 bss_start、 bss_end。

print_cpuinfo 函數:用于打印 CPU 信息。

show_board_info 函數:用于打印板子信息,會調用 checkboard 函數。

init_func_i2c 函數:用于初始化 I2C。

post_init_f函數:此函數用來完成一些測試,初始化 gd->post_init_f_time。

reserve_uboot函數: 留出重定位后的 uboot 所占用的內存區域, uboot 所占用大小由gd->mon_len 所指定,留出 uboot 的空間以后還要對 gd->relocaddr 做 4K 字節對齊,并且重新設置 gd->start_addr_sp

reserve_malloc函數:留出 malloc 區域,調整 gd->start_addr_sp 位置, malloc 區域由宏TOTAL_MALLOC_LEN 定義

reserve_board 函數:留出板子 bd 所占的內存區, bd 是結構體 bd_t, bd_t 大小為80 字節。

reserve_global_data 函數:保留出 gd_t 的內存區域, gd_t 結構體大小為 248B。

reserve_fdt函數:留出設備樹相關的內存區域。

reserve_stacks函數:留出棧空間,先對 gd->start_addr_sp 減去 16,然后做 16 字節對齊。如果使能 IRQ 的話還要留出 IRQ 相應的內存,具體工作是由 arch/arm/lib/stack.c 文件中的函數 arch_reserve_stacks 完成。

setup_dram_config 函數:設置 dram 信息,就是設置 gd->bd->bi_dram[0].start 和gd->bd->bi_dram[0].size,后面會傳遞給 linux 內核,告訴 linux DRAM 的起始地址和大小。

display_new_sp 函數:顯示新的 sp 位置,也就是 gd->start_addr_sp,不過要定義宏 DEBUG。

setup_reloc函數:設置 gd 的其他一些成員變量,供后面重定位的時候使用,并且將以前的 gd 拷貝到 gd->new_gd 處。需要使能 DEBUG 才能看到相應的信息輸出。

至此, board_init_f 函數就執行完成了。

其最終的內存分配圖如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85259.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git命令與代碼倉庫管理

步驟一、完成Gitee碼云上賬號注冊并新建代碼倉庫。 1.1 新建代碼倉庫 1.2 填寫信息并創建 1.3 獲取倉庫地址 https://gitee.com/dog-kidney/2022082206.git 步驟二、建立本地代碼倉庫,并連接到遠程代碼倉庫。 2.1初始化 git init 2.2添加倉庫 git remote add o…

資源占用多,Linux 系統中如何降低 CPU 資源消耗并提升利用率?

在 Linux 系統中降低 CPU 資源消耗并提升利用率,需從系統服務優化、進程管理、資源調度及內核參數調整等多維度入手。以下是適用于各類 Linux 發行版的通用優化方案,涵蓋基礎操作與進階策略: 一、服務與進程優化:減少無效資源占用 1. 關閉冗余系統服務 查看運行中的服務 …

技術與情感交織的一生 (八)

目錄 融合 東西廠公 接風宴 頭痛 “巴巴羅薩” 突擊 推進 助攻 96小時 寒冬 食堂 反攻 消耗 Delphi 西廠 內困 外患 “敦刻爾克” 多線作戰 大撤退 資源 融合 東西廠公 初次來到紙箱廠,是主廠區,感覺很大,相對西面正在…

webuploader分片上傳示例,服務端上傳文件到騰訊云CDN Teo 應用示例

本文環境:php7.3.4 CI3.0框架 一、大概步驟: (1)利用百度的webuploader插件,將大文件分片上傳的自己的服務器 (2)利用騰訊云接口從本服務器上傳到騰訊云 二、詳細代碼: 1、進入…

LeetCode 632.最小區間

你有 k 個 非遞減排列 的整數列表。找到一個 最小 區間&#xff0c;使得 k 個列表中的每個列表至少有一個數包含在其中。 我們定義如果 b-a < d-c 或者在 b-a d-c 時 a < c&#xff0c;則區間 [a,b] 比 [c,d] 小。 示例 1&#xff1a; 輸入&#xff1a;nums [[4,10,…

篇章五 系統性能優化——資源優化——CPU優化(2)

目錄 1.高級并發模式 1.1 工作竊取&#xff08;Work Stealing&#xff09; 1.工作竊取模式 2.ForkJoinPool實現 3.具體例子 1.2 結構化并發&#xff08;Structured Concurrency&#xff09; 1.結構化并發模式 2.Java 19 的 StructuredTaskScope 3.具體例子 1.3 對比與…

《中國電信運營商骨干網:歷史、現狀與未來演進》系列 第四篇:后發先至——中國移動CMNET的快速擴張與IP專網布局

摘要&#xff1a; 本文深入探討中國移動骨干網CMNET (AS9808) 的發展歷程、網絡架構及其與中國電信扁平化策略的差異。同時&#xff0c;解析其為承載高價值業務而構建的IP專用承載網的定位、結構與技術特點。最后&#xff0c;展望中國移動在5G、云計算和算力網絡時代&#xff0…

R情感分析:解碼文本中的情感

基于之前關于文本聚類和文本模型的博客&#xff0c;我們現在可以深入探討一個經典主題 - 情感分析。情感分析通過計算方式識別和分類文本中的情感&#xff0c;幫助理解公眾意見或消費者反饋。 什么是情感分析&#xff1f; 情感分析確定文本背后的情感基調&#xff0c;將其分類…

云徙渠道訂貨系統:賦能企業渠道管理的數字化引擎

在當今商業競爭日益激烈的環境下&#xff0c;企業如何高效管理和優化渠道成為關鍵問題。云徙渠道訂貨系統憑借其強大的數字化能力&#xff0c;為企業提供了全新的渠道管理解決方案&#xff0c;助力企業在復雜多變的市場環境中保持競爭力。 從渠道管理的痛點出發 傳統渠道管理方…

Nacos基礎使用(二):nacos作為配置中心

一、Nacos 配置中心核心屬性 在學習nacos 作為配置中心的使用之前&#xff0c;先看下Nacos 作為配置中心時的三個屬性&#xff0c;即&#xff1a; 命名空間、配置分組、配置集ID&#xff08;習慣稱為配置文件ID&#xff09;&#xff1b;在使用Nacos 作為配置中心 的過程中可以通…

SpringBoot 插件化架構的4種實現方案

在復雜業務場景下&#xff0c;傳統的單體應用架構往往面臨著功能擴展困難、代碼耦合嚴重、迭代效率低下等問題。 插件化架構作為一種模塊化設計思想的延伸&#xff0c;能夠使系統具備更好的擴展性和靈活性&#xff0c;實現"熱插拔"式的功能擴展。 本文將介紹Spring…

VGG-19(Visual Geometry Group)模型

VGG-19 是由牛津大學視覺幾何組和 Google DeepMind 的研究人員在 2014 年提出的一個非常經典的深度卷積神經網絡模型。 一 核心結構 &#xff08;1&#xff09;深度&#xff1a; 模型名稱中的 "19" 指的是模型擁有 19 層帶有權重的層&#xff08;通常指&#xff1a;…

Windows11 鼠標卡死任務欄卡死 假死解決方法

最近很多朋友都有一個問題&#xff0c;就是Windows11電腦 在編輯文檔或者是切換窗口的時候出現任務欄假死&#xff0c;鼠標左右鍵失靈等現象&#xff0c;想了幾天解決方案今天吧最直接的方法教給大家 首發玖毅論壇 玖毅論壇https://www.webbbs.cn/ 第一步&#xff1a; 第一種…

BeikeShop - 一個開源、用戶友好的跨境電子商務平臺

BeikeShop - 一個開源、用戶友好的跨境電子商務平臺 BeikeShop 是全球領先的基于 Laravel 框架的開源電子商務平臺&#xff0c;專為國際貿易和跨境電子商務行業設計。 該系統是 100% 開源的&#xff01;它支持多語言、多幣種、支付、物流、會員管理等廣泛的實用功能&#xff0…

基于大模型的膽囊結石全周期診療方案研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與目標 1.3 研究方法與創新點 二、大模型預測膽囊結石的原理與技術基礎 2.1 大模型概述 2.2 用于膽囊結石預測的數據來源 2.3 模型構建與訓練 2.4 模型評估指標 三、術前風險預測與手術方案制定 3.1 術前評估指標與數…

[論文閱讀] 人工智能 | Gen-n-Val:利用代理技術革新計算機視覺數據生成

Gen-n-Val&#xff1a;利用代理技術革新計算機視覺數據生成 論文信息 article{huang2025gennval,title{Gen-n-Val: Agentic Image Data Generation and Validation},author{Huang, Jing-En and Fang, I-Sheng and Huang, Tzuhsuan and Wang, Chih-Yu and Chen, Jun-Cheng},jo…

【AI論文】ReasonMed:一個370K的多智能體生成數據集,用于推進醫療推理

摘要&#xff1a;盡管基于推理的大型語言模型&#xff08;LLM&#xff09;在數學和編程方面表現出色&#xff0c;但它們在知識密集型醫療問題回答方面的能力仍未得到充分探索。為解決這一問題&#xff0c;我們推出了ReasonMed&#xff0c;這是最大的醫療推理數據集&#xff0c;…

singlefligt使用方法和源碼解讀

singlefligt使用方法和源碼解讀 介紹 sync.once保證其整個生命周期內只調用一次&#xff1b;而singleflight則可以保證在一定范圍內其只調用一次。 背景|使用場景 應對緩存擊穿&#xff1a;加鎖可以解決這個問題&#xff0c;但是加鎖不太靈活&#xff08;不能控制訪問頻率之…

HTTP 協議的基本概念(請求/響應流程、狀態碼、Header、方法)問題解決方案大全

HTTP 協議的基本概念&#xff08;請求/響應流程、狀態碼、Header、方法&#xff09;問題解決方案大全 一. 摘要 HTTP 協議是 Web 開發的基石&#xff0c;但初學者往往只停留在 GET、POST 的層面&#xff0c;對重定向機制、緩存控制、請求體解析等概念缺乏深入理解&#xff0c;…

Python中常用的函數

以下是Python中常用的函數分類整理&#xff0c;涵蓋基礎操作、數據處理、文件操作、面向對象等場景&#xff0c;并附上示例說明&#xff1a; --- ### **一、基礎內置函數** | 函數 | 作用 | 示例 | |----…