本文連接:https://blog.csdn.net/u012351051/article/details/50557899
受單片機和ARM7等小型CPU設備編程思惟的影響,開始對嵌入式linux和PC中存在bootloader/BIOS的意義有了疑問
bootloader到底有沒有必要存在呢?答案是:大部分狀況下是有必要的。
首先,bootloader的做用是在硬件商店後運行的第一段軟件代碼,也叫引導加載程序,是在操做系統內核運行以前運行的一小段程序,這小段程序的做用通常是初始化硬件設備,好比內存啊,堆棧等等,從而將系統的硬件環境編程一種合適的狀態,而後再引導加載操做系統,如linux或windows。
乍一看,其實挺有用,但這是必定必須的嗎?顯然不是,由於徹底能夠上電直接運行操做系統,固然這個操做系統的開頭必需要包含上述bootloader的功能。這一點在單片機和ARM7中使用keil編程環境能理解。
可是,問題來了,若是咱們想升級操做系統呢?咱們想升級應用程序呢?這一點對於windows或者linux都是很常見的,若是沒有bootloader,那麼咱們必需要找到燒寫電腦或者CPU的燒寫工具,事實上,這對於生產商來說,都不是一件容易的事情。可是有bootloaer就很方便了,咱們只須要將升級後的操做系統放到「硬盤」或nandflash中的某個位置,而後斷電重啓一下,bootloader就能在引導系統的同時,完成了對操做系統的升級。這樣是否是很方便了。
後續,目前有一些手機廠家對bootloader「上鎖」,這個就至關因而給bootloader引導上了把鎖,升級的操做系統若是是自家的,天然是有「解鎖」的鑰匙的,可是是其餘家的,那就不行了。
linux
假如你作的產品賣給用戶,當你發現該產品存在致命的問題,你是否是要去對程序進行更改,因爲銷售路徑遍及各地,你不可能拿着一堆東西(電腦、下載器等)去找人家升級程序吧? 再說產品都是包裝好的,預留的接口都是經常使用的接口,如USB、232/485 、SD卡等等,難道你還要去拆卸產品? 有了Bootloader就方便不少了,例如將升級文件拷貝在SD卡里面,或者經過nfs tftp,簡單按下按鈕、點一下屏幕就能夠升級,別人操做起來也方便。編程
上述論述,若是須要升級系統,windows
bootloader將功能併入linux,那麼須要從新編譯整個image工具
sd卡沒什麼問題,都是將image拷貝進去,比較方便(bootloader和linux分開,就是拷貝linux image,不然就是拷貝整個image)操作系統
對於nand啓動(bootloader和linux分開,能夠經過tftp或nfs將linux image下載到內存,再經過uboot燒寫到nand,有網口就能夠,不然就是要經過工具燒寫nand了),在這一點上是有差異的。.net
以上是一個緣由,還有一個緣由是:blog
內核啓動須要必要的啓動參數
(1)內核是不能開機自動徹底從零開始啓動的,內核啓動須要別人幫忙。uboot要幫助內核實現重定位(從SD卡到DDR )uboot還要給內核提供啓動參數。
啓動內核第一步:加載內核到DDR中
uboot要啓動內核,分爲2個步驟:第一步是將內核鏡像從啓動介質中加載到DDR中,第二步是去DDR中啓動內核鏡像。(內核代碼根本就沒考慮重定位,由於內核知道有bootloader幫忙把本身加載到DDR中連接地址處,內核就直接從連接地址處運行的)接口