U-boot分析與移植(1)----bootloader分析

 

 一、Boot Loader 概念

就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便爲最終調用操作系統內核準備好正確的環境,他就是所謂的引導加載程序(Boot Loader)。

嵌入式軟件在Flash存儲器中的分佈圖

 

二、爲什麼需要BootLoader?

BootLoader的終極任務是引導操作系統,所謂引導操作系統,就是啓動內核,在啓動內核之前所需要的環境(如初始化sdram,設置cpu模式等,下面會介紹)都是由BootLoader來完成的。試想一下,如果你要啓動內核,讓內核在內存上跑,但連sdram都沒有初始化,這顯然不行。在s3c2440中,系統在上電或復位時通常都從地址 0x00000000 處開始執行,而在這個地址處安排的通常就是系統的Boot Loader 程序。在x86的PC機上,Boot Loader = BIOS + GRUB/LILO。

三、BootLoader的選擇

些人誤認爲BootLoader=U-Boot,其實BootLoader只是所有引導加載程序中的一個總稱。

四、啓動過程

   S3C2440 支持兩種方式的啓動:Nor Flash 啓動和Nand Flash 啓動。Nor Flash 和Nand Flash 都是非易失性存儲器,Nor Flash 的特點是芯片內執行和不能直接寫操作,程序可以直接在其中運行,而不必將程序讀取到RAM 中運行。Nor Flash 雖然具有這個優點,但是它的性價比遠低於Nand Flash,因而很多系統採用Nand Flash 啓動。Nand Flash 的特點是採用非線性存儲模式,程序無法在其中運行,它只能作爲程序或數據的存儲載體,存儲在其中的程序只能先拷貝到RAM 中才能運行。

  從Nor Flash 啓動時,與nGCS0 相連的Nor Flash 就被映射到nGCS0 片選的空間,其地址被映射爲0x00000000;從Nand Flash 啓動時,S3C2440 芯片內部自帶的一塊容量爲4K 的被稱爲“Steppingstone”(“起步階石”)的BootSRAM 被映射到nGCS0 片選的空間,其地址被映射爲0x00000000。當系統上電或復位時,程序會從0 地址處開始執行,因此我們編寫的啓動代碼要確保存儲在0 地址處。

    當啓動方式爲Nor Flash 啓動時,沒有額外需要考慮的問題,因爲這種情況下程序在系統啓動前就存儲在Nor Flash 中,我們只要保證將啓動代碼保存在Nor Flash 開始的位置即可,系統上電或復位時,0 地址處的啓動代碼就會被執行。

  在啓動方式爲Nand Flash 啓動的情況下,系統啓動前所有的程序存儲在Nand Flash 中,系統的啓動過程稍微有點複雜:系統上電或復位時,0 地址處爲S3C2440 內部自帶的BootSRAM,啓動前裏面沒有任何存儲內容,啓動後S3C2440 先通過硬件機制將Nand Flash 前4K 的內容拷貝至其中,然後再運行裏面的程序(從0 地址處)。這種情況下我們需要保證將啓動代碼保存在Nand Flash 開始的位置,並且啓動代碼的大小要小於4K。這就是我們的裸機程序爲什麼在nandflash能跑的原因。

  我們用的bootloader一般大於4k,所以,我們把用匯編編寫的在sram裏面執行的過程稱爲stage1,實現最關鍵的初始化後,把bootloader代碼從nandflash拷貝到sdram裏。此時在sdram裏實現stage2,做更具體的初始化,最後啓動內核,這個階段一般用c語言來編寫。

 

Boot Loader 的 stage1 通常包括以下步驟(以執行的先後順序):

  • 硬件設備初始化(關看門狗,關中斷,設置cpu時鐘,初始化sdram,關閉 CPU 內部指令/數據 cache)。
  • 爲加載 Boot Loader 的 stage2 準備 RAM 空間。
  • 拷貝 Boot Loader 的 stage2 到 RAM 空間中。
  • 設置好堆棧。
  • 跳轉到 stage2 的 C 入口點。

Boot Loader 的 stage2 通常包括以下步驟(以執行的先後順序):

  • 初始化本階段要使用到的硬件設備。
  • 檢測系統內存映射(memory map)。
  • 將 kernel 映像和根文件系統映像從 flash 上讀到 RAM 空間中。
  • 爲內核設置啓動參數。
  • 調用內核。

u-boot的源碼的註釋已經很詳細,仔細看看,肯定能看懂的。

更詳細的文章

嵌入式系統 Boot Loader 技術內幕

http://www.ibm.com/developerworks/cn/linux/l-btloader/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章