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