uboot源碼分析(1)

 

1.U-Boot系統加載器

U-Boot是一個規模龐大的開源Bootloader軟件,最初是由denx(www.denx.de發起。U-Boot的前身是PPCBoot,目前是SourceForge(www.sourceforge.net)的一個項目。

最初的U-Boot僅支持PowerPC架構的系統,稱做PPCBoot。從0.3.2官方版本之後開始逐步支持多種架構的處理器,目前可以支持 PowerPC(MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx)、ARM(ARM7、ARM9、StrongARM、 Xscale)、MIPS(4kc、5kc)、X86等處理器,支持的嵌入式操作系統有Linux、Vx-Works、NetBSD、QNX、 RTEMS、ARTOS、LynxOS等,是PowerPC、ARM9、Xscale、X86等系統通用的Boot方案。

U-Boot支持的處理器和操作系統很多,但是它對PowerPC系列處理器和Linux操作系統支持最好。U-Boot支持的功能也較多,對於嵌入式開發常用的查看、修改內存,從網絡下載操作系統鏡像等功能都提供了很好的支持。U-Boot的項目更新較快,支持的目標板衆多,是學習底層開發很好的示例。

2.ViVi系統加載器

ViVi是韓國的mizi公司專門針對ARM9處理器設計的一款Bootloader。它的特點是操作簡便,同時提供了完備的命令體系,目前在三星系列的ARM9處理器上ViVi也比較流行。

與U-Boot相比,由於ViVi支持的處理器單一,ViVi的代碼也要小很多。同時,ViVi的軟件架構和配置方法採用和Linux內核類似的風格,對於有過配置編譯Linux內核經驗的讀者,ViVi更容易上手。

與其他的Bootloader一樣,ViVi有兩種工作模式:啓動加載模式和下載模式。使用啓動加載模式,在目標板上電後,ViVi會從預先配置好的Flash分區讀取Linux或者其他系統的鏡像並且啓動系統;使用下載模式,ViVi向用戶提供了一個命令行接口,通過該接口用戶可以使用ViVi提供的命令。ViVi主要提供了5個命令如下:

Load:把二進制文件載入Flash或RAM。

Part:操作MTD分區信息。顯示、增加、刪除、復位、保存MTD分區。

Param:設置參數。

Boot:啓動系統。

Flash:管理Flash,如刪除Flash的數據。

與Linux內核的組織類似,ViVi的源代碼主要包括arch、init、lib、drivers和include等幾個目錄,共200多個代碼文件。各目錄的具體功能請參考ViVi相關的信息。

=====================================================================》》》

=====================================================================》》》

=====================================================================》》》

 

基本目錄分類:

common目錄 是與體系結構無關的文件,包括實現各種命令的C語言源代碼文件。

cpu目錄          存放與CPU相關的文件,每種CPU需要的代碼文件存放在以CPU名稱命名的子目錄下,arm920t存放了arm920t爲內核的 CPU相關的文件。在每個特定的子目錄下都包括cpu.c、interrupt.c和start.S這3個文件,這3個文件是CPU初始化以及配置中斷的代碼。U-Boot自帶了很多CPU相關的代碼,用戶可以在現有CPU支持的基礎上修改自己所需要的配置。

通用設備的驅動程序存放在drivers目錄下。U-Boot自帶了許多設備的驅動,包括顯示芯片、網絡接口控制器、USB控制器、I2C器件等,對於大多數用戶而言已經夠用,用戶也可以按照自己的需求增加或者修改設備驅動。

fs                    存放支持的文件系統代碼,U-Boot目前支持cramfs、ext2、fat、jffs、reiserfs、yaffs等多種常見的文件系統。

net目錄         是與網絡協議有關的代碼,比如BOOTP協議、TFTP協議、RARP協議等。

post               存放與硬件自檢有關的代碼。

rtc目錄          存放與硬件實時時鐘相關的代碼。

tools目錄      存放U-Boot編譯過程中用到的一些工具代碼。  // 例如:mkimage

==========================================





hao:
start_armboot => bootm.c
向量表在_start開始階段已經彙編搞定。

其實主要就是個寄存器和內存的基本處理。

===》》》
列出了U-Boot在ARM處理器啓動過程中的幾個關鍵點,
從圖中看出U-Boot的啓動代碼分佈在start.S、low_level_init.S、 board.c和main.c文件中。

start.S                    是U-Boot整個程序的入口,該文件使用彙編語言編寫,不同體系結構的啓動代碼是不同 的;

low_level_init.S   特定開發板的設置代碼

board.c                  包含開發板底層設備驅動

main.c是一個與平臺無關的代碼,U- Boot應用程序的入口在此文件中

發佈了15 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章