uboot 記憶體布局及啟動過程

2021-07-26 11:33:15 字數 1411 閱讀 4058

該布局由uboot.lds 檔案定義,在鏈結時候生成相應的二進位制映像。

首先定義起始位址為

0xc3e00000,接下來是中斷向量表(vector),大小為256位元組,按每個中斷向量占用4個位元組的跳轉位址算,做多可以有64個中斷向量;

2.一些基礎性的**段,它為下一步載入boot或者kernel做準備,其大小為0x1700位元組

3.是**段的後半部分,**段的大部分**在這裡

4.唯讀資料區

5.可讀寫資料區

6.uboot命令**區

7.未初始化資料段。

uboot啟動過程:

啟動uboot                                  啟動kernel

眾所周知,u-boot是存放在flash上的。系統啟動時,cpu會對映flash到它的記憶體空間(映

射一部分、還是全部flash空間?),然後執行 flash上的**。首先,進入

cpu/arc600/start.s中的入口_start,進行記憶體初始化,接著把u-boot的前0x1800位元組

置堆疊指標,為執行c函式做準備;下一步,執行c函式檢測在規定時間內是否有按鍵發生,

如有則載入boot的後半部分(0x40801800——data_end)並啟動boot,無則載入kernel並

啟動 kernel。u-boot啟動的前半部分流程如圖上圖所示.

u-boot啟動的後半部分,會進行heap、環境變數(env)的初始化,phy驅動的載入等工作,

然後進入乙個無限迴圈開始shell的執行,shell執行過程中的記憶體示意如下圖所示。

heap和stack依次排列在bss段的後面,圖中所示的free area則為u-boot未用到的記憶體。

上圖中,heap區域為malloc()提供記憶體。在uclib庫中,malloc()是通過sbrk()或者mmap()

實現的,而sbrk()和 mmap()是在核心中實現的。u-boot作為系統最早執行的程式,沒有內

核的支援。為了實現malloc(),它定義乙個32k的heap區域,在此區域的基礎上實現了簡

化版的sbrk()。

上圖中,stack區域是在u-boot啟動的前半部分中第三步設定的。它首先根據bss_end、heap

大小和stack大小算出stack_bottom的值,然後設定堆疊指標sp和幀指標fp為 stack_bottom - 4。

u boot 啟動過程

u boot 分為兩個階段第一階段是彙編,入口是 arch arm cpu armv7 start.s,第二階段是 c 語言,入 口是 board.c 第一階段 1.異常向量表定義 2.設定 svc32 模式 arm 七種工作模式 3.呼叫 cpu init crit 進行 cpu 相關初始化 1 ...

u boot啟動過程 1

u boot的啟動過程 1.start.s檔案 此彙編檔案是u boot啟動的第乙個檔案,首先確定是冷啟動還是熱啟動,boot cold or boot warm 通過對r21寫0x01 cold or ox02 warm 完成。接著在boot warm中 1 判斷是否定義config cogent...

u boot啟動過程分析

備註 本文中使用的u boot版本是2010.3第一階段 初始化soc相關的配置,例如 系統時鐘 mmu 看門狗等 並為c語言提供執行環境1 第一階段 組合語言階段.globl start start b reset 復位異常 進入管理模式 復位電平有效時觸發 ldr pc,undefined in...