uboot(bootloader)相關的知識點匯總

掃描二維碼
獲取更多精彩
嵌入式雜牌軍

編輯|追夢星空
公眾號|嵌入式雜牌軍
習慣可以讓人重復對自己有利的東西從而讓自身得以提升,也可以讓人不斷重復錯誤的事情從而給自身帶來諸多的困擾(習慣久了就成了類似無意識的東西,無意識的對,也無意識的錯)。
文 章 導 讀
今天給小伙伴們匯總下uboot相關的內(nèi)容,主要涉及它的定義、啟動方式、操作方式、目錄結構、編譯調(diào)試等內(nèi)容!
閱讀過程中有什么問題可以后臺交流哈,
!
1 嵌入式存儲設備的分區(qū)情況
在引出uboot之前先看下uboot在存儲設備中的位置。
① 第一分區(qū):存放uboot。
② 第二分區(qū):存放uboot要傳給系統(tǒng)內(nèi)核的參數(shù)。
③ 第三分區(qū):系統(tǒng)內(nèi)核。
④ 第四分區(qū):根文件系統(tǒng)。
2 uboot 相關的知識點
1)定義
Bootloader是操作系統(tǒng)運行之前執(zhí)行的一小段程序,通過這一小段程序,可以初始化硬件設備/建立內(nèi)存空間映射表,從而建立適當?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準備。
uboot是bootloader的一種,下面內(nèi)容可能出現(xiàn)混用的情況。
2)uboot啟動方式
① 網(wǎng)絡啟動。
主要用于調(diào)試,通常需要安裝nfs和tftp服務,用于掛載根文件系統(tǒng),內(nèi)核鏡像
u-boot.bin等內(nèi)容,因為是掛載,硬件重新上電,一般并不會保存掛載的內(nèi)容。
② 磁盤啟動。
這種方式主要是用在臺式機和服務器上的,這些計算機都使用BIOS引導,并且使用磁盤作為存儲介質,這里面兩個重要的用來啟動linux的有LILO和GRUB。
③ Flash啟動。
將uboot、內(nèi)核鏡像及應用程序等組成的程序文件下載到Flash中,上電自動引導。
3)Bootloader的兩種操作模式
① 啟動加載模式,也稱為自主模式。
Bootloader從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到RAM中運行,整個過程沒有用戶介入。
② 下載模式。
目標機上的Bootloader通過串口/網(wǎng)絡等方式從主機下載/掛載到目標機(如uImage/u-boot.bin/根文件系統(tǒng))。
從目標機下載的文件,Bootloader會將其先放在目標機的RAM中,然后在放在目標機的Flash等固態(tài)存儲設備中。
4)uboot的目錄結構

① board文件夾。
board文件夾中存放開發(fā)板相關的配置文件,每一個開發(fā)板都以子文件夾的形式出現(xiàn)。

此文件夾下的每個文件里面都找到一個腳本文件u-boot.lds,此文件中內(nèi)容描述了對應型號uboot代碼的入口點、各段代碼存放位置(數(shù)據(jù)段、代碼段、bss段)以及對齊方式等內(nèi)容,感興趣的小伙伴可以看看。
② commom文件夾。
它存放的是u-boot行下支持的命令,每一個命令對應一個文件。
③ cpu文件夾。
此文件夾中存放特定cpu架構相關的目錄,每一款cpu架構都對應了一個子目錄。
④ doc文件夾。
doc是文檔目錄,有u-boot非常完善的文檔。
⑤ drivers文件夾。
此文件夾下存放的是u-boot支持的各種設備的驅動程序。
⑥ fs文件夾。

它用于存放支持的文件系統(tǒng)的源碼,其中最常用的是JFFS2文件系統(tǒng)。
⑦ include文件夾。
它存放u-boot使用的頭文件,還有各種硬件平臺支持的匯編文件,系統(tǒng)配置文件和文件系統(tǒng)支持的文件。
⑧ net文件夾。
它存放的是與網(wǎng)絡協(xié)議相關的代碼,bootp協(xié)議、TFTP協(xié)議、NFS文件系統(tǒng)得實現(xiàn)。
⑨ tooles文件夾。
它存放的是生成u-boot相關的工具。
⑩ u-boot.bin與u-boot.spec及u-boot.map。

前兩個是生產(chǎn)的uboot的程序文件,常用的是u-boot.bin文件。
u-boot.map可以查看uboot編譯存儲的信息,遇到問題時可以去這里看看。
3 uboot 的編譯與調(diào)試
1)uboot的編譯
uboot的編譯不管什么方式一般都是落實到Makefile上。
① 用現(xiàn)有的IDE編譯。
Linux開發(fā)的編譯一般都支持局部編譯,比如你可以單獨編譯內(nèi)核,你可以單獨編譯uboot,你也可以將程序進行全部編譯。
為了節(jié)省時間,在調(diào)試時,局部編譯,并將代碼下載到硬件中去測試是比較不錯的選擇。
② 直接編譯uboot。
即用make命令對uboot進行編譯,此時涉及到一個問題,編譯環(huán)境變量存在交叉編譯等條件的限制。此時有兩種編譯方式:
要么編寫腳本利用現(xiàn)有IDE的環(huán)境變量,將變量路徑填入腳本,進入uboot去編譯。
要么自己搭建編譯環(huán)境,設置好環(huán)境變量。
2)uboot的調(diào)試
① 利用printf打印調(diào)試信息。
標準的uboot中printf已經(jīng)用puts等函數(shù)重寫了可以直接用于調(diào)試。
② 開啟DEBUG宏。
uboot啟動時的打印可以開啟DEBUG宏,DEBUG位于include/common.h中。
③ 利用help命令。

進入uboot后,輸入help命令即可列出uboot支持的命令,可以嘗試下如何使用。
④ 添加自己的uboot命令。

可以通過help命令查出uboot已有的命令,然后進入到uboot源碼下用grep命令查看一下此命令的功能實現(xiàn),仿照此實現(xiàn)實現(xiàn)自己的功能函數(shù),添加打印提示,命令觸發(fā)等內(nèi)容即可。
今天就到這吧,希望對小伙伴有所幫助哈,喜歡的話歡迎轉發(fā)、點贊、分享、在看、轉載哈,
。
推薦一款Linux下好用的截圖工具shutter——shutter的安裝、配置與使用
