Bootloader及u-boot簡介/u-boot系統啟動流程

Bootloader及u-boot簡介
Bootloader代碼是芯片復位后進入操作系統之前執行的一段代碼,主要用于完成由硬件啟動到操作系統啟動的過渡,從而為操作系統提供基本的運行環境,如初始化CPU、堆棧、存儲器系統等。Bootloader 代碼與CPU 芯片的內核結構、具體型號、應用系統的配置及使用的操作系統等因素有關,其功能類似于PC機的BIOS程序。由于Bootloader和CPU及電路板的配置情況有關,因此不可能有通用的bootloader ,開發時需要用戶根據具體情況進行移植。嵌入式Linux系統中常用的bootloader有armboot、redboot、blob、u-boot等,其中u-boot是當前比較流行,功能比較強大的bootloader,可以支持多種體系結構,但相對也比較復雜。Bootloader的實現依賴于CPU的體系結構,大多數bootloader都分為stage 1和stage2兩大部分。Bootloader的基本原理見參考文獻。u-boot是sourceforge網站上的一個開放源代碼的項目。它可對 PowerPC MPC5XX、MPC8XX、MPC82XX、 MPC7XX、MPC74XX、ARM(ARM7、ARM9、StrongARM、VxWorks、NetBSD、QNX、RTEMS、ARTOS、LynxOS等,主要用來開發嵌入式系統初始化代碼bootloader。軟件的主站點是[url]http://sourceforge.net/projects/u-boot[/url]。u-boot 最初是由denx的PPC-boot發展而來的,它對PowerPC系列處理器的支持最完善,對Linux操作系統的支持最好。源代碼開放的U-boot軟件項目經常更新。
?
?
?
u-boot系統啟動流程
大多數bootloader都分為stage1和stage2兩大部分,u-boot也不例外。依賴于CPU體系結構的代碼(如設備初始化代碼等)通常都放在stage1且可以用匯編語言來實現,而stage2則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。
1 stage1 (start.s代碼結構)
u-boot的stage1代碼通常放在start.s文件中,它用匯編語言寫成,其主要代碼部分如下:
(1)定義入口。由于一個可執行的Image必須有一個入口點,并且只能有一個全局入口,通常這個入口放在ROM(Flash)的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。
(2)設置異常向量。
(3)設置CPU的速度、時鐘頻率及中斷控制寄存器。
(4)初始化內存控制器 。
(5)將ROM中的程序復制到RAM中。
(6)初始化堆棧 。
(7)轉到RAM中執行,該工作可使用指令ldr pc來完成。
2 stage2 C語言代碼部分
lib_arm/board.c中的start_armboot是C語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個uboot(armboot)的主函數,該函數主要完成如下操作:
(1)調用一系列的初始化函數。
(2)初始化Flash設備。
(3)初始化系統內存分配函數。
(4)如果目標系統擁有NAND設備,則初始化NAND設備。
(5)如果目標系統有顯示設備,則初始化該類設備。
(6)初始化相關網絡設備,填寫IP、MAC地址等。
(7)進入命令循環(即整個boot的工作循環),接受用戶從串口輸入的命令,然后進行相應的工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254168.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dubbo之RPC架構

為什么會有dubbo的出現: 隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 單一應用架構 當網站流量很小時&#xff0c…

區域路由的注冊機制

AreaRegistration.RegisterAllAreas() 我們新建一個名稱為Admin的Area,VS生成下面的代碼。 { action , id 我們先來看AreaRegistration這個抽象類,實際上,它只有一個核心功能,就是RegisterAllAreas,獲取所有繼承它的…

Unix/Linux IPC及線程間通信總結

一、互斥與同步 1.互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。 2.同步:是指在互斥的基礎上(大多數情況)&#xff0…

CSS樣式的插入方式

1.外部樣式&#xff1a; 當樣式需要應用于很多頁面時&#xff0c;外部樣式表將是理想的選擇。<head><link rel"stylesheet" type"text/css" href"mystyle.css" /> </head> 2.內部樣式 當單個文檔需要特殊的樣式時&#…

嵌入式Linux系統基礎知識

一、嵌入式Linux系統的構成 1、硬件 2、內核 3、應用程序&#xff08;形成根文件系統&#xff09; 二、構建嵌入式Linux系統的主要任務 1、內核部分 2、應用程序部分 嵌入式Linux的開發大致可分為三個層次&#xff1a;引導裝載內核、構造文件系統和圖形用戶界面。作為操作系統…

win10系統javac不是內部或外部命令,也不是可運行的程序 或批處理文件。

按照下面的步驟設置環境變量 說明&#xff1a; 1. 如果編輯的是系統環境變量&#xff0c;命令提示符需要以管理員權限運行&#xff1b;如果在用戶環境變量中編輯&#xff0c;則當前用可直接運行命令提示符。 2. win10中的路徑相對于win7要設置成絕對路徑。 1&#xff0e;打開…

兩個bat文件

1、修改后綴名 ren *.cs *.txt ren *.txt *.zip2、修改文件名稱 echo offset a00setlocal EnableDelayedExpansionfor %%n in (*.txt) do (set /A a1ren "%%n" "!a!.txt")

各種排序筆記---基于比較排序部分

1. 選擇排序 selection sort 大循環 從左到右每次以一個點開始掃描array 小循環 找到從當前起始點開始的最小值 時間復雜度為O(N^2) //selection sort an array array[] public class Solution {public int[] solve(int[] array) {if (array null || array.length 0) {return…

是什么讓深度學習再次崛起并超越人類?

作者潘爭&#xff0c;格靈深瞳計算機視覺工程師&#xff0c;清華大學自動化系博士&#xff0c;師從智能技術與系統國家重點實驗室副主任張長水。深度學習(Deep Learning)這個詞最近借著AlphaGO與李世石的人機大戰又火了一把。深度學習其實是機器學習(Machine Learning)的一個分…

常見的流量問題

常見的流量問題 冗余內容同類請求被間隔執行&#xff0c;請求的內容包含一些相對靜態的信息&#xff0c;正確的處理是第一次請求包括靜態信息就好&#xff0c;后面的同類請求只包含必要的即時變化信息即可。錯誤的處理方式是每次請求服務器都返回一次靜態信息。 冗余請求有的時…

halcon使用點擬合圓形時候,點集順序紊亂,不影響圓形擬合效果

read_image (Image, 截圖20201226094342972.bmp) * Matching 01: BEGIN of generated code for model initialization set_system (border_shape_models, false) * Matching 01: Obtain the model image * Matching 01: The image is assumed to be made available in the * Ma…

Socket理解。

其他大部分系統&#xff0c;例如CRM/CMS/權限框架/MIS之類的&#xff0c;無論怎么復雜&#xff0c;基本上都能夠本地代碼本地調試&#xff0c;性能也不太重要。&#xff08;也許這個就是.net的企業級開發的戰略吧&#xff09; 可是來到通訊系統&#xff0c;一切變得困難復雜。原…

多元化時代敏捷軟件開發的崛起與傳統軟件工程的延續

多元化時代敏捷軟件開發的崛起與傳統軟件工程的延續 1.傳統軟件開發模式 1.1瀑布模型 1.1.1概念 瀑布模型&#xff0c;顧名思義&#xff0c;軟件開發的過程如同瀑布飛流一般&#xff0c;自上而下&#xff0c;逐級下落。瀑布模型的核心思想是將問題按照工序進行簡化&#xff0c;…

Linux中的cron計劃任務配置詳解

cron來源于希臘單詞chronos&#xff08;意為“時間”&#xff09;&#xff0c;指Linux系統下一個自動執行指定任務的程序&#xff08;計劃任務&#xff09; ####1. crontab命令選項代碼如下: #crontab -u <-l, -r, -e> -u指定一個用戶 -l列出某個用戶的任務計劃 -r刪除某…

new和delete

和 sizeof 類似&#xff0c;sizeof不是函數&#xff0c;它是一個操作符&#xff0c;它在編譯期就完成了計算&#xff0c;在函數運行期間它已經是一個常數值了。 int a;sizeof(int) 4;sizeof(a) 4;sizeof a ——也是4 不需要括號&#xff01;此時要注意&#xff1a;sizeof in…

char a[]和char *a的比較,數組名,數組首地址,a,a,a[0]

char a[]和char *a的比較 指針和數組存在著一些本質的區別。當然&#xff0c;在某種情況下&#xff0c;比如數組作為函數的參數進行傳遞時&#xff0c;由于該數組自動退化為同類型的指針&#xff0c;所以在函數內部&#xff0c;作為函數參數傳遞進來的指針與數組確實具有一定的…

Java中繼承thread類與實現Runnable接口的區別

Java中線程的創建有兩種方式&#xff1a; 1&#xff0e; 通過繼承Thread類&#xff0c;重寫Thread的run()方法&#xff0c;將線程運行的邏輯放在其中 2&#xff0e; 通過實現Runnable接口&#xff0c;實例化Thread類 在實際應用中&#xff0c;我們經常用到多線程&#xff0c;…

【VMware vSAN 6.6】6.2.啟用性能服務:vSAN硬件服務器解決方案

目錄 1. 簡介 1.1.適用于HCI的企業級存儲2. 體系結構 2.1.帶有本地存儲的服務器2.2.存儲控制器虛擬系統套裝的缺點2.3.vSAN在vSphere Hypervisor中自帶2.4.集群類型2.5.硬件部署選項3. 啟用vSAN 3.1.啟用vSAN3.2.輕松安裝3.3.主動測試4. 可用性 4.1.對象和組件安置4.2.重新構建…

Android eclipse導入項目后出現Unable to resolve target #39;android-17#39;解決方法

eclipse導入項目后出現Unable to resolve target android-17解決方法。在最后附帶還有一種編譯邏輯不成功情況解決方法。 一、問題情況 二、解決的方法 1、改動項目的目標版本號與當前Android sdk相相應的版本號 2、自己主動修復一下項目 三、這個問題不是上面的。是另外情況&a…

多個圓點,鼠標選取兩個,求兩個點的距離,用于計算像素尺寸(halcon實現)

read_image (Image, C:/Users/22967/Desktop/晶圓找位置/0.bmp) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region1, max_separability, dark, UsedThreshold) connection (Region1, C…