1. 程式人生 > >u-boot學習(一):u-boot概述

u-boot學習(一):u-boot概述

 我們知道對於PC機,使用電腦時我們首先按下開機按鍵,然後等待電腦的啟動,開機完成後,我們會進行各種需要的操作,如qq聊天、寫CSDN部落格等。其實這個過程是:啟動BIOS程式,由BIOS程式引導Windows作業系統,再由作業系統識別C盤D盤等硬碟,最後執行應用程式QQ、CSDN等。對嵌入式系統來說,對應BIOS的是Bootloader程式,由Bootloader程式啟動Linux核心,再由核心掛載“根檔案系統”,最後執行應用程式。這裡所說的u-boot是Bootloader中的一種,除了u-boot外,還有LILO、GRUB、Vivi等等。

上面的分析可以看出嵌入式系統的幾個層次,以及各層次的關係。

1.使用者應用程式
2.檔案系統
3.Linux核心
4.Bootloader引導載入程式


可以這樣理解Bootloader程式的作用:它是一段程式,在系統上電後,首先由它來進行一些硬體初始化,如關閉看門狗、改變系統時鐘、初始化儲存控制器、將更多程式碼複製到記憶體中去,從而準備好軟體環境,最後呼叫作業系統核心,將核心複製到記憶體中。


核心程式比較大,不可能放在記憶體中,而是放在Flash中,而Bootloader的主要作用就是引導核心,也就是從Flash中讀出核心,然後把它載入到記憶體中。因此,它至少要有能夠讀Flash的功能、初始化SDRAM的功能,並能夠啟動核心。這些基本的功能就構成了所謂的啟動載入模式功能。那麼核心又是怎麼存放到Flash上面去的呢,有可能是晶片出廠時直接燒寫到了晶片上的,但更多的可能是開發過程中通過u-boot燒寫到晶片上去的。那麼u-boot除了有讀Flash外,還必須有寫Flash的功能,通過什麼寫呢,所以還可能需要網絡卡、USB等等為開發方便而支援的功能,這就是所謂的下載模式功能。除此之外,u-boot的功能還包括給核心傳遞引數等細節性的內容,以後的學習中會詳細的總結。


瞭解了u-boot的作用後,就是使用u-boot了,下面給出u-boot的初步體驗:

所用開發板是JZ2440。

解壓    tar xjf u-boot-1.1.6.tar.bz2
打補丁    cd u-boot-1.1.6; patch -p1 < ../u-boot-1.1.6_jz2440.patch
配置    make 100ask24x0_config
編譯    make


上面的步驟完成後,如果執行結果無誤,會生成一個u-boot.bin的二進位制檔案,它就是可以直接燒入ROM、NOR Flash的檔案,把該檔案下載到開發板上就可以體驗使用u-boot 了。其實,除了u-boot.bin二進位制檔案外,還有u-boot的ELF格式的可執行檔案,u-boot的Motorola S_Record格式的可執行檔案。除此之外,還會生成一些工具檔案,如tool子目錄下面的mkimage檔案,將它複製到/usr/local/bin目錄下,在編譯核心時會使用mkimage來生成u-boot格式的核心映像檔案uImage(這一點在後面會提到)。


將u-boot.bin檔案下載到開發板上後,啟動它,然後就能夠使用u-boot內的命令了,如print檢視環境變數、hlep檢視幫助資訊、set設定環境變數等等。