利用U-Boot實(shí)現(xiàn)uClinux向S3C44B0的移植
1 引言
本文引用地址:http://www.ex-cimer.com/article/171659.htmS3C44B0是Samsung公司推出的一款為手持設(shè)備或其他通用設(shè)備開(kāi)發(fā)的32位處理器,它基于ARM7TDMI核,沒(méi)有內(nèi)存管理單元(MMU)。在采用無(wú)MMU的微處理器的嵌入式系統(tǒng)中廣泛采用的就是uClinux系統(tǒng),作為linux的衍生系統(tǒng),其具有支持多任務(wù)、內(nèi)核精簡(jiǎn)、高效穩(wěn)定和源代碼開(kāi)放的優(yōu)點(diǎn)。系統(tǒng)移植的基本過(guò)程包括:獲取較新版本的linux-2.6.9內(nèi)核源碼,根據(jù)目標(biāo)平臺(tái)對(duì)源碼中與硬件平臺(tái)相關(guān)部分進(jìn)行修改,添加必要的外設(shè)驅(qū)動(dòng)程序,對(duì)系統(tǒng)進(jìn)行針對(duì)目標(biāo)平臺(tái)的交叉編譯,生成的內(nèi)核映像文件的下載調(diào)試等。
2 硬件環(huán)境介紹
硬件平臺(tái)以S3C44B0為核心,采用的外部晶振頻率為6MHZ,內(nèi)核主頻最高可達(dá)到66MHZ,平臺(tái)以2MB的AMD29LV160DB做 rom,其地址空間為0~1fffff,以HY57V1620HG sdram做內(nèi)存,地址空間為0c000000~0c7fffff,共8MB,以RTL8019as作為網(wǎng)絡(luò)控制芯片,接在S3C44B0的Bank5 上,通過(guò)JTAG與PC機(jī)的并口連接支持在線調(diào)試與程序燒寫(xiě)。
圖1 硬件平臺(tái)框圖
3.1 交叉編譯環(huán)境的建立
交叉編譯是利用運(yùn)行在某機(jī)器(宿主機(jī))上的編譯器編譯某個(gè)源程序生成在另一臺(tái)機(jī)器(目標(biāo)機(jī))上運(yùn)行的目標(biāo)代碼的過(guò)程。本文的交叉編譯環(huán)境建立如下:在PC機(jī)上安裝Linux操作系統(tǒng)做為我們的宿主機(jī),版本為Fedore Core 5,從http : // www. uClinux .org/上下載交叉編譯工具鏈arm-elf-tools20040427并安裝在Linux 宿主機(jī)上,這樣就建立了uClinux-arm的交叉編譯環(huán)境。
Bootloader是系統(tǒng)加電后運(yùn)行的第一段代碼,在一個(gè)基于ARM的嵌入式系統(tǒng)中,系統(tǒng)上電或復(fù)位時(shí)通常都從地址0X00000000處開(kāi)始執(zhí)行,而這個(gè)地址處通常就是系統(tǒng)的bootloader,通過(guò)這段程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境調(diào)整到一個(gè)合適的狀態(tài),以便為最終的調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
本文中bootloader采用對(duì)U-Boot進(jìn)行移植來(lái)實(shí)現(xiàn)的。U-Boot的全稱(chēng)是Universal Boot Loader,是德國(guó)DENX小組開(kāi)發(fā)的用于多種嵌入式CPU的Bootloader引導(dǎo)程序, 支持PowPC、ARM、MIPS、M68K等多種處理器平臺(tái),支持Linux、VxWorks、NetBSD等多種嵌入式操作系統(tǒng),主要用來(lái)開(kāi)發(fā)嵌入式系統(tǒng)初始化代碼bootloader,其易于裁剪和調(diào)試,尊循GPL (通用公共許可) 公約,完全開(kāi)放源代碼??梢詮膆ttp://sourceforge.net/projects/u-boot得到它多個(gè)版本的源碼,本文是以u(píng)- boot-1.1.2為例進(jìn)行移植的。
在移植前可以通過(guò)查看doc文檔了解U-Boot源碼的主要結(jié)構(gòu),在眾多的目錄中與移植相關(guān)的主要是board、cpu、drivers等幾個(gè)目錄。移植的基本過(guò)程如下:
(1) 查找以S3C44B0處理器為核心的硬件平臺(tái),此目的是為了簡(jiǎn)化移植難度;
在board/下運(yùn)行 find -exec grep -l 44B0 {} 找到/dave/B2/B2.c,由此我們知道dave公司的B2平臺(tái)是以S3C44B0處理器為核心的,所以移植可以參考B2平臺(tái)進(jìn)行;
(2) 建立我們目標(biāo)平臺(tái)的目錄lanlan,把B2板的文件拷到建立的目錄中,但需要修改文件的名稱(chēng);
(3) 修改新建目錄中的文件的名稱(chēng),將文件中所有的B2都改成lanlan;
(4) 在include/configs/添加目標(biāo)平臺(tái)的配置文件lanlan.h;此文件可以參考B2.h建立;
(5) 修改總目錄下的Makefile文件,添加目標(biāo)板的編譯信息;
這個(gè)過(guò)程完成后可以在u-boot/目錄下依次運(yùn)行make lanlan_config ; make進(jìn)行編譯,編譯完成后如果能生成u-boot.bin等文件,則說(shuō)明前面的過(guò)程無(wú)誤,如果出現(xiàn)錯(cuò)誤,則需要根據(jù)錯(cuò)誤信息進(jìn)行相關(guān)修改;
(6) 修改硬件相關(guān)的文件,在cpu/中有S3C44B0的目錄,說(shuō)明U-Boot已經(jīng)提供了對(duì)S3C44B0的支持,我們只是需要修改部分文件使其適合我們的目標(biāo)平臺(tái),主要修改的是cpu/下start.S 和serial.c,include/configs/下的lanlan.h中關(guān)于cpu的頻率、串口波特率、PLLCON寄存器、flash和 sdram的大小、基地址和網(wǎng)絡(luò)控制芯片的基地址等內(nèi)容,確定修改正確后運(yùn)行make lanlan_config;make命令,編譯生成的u-boot.bin就是我們需要的引導(dǎo)程序;
(7) 通過(guò)JTAG將生成的u-boot.bin燒寫(xiě)到目標(biāo)平臺(tái)的0x0地址,配置Linux下的minicom或者Windows下的超級(jí)終端,注意配置的串口及串口波特率要與U-Boot中設(shè)置的一樣,按復(fù)位鍵或上電重啟目標(biāo)平臺(tái)后可以從minicom或超級(jí)終端看到U-Boot在系統(tǒng)中運(yùn)行了。
通過(guò)以上步驟,完成了U-Boot移植的主要工作。
評(píng)論