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