新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM 4510開(kāi)發(fā)板移植uclinux手記

ARM 4510開(kāi)發(fā)板移植uclinux手記

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

我并沒(méi)有為arm體系結(jié)構(gòu)的處理器移植uclinux操作系統(tǒng),因?yàn)檫@方面的關(guān)鍵工作已經(jīng)有人做完了。我只是讓uclinux操作系統(tǒng)在恒堅(jiān)ARM4510開(kāi)發(fā)板上跑起來(lái)了。

本文引用地址:http://www.2s4d.com/article/201610/305780.htm

一、 熟悉開(kāi)發(fā)板硬件構(gòu)成和基本工作原理

恒堅(jiān)ARM4510開(kāi)發(fā)板選用32位的高性能三星4510微控制器、SST公司2Mx16bits的FLASH和現(xiàn)代公司的兩片8Mx16bits的 SDRAM,共同構(gòu)成了基本嵌入式硬件系統(tǒng),屬典型的嵌入式設(shè)備開(kāi)發(fā)板,而且外圍實(shí)驗(yàn)用件、開(kāi)發(fā)及接口電路較為齊全。恒堅(jiān)開(kāi)發(fā)板自帶的集成開(kāi)發(fā)環(huán)境,易學(xué)易用,作為嵌入式軟件編譯入門(mén)和熟悉開(kāi)發(fā)板硬件構(gòu)成,還是不錯(cuò)的。在windows環(huán)境下,安裝恒堅(jiān)集成開(kāi)發(fā)環(huán)境。然后,先跑恒堅(jiān)開(kāi)發(fā)板配的流水燈實(shí)驗(yàn)程序。從程序中,可以體會(huì)到幾點(diǎn):

1、 嵌入式軟件構(gòu)成

嵌入式軟件一般由一段匯編程序(init.s)和隨后的C程序構(gòu)成。匯編程序作為起始部分,被定位在0x0地址,這個(gè)地址是硬件系統(tǒng)上電后,首先執(zhí)行的地址。匯編程序通過(guò)寫(xiě)微控制器的各個(gè)硬件寄存器,完成硬件的初始化,如配置SDRAM地址、數(shù)據(jù)線位數(shù)(8位、16位、32位)等,然后跳轉(zhuǎn)到后面的C程序中運(yùn)行。

2、 嵌入式硬件構(gòu)成

軟、硬件是相互關(guān)聯(lián)的。雖然用放大鏡查板子、萬(wàn)用表量電路,都是熟悉“硬”構(gòu)成的基礎(chǔ)。這方面,可以查一下微控制器的32位數(shù)據(jù)線是如何與兩片SDRAM的數(shù)據(jù)線相連的;還有低16位數(shù)據(jù)線與FLASH的16位數(shù)據(jù)線是如何相連的。

通過(guò)軟件編程,可以寫(xiě)數(shù)據(jù)到微控制器的寄存器中,以配置硬件結(jié)構(gòu)、功能、性能等。比如,向微控制器的SDRAMCON0寄存器中寫(xiě)入 0x20040380,SDRAM的地址就映射在微控制器的存取地址區(qū)域0x1000000~0x2000000之間。如果再次向SDRAMCON0寄存器中寫(xiě)入0x10000380,則SDRAM的地址就映射到0x0~0x1000000之間了。同時(shí)配合改寫(xiě)FLASH(ROM)控制寄存器 ROMCON0的內(nèi)容,可把FLASH由上電時(shí)的0x0地址,映射到0x1000000地址,這就是地址重映射(remap)原理。重映射的目的,是讓程序能夠在SDRAM中運(yùn)行,而非FLASH中,其原因是多樣的。

以上硬件相關(guān)內(nèi)容,可參考《ARM應(yīng)用系統(tǒng)開(kāi)發(fā)詳解──基于S3C4510B的系統(tǒng)設(shè)計(jì)》一書(shū)的“應(yīng)用系統(tǒng)設(shè)計(jì)與調(diào)試”一章,還有現(xiàn)代公司的SDRAM芯片數(shù)據(jù)資料、SST公司的FLASH芯片數(shù)據(jù)資料等。

3、 地址重映射的實(shí)現(xiàn)

在跑馬燈實(shí)驗(yàn)程序中增加代碼,可以實(shí)現(xiàn)地址重映射,并讓程序在FLASH和SDRAM中循環(huán)跑動(dòng)起來(lái)。

在匯編部分(init.s)的BL C_Entry 語(yǔ)句后,插入如下代碼:

ldr r0, =0x0 /* FLASH起始地址*/

ldr r1, =0x200000 /* FLASH大小2M */

ldr r2, =0x1000000 /*SDRAM起始地址*/

rom2ram_copy_loop: /* copy image to ram*/

ldr r3, [r0], #4 /*[r0]->r3, r0=r0+4*/

str r3, [r2], #4 /*r3->[r2], r2=r2+4*/

subs r1, r1, #4 /*r1=r1-4*/

bne rom2ram_copy_loop /*將整個(gè)FLASH中的內(nèi)容,全部拷貝到SDRAM中*/

LDR r1, =rEXTDBWTH /*設(shè)置外圍各芯片與微控制器連結(jié)的數(shù)據(jù)線寬度(位)*/

LDR r2, =rROMCON0_S /*設(shè)置FLASH(ROM)起始(0x1000000)、結(jié)束地址*/

LDR r3, =rROMCON1 /*設(shè)置第二片ROM,本系統(tǒng)沒(méi)有,可忽略*/

LDR r4, =rROMCON2 /*同上*/

LDR r5, =rROMCON3 /*同上*/

LDR r6, =rROMCON4 /*同上*/

LDR r7, =rROMCON5 /*同上*/

LDR r8, =rSDRAMCON0_S /*設(shè)置SDRAM起始(0x0)、結(jié)束地址*/

LDR r9, =rSDRAMCON1 /*設(shè)置第二片SDRAM,本系統(tǒng)沒(méi)有,可忽略*/

LDR r10,=rSDRAMCON2 /*同上*/

LDR r11,=rSDRAMCON3 /*同上*/

LDR r12,=rSREFEXTCON /*設(shè)置SDRAM刷新率及外部I/O組0的地址*/

LDR r0, =EXTDBWTH /*寄存器組的起始地址,0x3FF3010*/

STMIA r0, {r1-r12} /* remap![r1]->[r0], [r2]->[r0+4], [r3]->[r0+8]……*

/*把SDRAM的地址映射到0x0,F(xiàn)LASH則映射到0x1000000*/

BL C_Entry /*重映射后,再次循環(huán)走燈和閃爍*/

另外,還須更改C代碼主程序C_Entry()中的內(nèi)容如下:

{

//while(1) 不再進(jìn)入死循環(huán)

//{

ledRun(10); //循環(huán)走燈10次

shineled(5); //閃爍5次

//}

}

用恒堅(jiān)的集成編譯環(huán)境編譯并下載程序到開(kāi)發(fā)板,觀察同樣的C程序在FLASH和SDRAM中運(yùn)行時(shí)跑馬燈的循環(huán)和閃爍速度是否不同。

恒堅(jiān)開(kāi)發(fā)板還配有幾個(gè)程序,如串口通信實(shí)驗(yàn)程序,LCD顯示控制實(shí)驗(yàn)程序。這些程序都不大,很經(jīng)典,值得花些時(shí)間認(rèn)真研究一下。

最后需要說(shuō)明,集成開(kāi)發(fā)環(huán)境多用于編譯簡(jiǎn)單的程序,如單循環(huán)前后臺(tái)式的、編程量不大的應(yīng)用程序。如果要實(shí)現(xiàn)多任務(wù)下的復(fù)雜調(diào)度,又要能簡(jiǎn)化軟件設(shè)計(jì)和充分利用微控制器的高性能,就要嵌入操作系統(tǒng)了。在引入uclinux操作系統(tǒng)后,一般改用命令行式的編譯工具,如arm-elf-gcc等,它們運(yùn)行在 Linux操作系統(tǒng)之上,而非windows操作系統(tǒng)了。

二、 學(xué)用Linux操作系統(tǒng)

因?yàn)槊赓M(fèi)和開(kāi)源,在科研和開(kāi)發(fā)領(lǐng)域,linux操作系統(tǒng)正在逐漸取代windows操作系統(tǒng),成為個(gè)人計(jì)算機(jī)的主流操作系統(tǒng)。

1、 為(宿)主機(jī)安裝linux操作系統(tǒng)

選擇內(nèi)核穩(wěn)定的高版本linux操作系統(tǒng),可以保證安裝時(shí)對(duì)硬件設(shè)備的自動(dòng)識(shí)別,更可保證以后編譯和運(yùn)行的可靠性。硬盤(pán)分區(qū)時(shí),必須建立交換分區(qū) (swap),其大小是主機(jī)內(nèi)存的兩倍;還要有一個(gè)ext3分區(qū)掛載在linux系統(tǒng)根目錄()下,它至少要有3G;條件許可,還可以建立一個(gè)100M 大小的分區(qū),掛載在啟動(dòng)目錄(boot)下。選擇工作站方式安裝linux系統(tǒng)即可。

2、 uclinux與linux的不同

uclinux源自linux,是對(duì)后者的裁減、精化,也有一些改動(dòng)。后者多用于臺(tái)式機(jī),對(duì)硬件設(shè)備要求高。前者則多用于嵌入式設(shè)備中,畢竟嵌入式設(shè)備資源有限。

3、 其它虛擬操作系統(tǒng)

有些建立在windows操作系統(tǒng)之上的或并行的虛擬linux環(huán)境,如cygwin,VM等,但它們并不適合初次移植uclinux操作系統(tǒng)到嵌入式設(shè)備時(shí)選用。如果選用它們,就必須更改uclinux系統(tǒng)源代碼中的多份Makefile文件內(nèi)容,以適應(yīng)編譯時(shí)從標(biāo)準(zhǔn)linux操作系統(tǒng)到其仿真環(huán)境的變化。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉