新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > U-Boot在S3C2410上的移植分析

        U-Boot在S3C2410上的移植分析

        作者: 時間:2012-04-19 來源:網絡 收藏

        與測試

        為了使工作更加快捷,應當選擇當前發布的最新版本1.1.2 (盡管通過CVS可以得到1.1.3,但其正在開發,尚未發布,不宜使用) 。因為最新的版本可以提供盡可能多的處理器核及開發板的支持。 對于U-Boot-1.1.2 而言,它不僅提供對ARM- 920T內核的支持,而且直接提供了對于 的板級支持,這使工作量相對減少。

        支持ARM- 920T內核的代碼修改

        由于U-Boot-1.1.2 提供對ARM-920T 內核的直接支持,所以本步驟不需要做任何工作,本文為了讓讀者了解BootLoder 移植的通用模式,在此只是稍加提示。

        配置自己的開發板

        建立自己開發板的目錄和相關文件。

        1) 在include/ configs目錄中以smdk2410.h為模板添加頭文件. h(cp smdk2410.h .h) 。 這個文件是開發板的配置文件,它包括開發板的CPU、系統時鐘、RAM、Flash系統及其它相關的配置信息。

        2) 在board/目錄下創建S3C2410目錄。拷貝smdk2410目錄下所有文件到S3C2410目錄下,共有如下六個文件:flash.c、 memsetup.c、S3C2410.c、Makefile、U-Boot .lds 和config.mk,根據開發板實際情況對各個文件進行修改。

        ◆flash.c.U-Boot讀、寫和刪除Flash 設備的源代碼文件。由于不同開發板中Flash 存儲器的種類各不相同,所以,修改flash.c時需參考相應的Flash 芯片手冊。它包括如下幾個函數:

        unsigned long flash-init (void ),Flash初始化;
        int flash-erase (flash-info-t *info,ints-first,ints -last),Flash擦除;
        volatile static int write- hword (flash-info-t *info,ulongdest , ulong data) ,Flash 寫入;
        int write-buff (flash-info-t *info,uchar *src ,ulongaddr,ulong cnt),從內存復制數據。

        由于本文開發板所用flash芯片為IntelTE28f128,在board/ cmi目錄中有此flash.c,只需對其稍加修改即可使用。

        ◆memsetup.c.初始化時鐘、SMC控制器和SDRAM控制器。為了以后能用U-Boot的GO命令執行修改過的用loadb或tftp下載的U-Boot.在標記符“0:”上加入五句:

        mov r3,pc
        ldr r4,= 0x3FFF0000
        and r3,r3,r4 / /以上三句得到實際起動的內存地址
        aad r0,r0,r3 / /用GO 命令調試uboot時,啟動地址在RAM
        add r2,r2,r3 / /把初始化內存信息的地址,加上實際起動地址

        ◆S3C2410.C.設置各種總線時鐘,打開數據Cache和指令Cache,并設置相關內存參數。

        ◆Makefile.修改:OBJS := S3C2410.o flash.omemsetup.o

        ◆U-Boot.lds.作如下修改:

        .text
        {
        cpu/ arm920t/ start.o ( .text)
        * (.text)
        }

        ◆config.mk.用于設置程序連接的起始地址,因為會在U-Boot 中增加功能,所以留下6M 的空間,修改33F80000 為33A00000。

        實現網卡的驅動程序

        在drivers/目錄中以dm9000x.c和dm9000x.h為模板添加網口設備控制程序dm9000.c和dm9000.h,其中dm9000.c主要包括以下函數:

        int eth-init (bd-t *bd),初始化網絡設備;
        int eth-send(volatile void *,int),發送數據包;
        int eth-rx(void),接收數據包。
        void eth-halt (void),關閉網絡設備;

        為了方便網絡設備的數據讀寫操作,還定義了如下函數:

        static int dm9000-probe (void),搜索DM9000芯片,分配空間并登記之;
        static u16 phy-read(int),從Phyxcer寄存器讀取一個字;
        static void phy-write ( int,u16),寫一個字到Phyxcer 寄存器;
        static u16 read-srom-word (int),從SROM 讀取一個字數據;
        static u8 DM9000-ior (int),從I/ O 口讀取一個字節;
        static void DM9000-iow(int reg,u8 value),寫一個字節到I/ O 口;
        最后在drivers/Makefile中加入dm9000.o。

        修改Makefile 文件
        在U-Boot-1.1.2/Makefile中ARM92xT Systems注釋下面加入以下兩行:
        S3C2410-config :unconfig
          @./ mkconfig $( @:-config = ) arm arm920tS3C2410



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阳朔县| 右玉县| 绥阳县| 承德县| 安岳县| 石嘴山市| 江城| 阿克苏市| 鄂伦春自治旗| 兖州市| 田林县| 密山市| 太保市| 天柱县| 绥滨县| 车致| 洪江市| 铅山县| 庆城县| 夏津县| 陇川县| 辉南县| 武冈市| 玛沁县| 鄂托克前旗| 诸暨市| 望谟县| 华宁县| 华池县| 富民县| 伊宁市| 洛扎县| 拉孜县| 北海市| 洪雅县| 三穗县| 江陵县| 抚松县| 沧源| 华容县| 房山区|