UBOOT啟動原理分析
文章主要圍繞兩個問題探讨。一方面是啟動流程,另一方面是為什麼這麼啟動。
文章目錄
- UBOOT啟動原理分析
- 前言
- 一、UBOOT是什麼?
- 二、UBOOT啟動流程
-
- 1.nuc980 記憶體分布圖
- 2.啟動流程
- 三.為什麼這麼啟動
- 總結
前言
聊到uboot,我們得提一下單片機,我們在單片機上寫代碼的時候一般都不會考慮uboot,即使我們考慮bootloader也是在做OTA更新的時候才會去編碼。這種一般都比較簡單。但是當我們使用作業系統的時候,我們就得考慮uboot的移植和适配(這個工作原廠也做好了準備,實際上,我們隻需要修改裡面的一些加載位址和配置的功能項)。因為這兩者的程式一個是跑着flash上,一個的跑着DDR上。
一、UBOOT是什麼?
我簡單描述一下UBOOT,uboot就是把linux核心鏡像的代碼搬運到記憶體上運作的東西(搬運到記憶體上運作,是因為在記憶體上運作速度比較快)。它有一個承上啟下的作用。它引導作業系統,配置作業系統的參數,并完成一些硬體工作的初始化。
二、UBOOT啟動流程
1.nuc980 記憶體分布圖
2.啟動流程
啟動檔案 | 功能 |
---|---|
IBR | 選擇啟動方式、初始化DDR(晶片自帶),拷貝SPL程式到DDR 0x200位址運作 |
SPL | 初始化預設序列槽0,拷貝uboot内容到DDR中去,詳見上圖 |
UBOOT | 初始化設定的序列槽外設、設定GD結構體變量、重定位、初始化序列槽控制台并開始接收指令or執行自動化指令跳轉到核心 |
三.為什麼這麼啟動
1.統一性
統一Linux作業系統的啟動方式,友善管理。盡管在這個方案中DDR初始化在晶片内部已經完成可以直接加載UBOOT到DDR中,但是就是一個另類的存在。
2.記憶體受限
如果晶片内部記憶體空間太少,這時候就需要外接DDR。那麼,一般來說是在SPL中初始化外部DDR,然後将uboot搬運到外部DDR上運作。
總結
我寫這些文章沒有打算長篇大論,而且這些隻是輔助性的功能。如果你真的想完全了解uboot,一定要去看看源代碼。有什麼好的建議也可以留言,作者都會回複。