新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM 4510開發板移植uclinux手記

        ARM 4510開發板移植uclinux手記

        作者: 時間:2016-10-08 來源:網絡 收藏

        我并沒有為arm體系結構的處理器移植uclinux操作系統,因為這方面的關鍵工作已經有人做完了。我只是讓uclinux操作系統在恒堅ARM4510開發板上跑起來了。

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

        一、 熟悉開發板硬件構成和基本工作原理

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

        1、 嵌入式軟件構成

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

        2、 嵌入式硬件構成

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

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

        以上硬件相關內容,可參考《ARM應用系統開發詳解──基于S3C4510B的系統設計》一書的“應用系統設計與調試”一章,還有現代公司的SDRAM芯片數據資料、SST公司的FLASH芯片數據資料等。

        3、 地址重映射的實現

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

        在匯編部分(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中的內容,全部拷貝到SDRAM中*/

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

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

        LDR r3, =rROMCON1 /*設置第二片ROM,本系統沒有,可忽略*/

        LDR r4, =rROMCON2 /*同上*/

        LDR r5, =rROMCON3 /*同上*/

        LDR r6, =rROMCON4 /*同上*/

        LDR r7, =rROMCON5 /*同上*/

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

        LDR r9, =rSDRAMCON1 /*設置第二片SDRAM,本系統沒有,可忽略*/

        LDR r10,=rSDRAMCON2 /*同上*/

        LDR r11,=rSDRAMCON3 /*同上*/

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

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

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

        /*把SDRAM的地址映射到0x0,FLASH則映射到0x1000000*/

        BL C_Entry /*重映射后,再次循環走燈和閃爍*/

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

        {

        //while(1) 不再進入死循環

        //{

        ledRun(10); //循環走燈10次

        shineled(5); //閃爍5次

        //}

        }

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

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

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

        二、 學用Linux操作系統

        因為免費和開源,在科研和開發領域,linux操作系統正在逐漸取代windows操作系統,成為個人計算機的主流操作系統。

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

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

        2、 uclinux與linux的不同

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

        3、 其它虛擬操作系統

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


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 波密县| 池州市| 清流县| 屏东市| 哈巴河县| 青铜峡市| 靖江市| 克拉玛依市| 兴城市| 泗洪县| 沭阳县| 华安县| 诏安县| 泰宁县| 嘉祥县| 萍乡市| 栾川县| 中牟县| 梧州市| 金川县| 夏邑县| 襄汾县| 甘孜| 绵阳市| 顺昌县| 奎屯市| 乌拉特后旗| 临江市| 丘北县| 调兵山市| 舒兰市| 南城县| 尤溪县| 德化县| 辉南县| 武宁县| 金平| 密云县| 莒南县| 贡觉县| 焉耆|