天天看點

uboot什麼意思(uboot fastboot)

1.什麼是uboot?

U-Boot、全名通用引導加載器是遵循GPL條款的開源項目。 U-Boot的作用是引導系統。

U-Boot是從FADSROM、8xxROM、PPCBOOT逐漸演化而來的。 其源目錄、編譯格式與Linux核心非常相似。

事實上,許多U-Boot源代碼都基于相應的Linux核心源程式進行了簡化。

特别是某些裝置的驅動程式可以通過U-Boot源代碼的注釋來訓示。

2.為什麼要有uboot?

2.1 uboot從哪裡來的?

1 ) uboot是SourceForge上的開源項目

2 ) uboot項目作者:德國人發起的第一個項目

3 ) uboot是指一個人起步,所有對網絡感興趣的人共同維護發展起來的bootloader。

2.2 uboot的發展曆程

1 )自己正在使用的小開源項目。

2 )允許更多人使用

3 )預設情況下受SoC制造商支援。

總結:uboot經過多年發展,已經成為事實上的業内bootloader标準。現在大部分的嵌入式裝置都會預設使用uboot來做為bootloader。

2.3 uboot的版本号問題

FTP ://FTP.denx.de/pub/u-boot /      

1 )早期uboot的版本号類似于uboot-1.3.4。 此後,版本号類似于uboot-2010.06。

2 ) uboot的核心部分幾乎沒有變化,隻是支援越新版本越多的開發闆,對于較舊版本的晶片來說,舊版本的uboot和較舊版本的uboot沒有差別。

1 ) uboot是通用啟動代碼,通用是指可以在很多地方使用。 是以uboot是有移植性的。

2 ) uboot可移植性并不是說uboot可以在任何開發闆上自由使用,而是說uboot具有源代碼級的移植能力,可以移植到多個開發闆上,移植後可以在這塊開發闆上使用。

uboot的出現是必然的,如果沒有uboot,也有其他的bootloader。

總結:uboot到底是幹嘛的,對應下面uboot必須要解決哪些問題!

1)uboot主要作用是用來啟動作業系統核心。展現在uboot最後一句代碼就是啟動核心。

2)uboot還要負責部署整個計算機系統。展現在uboot最後的傳參。

3)uboot中還有操作Flash等闆子上硬體的驅動。例如序列槽要列印,ping網絡成功,擦除、燒寫flash是否成功等。

4)uboot還得提供一個指令行界面供人來操作。很簡單,至少你能看到。

計算機系統的組成部件非常多,不同的計算機系統組成部件也不同。 然而,運作所有計算機系統所需的主要核心部件是CPU外部存儲器(閃存/硬碟)内部存儲器(DDR SDRAM/SDRAM/SRAM )這三個。 典型的PC啟動過程是在打開PC電源後運作BIOS程式。 實際上,PC的BIOS是NorFlash。 BIOS程式負責DDR記憶體初始化、硬碟初始化,從硬碟将作業系統鏡像讀入DDR,跳轉至DDR運作作業系統,直到啟動。

嵌入式系統和PC機的啟動過程幾乎沒有兩樣,隻是BIOS成了uboot,硬碟成了Flash。

3 uboot必須解決哪些問題?

3.1自身可開機直接啟動

1 )典型的SoC支援多種啟動方式,包括SD卡啟動、NorFlash啟動和NandFlash啟動。 為了能夠啟動和啟動uboot,必須根據具體的SoC啟動設計uboot

2 )為了能夠從相應的引導媒體啟動,uboot必須更改和移植與硬體對應的代碼級别。 在uboot的第一階段start.S檔案中具體處理了此塊。

3.2能夠引導作業系統核心啟動并給核心傳參

1 ) uboot的終極目标是啟動核心。

2 )可以通過linux核心在設計的時候,設計為可以被傳參或uboot将啟動參數提供給linux核心,并将其傳遞到記憶體中的特定位置。 核心啟動後,它将在此特定位置檢索uboot傳遞的參數,并在核心中分析這些參數。 這些參數用于指導linux核心

啟動過程。

3.3能提供系統部署功能

1)uboot必須能夠被人借助而完成整個系統(包括uboot、kernel、rootfs等的鏡像)在Flash上的燒錄下載下傳工作。

2)裸機教程中刷機(ARM裸機第三部分)就是利用uboot中的fastboot功能将各種鏡像燒錄到iNand中,然後從iNand啟動。

3.4 能進行soc級和闆級硬體管理

1)uboot中實作了一部分硬體的控制能力(uboot中初始化了一部分硬體),因為uboot為了完成一些任務必須讓這些硬體工作。譬如uboot要實作刷機必須能驅動iNand,譬如uboot要在刷機時LCD上顯示進度條就必須能驅動LCD,譬如uboot能夠通過序列槽提供操作界面就必須驅動序列槽。譬如uboot要實作網絡功能就必須驅動網卡晶片。

2)SoC級(譬如序列槽)就是SoC内部外設,闆級就是SoC外面開發闆上面的硬體(譬如網卡、iNand)

3.5 uboot的"生命周期"

1)uboot的生命周期就是指:uboot什麼時候開始運作,什麼時候結束運作。

2)uboot本質上是一個裸機程式(不是作業系統),一旦uboot開始SoC就會單純運作uboot(意思就是uboot運作的時候别的程式是不可能同時運作的),一旦uboot結束運作則無法再回到uboot(是以uboot啟動了核心後uboot自己本身就死了,要想再次看到uboot界面隻能重新開機系統。重新開機并不是複活了剛才的uboot,重新開機隻是uboot的另一生)

3)uboot的入口和出口。uboot的入口就是開機自動啟動,uboot的唯一出口就是啟動核心。uboot還可以執行很多别的任務(譬如燒錄系統),但是其他任務執行完後都可以回到uboot的指令行繼續執行uboot指令,而啟動核心指令一旦執行就回不來了。

總結:uboot的一切都是為了啟動核心。

4.S5PV210的uboot與架構

5 uboot的工作方式

5.1 從裸機程式鏡像uboot.bin說起

1)uboot的本質就是一個裸機程式,和我們裸機全集中寫的那些裸機程式xx.bin并沒有本質差別。如果非說要有差別,那就是:我們寫的大部分小于16KB,而uboot大于16KB(一般uboot在180k-400k之間)

2)uboot本身是一個開源項目,由若幹個.c檔案和.h檔案組成,配置編譯之後會生成一個uboot.bin,這就是uboot這個裸機程式的鏡像檔案。然後這個鏡像檔案被合理的燒錄到啟動媒體中拿給SoC去啟動。也就是說uboot在沒有運作時表現為uboot.bin,一般躺在啟動媒體中。

3)uboot運作時會被加載到記憶體中然後一條指令一條指令的拿給CPU去運作。

5.2 uboot的指令式shell界面

1)普通的裸機程式運作起來就直接執行了,執行時效果和代碼有關。

2)有些程式需要和人進行互動,于是乎程式中就實作了一個shell(shell就是提供人機互動的一個界面,回想ARM裸機全集第十六部分),uboot就實作了一個shell。

注意:shell并不是作業系統,和作業系統一點關系都沒有。linux中打開一個終端後就得到了一個shell,可以輸入指令回車執行。uboot中的shell工作方式和linux中的終端shell非常像(其實幾乎是一樣的,隻是指令集不一樣。譬如linux中可以ls,uboot中ls就不識别)。

4.3掌握uboot使用的2個關鍵點:指令和環境變量

1)uboot啟動後大部分時間和工作都是在shell下完成的(譬如uboot要部署系統要在shell下輸指令、要設定環境變量也得在指令行地下,要啟動核心也要在指令行底下敲指令)。

2)指令就是uboot的shell中可以識别的各種指令。uboot中有幾十個指令,其中有一些常用另一些不常用(我們還可以自己給uboot添加指令),後面會用幾節課時間來依次學習uboot中常用指令。

3)uboot的環境變量和作業系統的環境變量工作原理和方式幾乎完全相同。uboot在設計時借助了作業系統的設計理念(指令行工作方式借鑒了linux終端指令行,環境變量借鑒了作業系統的環境變量,uboot的驅動管理幾乎完全照抄了linux的驅動架構)。

4)環境變量可以被認為是系統的全局變量,環境變量名都是系統内置的(認識就認識,不認識就不認識,這部分是系統自帶的預設的環境變量,譬如PATH;但是也有一部分環境變量是自己添加的,自己添加的系統就不認識但是我們自己認識)。系統或者我們自己的程式在運作時可以通過讀取環境變量來指導程式的運作。這樣設計的好處就是靈活,譬如我們要讓一個程式更改運作方法,不用去重新修改程式代碼再重新編譯運作,而隻要修改相應的環境變量就可以了。

5)環境變量就是運作時的配置屬性。

4.4思考:結合ARM裸機部分進行了解和印證

1)及時複習ARM裸機中和現在講到的相關的知識點,在複習中鞏固ARM裸機中學到的。這過程中如果原來學習記了筆記非常容易容易好,如果沒有記筆記那就難辦了。

繼續閱讀