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

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

在uboot中,board_init_r 是啟動流程中的一個關鍵函數,負責完成板級(board-specific)的后期初始化工作。以下是關于該函數的詳細說明:

1. 函數作用

board_init_r 是U-Boot在重定位(relocation)后執行的第二階段初始化函數,主要完成:

  • 外設初始化:如網卡、存儲設備(MMC/NAND)、USB等。
  • 環境變量加載:從Flash或EEPROM中讀取環境變量。
  • 命令行準備:初始化命令行解析器,準備接收用戶輸入。
  • 啟動延遲處理:處理bootdelay,等待用戶中斷或自動啟動。
  • 執行主循環:進入main_loop(),處理用戶命令或自動啟動內核。

其源碼如下:
在這里插入圖片描述
可以看出board_init_r函數中也是通過調用初始化序列 init_sequence_r進行依次初始化

給出部分代碼截圖和主要函數解釋
在這里插入圖片描述
initr_trace 函數:如果定義了宏 CONFIG_TRACE 的話就會調用函數 trace_init,初始化和調試跟蹤有關的內容。
initr_reloc 函數:用于設置 gd->flags,標記重定位完成。
initr_caches 函數:用于初始化 cache,使能 cache。
initr_reloc_global_data 函數:初始化重定位后 gd 的一些成員變量。
initr_barrier 函數: I.MX6ULL 未用到。
initr_malloc 函數:初始化 malloc。
initr_console_record 函數:初始化控制臺相關的內容, I.MX6ULL 未用到,空函數。
bootstage_relocate 函數:啟動狀態重定位。
initr_bootstage 函數:初始化 bootstage 什么的。
board_init 函數:板級初始化,包括 74XX 芯片, I2C、 FEC、 USB 和 QSPI 等。這里執行的是 mx6ull_alientek_emmc.c 文件中的 board_init 函數。
stdio_init_tables 函數: stdio 相關初始化。
initr_serial 函數:初始化串口。
initr_announce 函數:與調試有關,通知已經在 RAM 中運行。
power_init_board 函數:初始化電源芯片,正點原子的 I.MX6ULL 開發板沒有用到。
initr_flash 函數:對于 I.MX6ULL 而言,沒有定義宏 CONFIG_SYS_NO_FLASH的話函數 initr_flash 才有效。
initr_nand 函數:初始化 NAND,如果使用 NAND 版本核心板的話就會初始化NAND。
initr_mmc 函數:初始化 EMMC,如果使用 EMMC 版本核心板的話就會初始EMMC,
initr_env 函數:初始化環境變量。
initr_secondary_cpu 函數:初始化其他 CPU 核, I.MX6ULL 只有一個核,因此此函數沒用。
stdio_add_devices 函數:各種輸入輸出設備的初始化,如 LCD driver, I.MX6ULL使用 drv_video_init 函數初始化 LCD。
initr_jumptable 函數:初始化跳轉表。
console_init_r 函數 : 控制 臺初 始 化, 初 始化 完 成以 后 此函 數會 調 用stdio_print_current_devices 函數來打印出當前的控制臺設備
interrupt_init 函數:初始化中斷。
initr_enable_interrupts 函數:使能中斷。
initr_ethaddr 函數:初始化網絡地址,也就是獲取 MAC 地址。讀取環境變量“ethaddr”的值。
board_late_init 函數:板子后續初始化,此函數定義在文件 mx6ull_alientek_emmc.c中,如果環境變量存儲在 EMMC 或者 SD 卡中的話此函數會調用 board_late_mmc_env_init 函數初始化 EMMC/SD。會切換到正在時候用的 emmc 設備
initr_net 函數:初 始 化 網 絡 設 備 , 函 數 調 用 順 序 為 initr_net->eth_initialize->board_eth_init()
run_main_loop 函數:主循環,處理命令。

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

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

相關文章

OpenStack入門體驗

1.1云計算概述 相信大家都聽到很多的阿里云、騰訊云、百度云等等這些詞,那到底什么是云計算?云 計算又能做什么? 1.1.1什么是云計算 云計算(cloud computing)是一種基于網絡的超級計算模式,基于用戶的不同需求,提供所需的資源,包括計算資源、存儲資源、網絡資源等。云計算…

RK 安卓10/11平臺 HDMI-IN 調試

這篇文章我們介紹一下在安卓9、10、11的版本上,rk平臺的hdmi-in功能是如何實現的,下篇文章我們再介紹安卓12之后的版本有了什么變化。希望對在rk平臺調試hdmi-in功能的朋友有一些幫助。 目錄 (1)概述 (2)…

MongoDB學習記錄(快速入門)

MongoDB核心 基礎概念 數據庫 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。在內存中運行的,一旦程序運行結束或者計算機斷電,程序運行中的數據都會丟失。我們需要將一些程序運行的數據持久化到硬盤之中,以確保數據的安全性。數據庫…

阿里一面:微服務拆分需要考慮什么因素?

要拆分微服務,首先我們要了解微服務拆了會有什么問題?怎么合理拆服務? 拆分服務會帶來什么問題? 舉個電商系統下單扣庫存的例子。 對于單體應用,通訊在進程內部進行,下單方法調用扣庫存方法,…

3D高斯潑濺和4D高斯

1.高斯函數 想象你往平靜的湖水里扔一塊石頭,水波會以石頭落點為中心向外擴散,形成一個逐漸衰減的圓形波紋。高斯函數的形狀就和這個波紋類似: 中心最高(石頭落點,波峰最強)。越往外,高度&…

comfyui插件和comfyui mac安裝

mac comfyui安裝包 ComfyUI.zip,官方最新0.3.40,如果后續官方有迭代,可以直接通過git更新源碼升級 comfyui插件下載,解壓放到custom_nodes目錄下,包含 comfyui-animatediff-evolved(視頻插件) 和…

面試題SpringCloud

SpringCloud有哪些特征? 分布式/版本化配置服務注冊與發現路由服務到服務的調用負載均衡斷路器領導選舉和集群狀態分布式消息傳遞 SpringCloud核心組件? Eureka 注冊中心Ribbon 客戶端負載均衡Hystrix: 服務容錯處理Feign:聲明式Rest客戶端Zu…

ASR-PRO語音識別可能出現的問題

ASR-PRO語音識別可能出現的問題 4月份有一天刷到牢大/愛麗絲語音自開關燈設備,心血來潮,博主也是淺嘗了一下,由此也總結一下,實現此項目會出現的問題。 在實現愛麗絲開關燈模塊時ASRPRO語音識別可能出現的問題如下: …

蒼穹外賣--緩存菜品Spring Cache

Spring Cache是一個框架,實現了基于注解的緩存功能,只需要簡單地加一個注解,就能實現緩存功能。 Spring Cache提供了一層抽象,底層可以切換不同的緩存實現,例如: ①EHCache ②Caffeine ③Redis 常用注解…

個人簡歷制作MarkDown模板

MarkDown制作個人簡歷的模板放在了github上,大家如有需求,請自取: https://github.com/QQQQQQBY/ResumeTemplate 介紹一下此模板的特點: 🌸個人面試期間使用的、整理的簡歷格式,現在分享給大家。 ?簡歷采…

【MySQL數據庫 | 第五篇】DDL操作2

文章目錄 當前數據庫student的數據數據表操作 - 修改&刪除📖修改操作增加字段👏案例:向數據表student中添加字段 id修改字段的數據類型【只能修改字段的屬性】👏案例:將student表中字段age的屬性由tinyint unsigne…

【瀏覽器插件】如何開發一個Chrome瀏覽器插件

這篇文章來介紹一下,如何開發一個自己的Chrome瀏覽器插件程序。 Chrome瀏覽器插件,其實是讓瀏覽器替我們執行我們自己寫的代碼,既然要讓瀏覽器執行代碼,那么首先,就需要定義一個規范,也就是說,需要讓Chrome瀏覽器知道,你寫的程序是一個插件。 這就需要介紹一下插件中…

詳細講解Redis為什么被設計成單線程

Redis 被設計成單線程的原因主要有以下幾點,這些原因涉及性能優化、復雜性控制、數據一致性以及適用場景等多個方面: 1. 簡化設計與實現 避免鎖競爭:多線程環境下,多個線程訪問共享資源時需要加鎖來保證數據一致性。鎖的使用會增…

Hive 邏輯優化器

Optimizer PointLookupOptimizer 作用:把符合條件的 OR 表達式轉為 IN。 參數hive.optimize.point.lookup 設置是否開啟 PointLookupOptimizer,默認為 true. 參數 hive.optimize.point.lookup.min 控制多少個 OR 表達式轉為 IN,默認 31。 例…

ZYNQ Petalinux實戰:PCIe直通NVMe固態硬盤,解鎖存儲性能新極限!

突破SD卡和SATA的速度枷鎖!本文將手把手教你如何在ZYNQ平臺上通過PCIe接口驅動NVMe固態硬盤。從硬件設計、Linux內核配置到創新性的DMA零拷貝優化,實現2000MB/s+ 的存儲性能飛躍,附完整代碼解析和性能實測對比。 一、為什么選擇PCIe NVMe?存儲性能革命 ZYNQ傳統存儲方案面…

05-mcp-server案例分享-用豆包大模型 1.6 手搓文生圖視頻 MCP-server發布到PyPI官網

1前言 上期給大家介紹過mcp-server案例分享-用豆包大模型 1.6 手搓文生圖視頻 MCP-server。當時部署的方式使用了一個私有云SSE的部署。當時缺少一個本地部署的方式,有的小伙伴給我留言能不能有一個本地話部署方式了。今天就給大家帶來一個本地化部署的方案。 話不…

MCP Parameters 增加描述

場景:本地MCP開發完后是否發現CLINE上顯示的Parameters 顯示No description 方法1 :使用參數元數據 (Annotated) 可以使用 Pydantic 的with 類提供有關參數的其他元數據Annotated。這種方法更受歡迎,因為它更現代,并且將類型提示…

STM32 GPIO 寄存器開發

🔧 ?一、核心寄存器概覽? ?寄存器??功能??位寬??關鍵位域??GPIOx_CRL/CRH?配置引腳模式(輸入/輸出/復用/模擬)和輸出參數32位每4位控制1個引腳:CNF[1:0](模式) MODE[1:0](速度&am…

powershell 獲取 用戶及進程列表

在PowerShell中獲取用戶的進程列表,可以通過幾種方法實現。以下是一些常見的方法: 方法1:使用Get-WmiObject Get-WmiObject命令可以用來查詢Windows Management Instrumentation (WMI)數據庫,從而獲取關于進程和用戶的信息。 # …

量化面試綠皮書:15. 假幣一

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 15. 假幣一 有 10個袋子,每個袋子里有 100個相同的硬幣。 在除一個以外的所有袋子中,每枚硬幣重10 克。 然而&#x…