U BOOT 功能及啟動流程解析

2021-10-13 07:12:45 字數 2552 閱讀 8458

第二階段

u-boot 全稱 universal boot loader,是遵循gpl條款的開放原始碼專案。 u-boot 是乙個主要用於嵌入式系統的引導引導程式,可以在x86計算機上建構,x86必須安裝有可支援特定平台結構的互動發展gnu工具鏈。主線目標功能是從flash中讀出核心,放到記憶體中,啟動核心。為了要實現這個功能,u-boot分為兩個階段,主要在start.s檔案中。

模組框架結構

cpu與處理器相關的檔案。每個子目錄中都包括cpu.c和interrupt.c、start.s、u-boot.lds

cpu.c:初始化cpu、設定指令cache和資料cache等

interrupt.c:設定系統的各種中斷和異常

start.s:是u-boot啟動時執行的第乙個檔案,它主要做最早期的系統初始化,**重定向和設定系統堆疊,為進入u-boot第二階段的c程式奠定基礎

board

已經支援的所有開發板相關檔案,其中包含sdram初始化**、flash底層驅動、板級初始化檔案。

其中的config.mk檔案定義了text_base,也就是**在記憶體的實際位址,非常重要。

common

與處理器體系結構無關的通用**,u-boot的命令解析**/common/command.c、所有命令的上層**cmd_.c、u-boot環境變數處理**env_.c等都位於該目錄下

drivers

包含幾乎所有外圍晶元的驅動,網絡卡、usb、串列埠、lcd、nand flash等等

disk

fsnet

支援cpu無關的重要子系統:

磁碟驅動的分割槽處理**

檔案系統:fat、jffs2、ext2等

網路協議:nfs、tftp、rarp、dhcp等等

include

標頭檔案,包括各cpu的暫存器定義,檔案系統、網路等等

configs子目錄下的檔案是與目標板相關的配置標頭檔案

docu-boot的說明文件,在修改配置檔案的時候可能用得上

lib_arm

處理器體系相關的初始化檔案

比較重要的是其中的board.c檔案,幾乎是所有架構的u-boot第二階段**入口函式和相關初始化函式存放的地方。

apiexamples

外部擴充套件應用程式的api和範例

nand_spl

onenand_ipl

post

一些特殊構架需要的啟動**和上電自檢程式**

libfdt

支援平坦裝置樹(flattened device trees)的庫檔案

tools

編譯s-record或u-boot映像等相關工具,製作bootm引導的核心映像檔案工具mkimage原始碼就在此

makefile

makeall

config.mk

rules.mk

mkconfig

控制整個編譯過程的主makefile檔案和規則檔案

changelog

changelog-before-u-boot-1.1.5

copying

credits

maintainers

readme

一些介紹性的文件、版權說明

備註:在第一階段進行的硬體初始化一般包括:關閉 watchdog、關中斷、設定 cpu的速度和時鐘頻率、 ram 初始化等。

output_format("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

output_arch(arm)

entry(_start)

sections

......

通過u-boot.lds,該檔案鏈結到第一階段的入口entry(_start):

_start 入口函式在start.s檔案中(arch目錄是arm公司設計的核心**,即cpu部分的**。)

u-boot/arch/arm/cpu/armv7目錄下start.s檔案是整個u-boot的入口。也就是說,整個u-boot執行的第一句**就是從start.s的第一句開始的。

start.s的詳細分析可參考

a. uboot啟動後自動執行列印出很多資訊(這些資訊就是uboot在第一和第二階段不斷進行初始化時,列印出來的資訊)。然後uboot進入了倒數bootdelay秒然後執行bootcmd對應的啟動命令。

b. 如果使用者沒有干涉則會執行bootcmd進入自動啟動核心流程(uboot就死掉了);此時使用者可以按下回車鍵打斷uboot的自動啟動進入uboot的命令列下。然後uboot就一直工作在命令列下。

c. uboot的命令列就是乙個死迴圈,迴圈體內不斷重複:接收命令、解析命令、執行命令。

uboot啟動流程概述 uboot啟動流程

u boot系統啟動流程 大多數bootloader都分為stage1和stage2兩大部分,u boot也不例外。依賴於cpu體系結構的 如裝置初始化 等 通常都放在stage1,且可以用組合語言來實現,而stage2則通常用c語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。2.1...

u boot啟動流程

uboot啟動流程分析 華清遠見嵌入式學院講師。uboot是嵌入式系統中最常用的bootloader,這裡我們以s3c2410為例分析一下uboot的啟動流程。首先通過uboot的鏈結檔案,我們可以看到uboot執行是執行的第一段 在start.s中。entry start sections ali...

uboot啟動流程

華清遠見嵌入式學院 講師。uboot是嵌入式系統中最常用的bootloader,這裡我們以s3c2410為例分析一下uboot的啟動流程。首先通過uboot的鏈結檔案,我們可以看到uboot執行是執行的第一段 在start.s中。entry start sections align 4 rodata...