Blob在S3C44B0上的移植
摘要:Bootloader是嵌入式系統(tǒng)軟件開發(fā)的第一個(gè)環(huán)節(jié),它緊密地將軟硬件銜接在一起,對(duì)于一個(gè)嵌入式設(shè)備后續(xù)的軟件開發(fā)至關(guān)重要。Blob是一款功能強(qiáng)大的Bootloader,S3C44B0是三星公司一款基于ARM7TDMI的嵌入式通用處理器。本文詳細(xì)介紹Blob在基于S3C44B0的開發(fā)板上的運(yùn)行原理與移植過程。關(guān)鍵詞:S3C44B0 Blob Bootloader 移值
Bootloader對(duì)于嵌入式設(shè)備來說至關(guān)重要,它涉及到許多硬件相關(guān)的知識(shí)。對(duì)于自制的嵌入式開發(fā)板,它又是不可跳過的步驟,所以很多人對(duì)于它感到很頭痛。本文將以一款優(yōu)秀的Bootloader Blob為例,詳細(xì)講解它的運(yùn)行原理以及在S3C44B0通用處理器上的移植過程,為在嵌入式設(shè)備上的后續(xù)軟件開發(fā)打下基礎(chǔ)。
1 Blob簡(jiǎn)介
Blob是Boot Loader Object的縮寫,是一款功能強(qiáng)大的Bootloader。它遵循GPL,源泉代碼完全開放。Blob既可以用來簡(jiǎn)單的調(diào)試,也可以啟動(dòng)Linux kernel。Blob最初是Jan-Derk Bakker和Erik Mouw為一塊名為L(zhǎng)ART(Linux Advanced Radio Terminal)的板子寫的,該板使用的處理器是StrongARM SA-1100。現(xiàn)在Blob已經(jīng)被移植到了很多CPU上,包括S3C44B0。
MBA44B0是一款基于S3C44B0的開發(fā)板。本文將以運(yùn)行在MBA44B0開發(fā)板上的Blob的源代碼為基礎(chǔ),再針對(duì)自己的開發(fā)板進(jìn)行Blob的移植。
開發(fā)板的主要配置為:
*三星ARM7處理器S3C44B0;
*2MB的Flash,地址范圍0x0000 0000~0x0020 0000;
*8MB的SDRAM,地址范圍0x0c00 0000~0x0c80 0000;
*1個(gè)串口,2個(gè)LED燈;
*JTAG接口;
*晶振為6MHz,系統(tǒng)主頻為60MHz。
2 Blob的運(yùn)行過程分析
圖1為Blob程序啟動(dòng)流程
Blob編譯后的代碼定義最大為64KB,并且這64KB又分成兩個(gè)階段來執(zhí)行。第一階段的代碼在start.s中定義,大小為1KB,它包括從系統(tǒng)上電后在0x00000000地址開始執(zhí)行的部分。這部分代碼運(yùn)行在Flash中,它包括對(duì)S3C44B0的一些寄存器的初始化和將Blob第二階段代碼從Flash拷貝到SDRAM中。除去第一階段的1KB代碼,剩下的部分都是第二階段的代碼。第二階段的起始文件為trampoline.s,被復(fù)制到SDRAM后,就從第一階段跳到這個(gè)文件開始執(zhí)行剩余部分代碼。第二階段最大為63KB,單詞trampoline詞義為“蹦床”,所以在這個(gè)程序中進(jìn)行一些BSS段設(shè)置,堆棧的初始化等工作后,最后跳轉(zhuǎn)到main.c進(jìn)入C函數(shù)。
[1] [2] [3] [4] [5]