U-Boot在S3C2410上的移植分析
引 言
BootLoader是嵌入式系統(tǒng)軟件開發(fā)的第一個環(huán)節(jié),它緊密地將軟硬件銜接在一起,對于一個嵌入式設備后續(xù)的軟件開發(fā)至關重要。BootLoader還涉及到許多硬件相關的知識,對于普通的嵌入式開發(fā)板,它又是不可跳過的步驟,所以做好它的移植工作是必須的,對于后續(xù)的開發(fā)工作也是有益的。U-Boot是當前比較流行、功能強大的BootLoader,它操作簡便,可以支持多種體系結構的處理器,同時提供了完備的命令體系。 S3C2410是三星公司一款基于ARM920T的嵌入式通用處理器。本文的移植平臺就是以S3C2410 為核心的HHARM9-EDU-R2開發(fā)板,這塊開發(fā)板的硬件資源配置較為完善。主要硬件資源有:S3C2410處理器;1片Intel TE28f128FLASH ( 16M);2片Hynix HY57V561620 SDRAM(64M);10/100M自適應網絡芯片DM9000; USBHost/Device;RS232×2/RS485×1串口;LQ035FLM08L 256K色TFT真彩LCD顯示屏;全功能JTAG調試口等。
U-Boot簡介
U- Boot是Das U-Boot的簡稱,是由denx軟件中心依照GPL 發(fā)布的公共軟件,作為系統(tǒng)啟動的引導模塊,U-Boot支持多種處理器架構,比如Power-PC、ARM、MIPS和x86等。目前,U-Boot源代碼在sourceforge網站的社區(qū)服務器中, Internet上有一群自由開發(fā)人員對其進行維護和開發(fā),它的項目主頁是http://sourceforge.net/ projects/ u-boot。當下載并解壓U-Boot 源碼包后,會形成如下的目錄結構:board,和一些已有開發(fā)板有關的文件;common,實現(xiàn)各種U-Boot 命令的C 文件;cpu,CPU相關文件,其中的子目錄都是以U-Boot 所支持的CPU命名的;disk,disk驅動的分區(qū)處理代碼;doc,文檔;drivers,通用設備驅動程序;fs,支持文件系統(tǒng)的文件;include,頭文件,對各種硬件平臺支持的匯編文件,系統(tǒng)的配置文件和對文件系統(tǒng)支持的文件;net:與網絡有關的代碼; lib-arm,與ARM體系結構相關的代碼;tools,創(chuàng)建S-Record 格式文件和U-Boot Images的工具。
本文中U-Boot的移植就是根據HHARM9-EDU-R2開發(fā)板的硬件資源在以上的目錄中修改或者添加相關源文件,并且重新編譯的過程。移植工作開始之前,了解U-Boot的運行過程是十分必要的。
U- Boot 運行過程分析
U- Boot編譯后的代碼定義一般不超過100kB,并且這100 kB又分成兩個階段來執(zhí)行。第一階段的代碼在start.s中定義,大小不超過10 kB,它包括從系統(tǒng)上電后在0x00000000 地址開始執(zhí)行的部分。這部分代碼運行在Flash中,它包括對S3C2410的一些寄存器的初始化和將U-Boot的第二階段代碼從Flash拷貝到 SDRAM中。除去第一階段的代碼,剩下的部分都是第二階段的代碼。第二階段的起始地址是在第一階段代碼中指定的,被復制到SDRAM后,就從第一階段跳到這個入口地址開始執(zhí)行剩余部分代碼。第二階段主要是進行一些BSS 段設置,堆棧的初始化等工作,最后會跳轉到main-loop函數(shù)中,接受命令并進行命令處理。圖1 給出了U-Boot的詳細的運行過程包括對內核的設置、裝載及調用過程。
圖1 U-Boot運行過程
了解了U-Boot 的運行過程以后,我們還必須確定開發(fā)板的地址空間分布,才可以進行源碼的修改和移植工作。 地址空間的分布部分依賴于開發(fā)板的硬件配置及CPU 的復位地址。 本文中開發(fā)板的地址空間如圖2 所示。
圖2 開發(fā)板地址空間分布
評論