fl2440 u boot啟動過程的簡要分析

2021-07-24 11:07:33 字數 2934 閱讀 1197

u-boot是在嵌入式開發中,經常使用的bootloader。

我們知道,在pc上引導程式一般是由bios(一段韌體程式)開始執行,然後讀取硬碟中位於mbr(main boot record,主引導記錄)中的bootloader(如grub),後進一步引導作業系統的啟動。

而在嵌入式系統中,通常沒有bios(有的cpu也會內嵌一小段啟動程式),所以整乙個系統的引導就由bootloader承擔了。

一、bootloader簡介

bootloader是在作業系統執行之前執行的一小段程式,通過bootloader,可以初始化硬體裝置、建立記憶體空間的對映表,從而建立適當的軟硬體環境,為最終呼叫作業系統核心做好準備。bootloader的主要執行任務就是將核心映象從硬碟上讀到ram中,然後跳轉到核心的入口點去執行,即開始啟動作業系統。系統在上電或復位時通常都從位址0x00000000處開始執行,而在這個位址處安排的通常就是系統的bootloader程式。

二、嵌入式 linux 系統中的軟體分布

一般可以分為如下部分:

1.引導引導程式:其中包括內部 rom 中的固化啟動**和 bootloader 兩部分。內部固化 rom 是廠家在晶元生產時候固化的,作用基本上是引導 bootloader。有的晶元比較複雜,比如 omap3 在 flash 中沒有**的時候有許多啟動方式:usb、 uart 或乙太網等等。而 s3c24x0 則很簡單,只有 norboot 和nandboot。

2. linux kernel 和 drivers。

3. 檔案系統。 包括根檔案系統和建立於 flash 記憶體裝置之上的檔案系統( ext4、ubi、 cramfs 等等)。它是提供管理系統的各種配置檔案以及系統執行使用者應用程式的良好執行環境及載體。

4. 應用程式。 使用者自定義的應用程式,存放於檔案系統之中。

在flash儲存器中,大致可以這麼分布:

(注:這只是在大部分的情況下,有些則沒有bootloader引數區,有些根檔案系統是initramfs等等。)

4.common:實現u-boot行下支援的命令,每乙個命令對應乙個檔案。

5.boards .cfg:板子配置更新後,要在這個檔案新增對應的支援

6.config.mk:由makefile編譯。

7.doc:文件目錄,有u-boot非常完善的文件。

8.drivers:u-boot支援的各種裝置的驅動程式。

9.fs:檔案系統。

10.include:u-boot使用的標頭檔案,還有各種硬體平台支援的彙編檔案,系統配置檔案和檔案系統支援的檔案。

11.lib:一些基礎庫的函式。

12.net:是與網路協議相關的**,bootp協議、tftp協議、nfs檔案系統得實現。

13.tools:是生成u-boot的工具。

14.u-boot.bin:就是我們完成配置、修改後,編譯生成的,往板子上燒錄的.bin檔案

五、u-boot啟動過程

要分析u-boot的啟動過程,就必須先找到u-boot最先實現的是哪些**,最先執行的是哪些任務。必須要有乙個且只能有乙個入口點,來告知編譯器入口在**。而這個入口點是在u-boot.lds中指定的,.lds檔案定義了連線時各個目標檔案是如何組織的:

其中entry(_start)說明程式從_start開始執行,而他指向的是arch/arm /cpu/arm920t/start.o檔案。因為我們用的是arm920t的cpu架構,在復位後從位址0x00000000取它的第一條指令,所以我們將flash對映到這個位址上,這樣在系統加電後,cpu將首先執行u-boot程式。

啟動的第一階段(彙編實現):

stage1:

1.設定異常向量。(附表)

2.cpu的始化:包括cpu的速度、mmu(記憶體管理單元),cache,時鐘,sdram 控制器等的初始化;

3.重定位:把自己從非易失性儲存器搬移到 ram 中;

4.分配堆疊空間,設定堆疊指標;

5.清零 bss 資料段;

6.跳轉到第二階段入口函式_start_armboot(),也就是開始進入c**部分;

主要進行的是這樣的設定:設定arm進入svc模式、禁止irq和fiq、關閉看門狗、遮蔽所有中斷。設定時鐘(fclk,hclk,pclk)、清空i/d cache、清空tlb、禁止mmu和cache、配置記憶體控制器、為搬運**做準備、搬移uboot映像到ram中(使用copy_loop實現)、分配堆疊、清空bss段。

參考網上的資料圖:

第二階段(c**實現):

stage2:

1.呼叫初始化函式;

2.初始化快閃儲存器裝置;

3.初始化記憶體分配函式;

4.初始化nandflash;

5.初始化顯示裝置;

6.初始化網路裝置;

7.等待使用者命令;

整個流程借用圖示說明:

具體在檔案的操作需要好好研究,這篇只是簡要的說明和分析,以及整理總結,深入的話得要花些功夫!

附: arm異常向量表:

參考資料:

u boot 啟動過程

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

JZ2440 Uboot 啟動過程分析續

1 uboot的第乙個啟動檔案為 cpu arm920t start.o 2 連線指令碼 board 100ask24x0 u boot.lds 連線位址為0x33f80000 下面開始分析start.s globl start start b reset 一 首先跳轉到 reset 1 首先將mc...

JZ2440 Uboot 啟動過程分析續

1 uboot的第乙個啟動檔案為 cpu arm920t start.o 2 連線指令碼 board 100ask24x0 u boot.lds 連線位址為0x33f80000 下面開始分析start.s globl start start b reset 一 首先跳轉到 reset 1 首先將mc...