天天看點

UBOOT啟動原理UBOOT啟動原理分析前言一、UBOOT是什麼?二、UBOOT啟動流程三.為什麼這麼啟動總結

UBOOT啟動原理分析

文章主要圍繞兩個問題探讨。一方面是啟動流程,另一方面是為什麼這麼啟動。

文章目錄

  • UBOOT啟動原理分析
  • 前言
  • 一、UBOOT是什麼?
  • 二、UBOOT啟動流程
    • 1.nuc980 記憶體分布圖
    • 2.啟動流程
  • 三.為什麼這麼啟動
  • 總結

前言

聊到uboot,我們得提一下單片機,我們在單片機上寫代碼的時候一般都不會考慮uboot,即使我們考慮bootloader也是在做OTA更新的時候才會去編碼。這種一般都比較簡單。但是當我們使用作業系統的時候,我們就得考慮uboot的移植和适配(這個工作原廠也做好了準備,實際上,我們隻需要修改裡面的一些加載位址和配置的功能項)。因為這兩者的程式一個是跑着flash上,一個的跑着DDR上。

一、UBOOT是什麼?

我簡單描述一下UBOOT,uboot就是把linux核心鏡像的代碼搬運到記憶體上運作的東西(搬運到記憶體上運作,是因為在記憶體上運作速度比較快)。它有一個承上啟下的作用。它引導作業系統,配置作業系統的參數,并完成一些硬體工作的初始化。

二、UBOOT啟動流程

1.nuc980 記憶體分布圖

UBOOT啟動原理UBOOT啟動原理分析前言一、UBOOT是什麼?二、UBOOT啟動流程三.為什麼這麼啟動總結

2.啟動流程

UBOOT啟動原理UBOOT啟動原理分析前言一、UBOOT是什麼?二、UBOOT啟動流程三.為什麼這麼啟動總結
啟動檔案 功能
IBR 選擇啟動方式、初始化DDR(晶片自帶),拷貝SPL程式到DDR 0x200位址運作
SPL 初始化預設序列槽0,拷貝uboot内容到DDR中去,詳見上圖
UBOOT 初始化設定的序列槽外設、設定GD結構體變量、重定位、初始化序列槽控制台并開始接收指令or執行自動化指令跳轉到核心

三.為什麼這麼啟動

1.統一性

統一Linux作業系統的啟動方式,友善管理。盡管在這個方案中DDR初始化在晶片内部已經完成可以直接加載UBOOT到DDR中,但是就是一個另類的存在。

2.記憶體受限

如果晶片内部記憶體空間太少,這時候就需要外接DDR。那麼,一般來說是在SPL中初始化外部DDR,然後将uboot搬運到外部DDR上運作。

總結

我寫這些文章沒有打算長篇大論,而且這些隻是輔助性的功能。如果你真的想完全了解uboot,一定要去看看源代碼。有什麼好的建議也可以留言,作者都會回複。

繼續閱讀