www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 我并沒有為arm體系結(jié)構(gòu)的處理器移植uclinux操作系統(tǒng),因為這方面的關(guān)鍵工作已經(jīng)有人做完了。我只是讓uclinux操作系統(tǒng)在恒堅ARM4510開發(fā)板上跑起來了。一、 熟悉開發(fā)板硬件

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

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

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

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

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

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

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

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

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

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

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

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

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 /*將整個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)沒有,可忽略*/

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)沒有,可忽略*/

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次

//}

}

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

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

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

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

因為免費和開源,在科研和開發(fā)領(lǐng)域,linux操作系統(tǒng)正在逐漸取代windows操作系統(tǒng),成為個人計算機的主流操作系統(tǒng)。

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

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

2、 uclinux與linux的不同

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

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

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

三、 建立交叉編譯環(huán)境

1、 體系結(jié)構(gòu)的概念

大部分宿主機的cpu都是建立在X86體系結(jié)構(gòu)上的,如intel或賽揚的cpu,也有其它體系結(jié)構(gòu)的,但沒有arm體系的,因為arm幾乎是嵌入式設(shè)備專用的處理器體系結(jié)構(gòu)了。三星4510微控制器是建立在arm體系結(jié)構(gòu)之上的。體系結(jié)構(gòu)的不同,確立了不同的指令系統(tǒng),就像cpu使用不同的語言一樣。無法想象英國人可以讀懂俄文小說,同樣,為X86體系的cpu編譯的程序,也無法運行在arm體系結(jié)構(gòu)的微控制器之中了。

宿主機上運行的linux 操作系統(tǒng),是建立在X86體系結(jié)構(gòu)上的。在linux操作系統(tǒng)上編譯的程序,一般也是建立在X86體系上的。可以編寫幾個程序,用linux操作系統(tǒng)自帶的編譯工具gcc編譯它們,如果沒有語法錯誤,它們就都可以在宿主機上運行了。但要實現(xiàn)在宿主機上編寫程序,編譯后程序能在arm體系結(jié)構(gòu)的嵌入式設(shè)備上運行,就需要一套特殊的“交叉”編譯工具,如arm-elf-gcc等。所以,在linux操作系統(tǒng)的宿主機上編寫程序,通過選用交叉編譯工具arm- elf-gcc編譯后,生成的可執(zhí)行文件,就可以在arm體系結(jié)構(gòu)的微控制器上運行了。這就是交叉編譯的概念。

2、 建立交叉編譯環(huán)境

通過引入arm-elf-gcc等交叉編譯工具,可以在宿主機上建立交叉編譯環(huán)境。這樣,在宿主機上編譯的程序,就可以在arm體系結(jié)構(gòu)的嵌入式設(shè)備上運行了。恒堅開發(fā)板自帶的文件arm-elf-tools-20030314.sh,只要在linux環(huán)境下執(zhí)行它,就可以建立起完整的交叉編譯環(huán)境。

四、 編譯和下載uclinux操作系統(tǒng)

uclinux 操作系統(tǒng)已經(jīng)被成功移植到許多微控制器上,其中也包括三星4510微控制器。移植后的uclinux操作系統(tǒng)源代碼中含有微控制器外圍電路的設(shè)置,如 SDRAM數(shù)據(jù)線的位數(shù)。有些嵌入式設(shè)備,同樣是使用三星4510微控制器,卻用一片現(xiàn)代公司的8Mx16bits的SDRAM,這樣微控制器與 SDRAM的數(shù)據(jù)交換,就只用微控制器的低16位數(shù)據(jù)線。微控制器中的寄存器EXTDBWTH,用于配置每組(FLASH、SDRAM和外部I/O芯片等)的數(shù)據(jù)線的寬度。恒堅開發(fā)板上是用兩塊8Mx16bits的SDRAM拼成了32位數(shù)據(jù)線寬。

恒堅開發(fā)板自帶一套移植后的和壓縮了的 uclinux操作系統(tǒng)源代碼文件uClinux-dist-20030522.tar.gz,把它拷貝到宿主機linux操作系統(tǒng)的/home目錄下,進(jìn)入/home目錄,并用tar xzvf uClinux-dist-20030522.tar.gz命令解壓縮源代碼文件,產(chǎn)生/home目錄下的 /uClinux-dist子目錄,此目錄中含有編譯uclinux操作系統(tǒng)的全部源文件。把恒堅開發(fā)板自帶的壓縮的補丁文件uClinux-dist- patch.tar.gz拷貝到/uClinux-dist子目錄下。進(jìn)入/uClinux-dist子目錄,并用tar xzvf uClinux- dist-patch.tar.gz命令解壓縮補丁文件,可釋放出兩個文件:mkpatch和uClinux-dist-20030522- helloworld.patch,執(zhí)行./ mkpatch,既可對uclinux操作系統(tǒng)的源代碼打補丁。打補丁的根本原因,是為了修正源代碼中的硬件參數(shù)設(shè)置,如原移植源代碼是為一片SDRAM、16位數(shù)據(jù)線寬做的,而恒堅的板子上是兩片SDRAM,并通過高、低16位數(shù)據(jù)線的組合,構(gòu)成32位的數(shù)據(jù)線寬度。這就需要改變寄存器EXTDBWTH的賦值。還有原移植源代碼是為8M字節(jié)的SDRAM作的,而恒堅板上是16M字節(jié)的SDRAM,這又要改變寄存器SDRAMCON0的賦值了。

打完補丁后,就可以在/uClinux-dist子目錄下配置uclinux操作系統(tǒng)內(nèi)核了。執(zhí)行 make menuconfig,彈出的配置框中有四項內(nèi)容。在第一項中配置設(shè)備(vendors)為Samsung/4510B,配置函數(shù)庫為uC- lib,配置內(nèi)核為linux-2.4.x。另三項可不動,保存后退出。然后順序執(zhí)行如下命令:make dep;make lib_only; make user_only;make romfs;make image;make。如果沒有報告錯誤,在../uClinux- dist/linux-2.4.x/image子目錄下,就會有三個文件。其中,image.ram是非壓縮的uclinux操作系統(tǒng)內(nèi)核,可以利用恒堅開發(fā)板自帶的boot.bin(也就是一般所說的bootloader程序),通過網(wǎng)口傳送到SDRAM中。這樣,uclinux操作系統(tǒng)即可在 SDRAM中跑起來了。image.rom則是壓縮的uclinux操作系統(tǒng)內(nèi)核,并包含硬件相關(guān)的頭文件等。利用恒堅的集成開發(fā)環(huán)境,可以下載 image.rom到開發(fā)板的FLASH中,下載需要很長的時間。再次上電后,uclinux操作系統(tǒng)就在開發(fā)板上跑起來了。當(dāng)然,通過開發(fā)板串口與宿主機串口聯(lián)接,在宿主機上建立控制臺,是觀察和操控開發(fā)板上uclinux操作系統(tǒng)的首要條件。

五、 遇到的問題和解決的辦法

1、 曾經(jīng)想用cygwin代替linux操作系統(tǒng),花費了不少的時間,但沒有成功。

2、 linux操作系統(tǒng)可以安裝在大多數(shù)的微機上,但它無法識別我的一臺三星顯示器,那臺機子上就一直沒有再安裝linux操作系統(tǒng)。我還有一臺配有賽揚 500處理器的組裝機,用它編譯uclinux操作系統(tǒng)內(nèi)核,有時會出現(xiàn)錯誤。有人說,linux操作系統(tǒng)對機器要求較高,所以我現(xiàn)在用一臺標(biāo)準(zhǔn)配置的聯(lián)想微機。

3、 由于我用的恒堅開發(fā)板上的FLASH芯片地址線17、18腳連焊了,我編譯的內(nèi)核文件image.rom,用恒堅的集成開發(fā)環(huán)境下載后,總無法從FLASH中運行起來。我先分析了uclinux操作系統(tǒng)的源代碼,沒有找到問題;又做了一塊Jtag接口板,來替代恒堅的接口板,還是不行;用了其它的FLASH寫工具,才把問題定位在FLASH芯片上,前后用了兩周的時間,才解決了問題。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉