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