在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > U-boot1.1.6移植到TQ2440開發(fā)板(上)

            U-boot1.1.6移植到TQ2440開發(fā)板(上)

            作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
            U-Boot主要目錄結構

            - board 目標板相關文件,主要包含SDRAM、FLASH驅動;

            本文引用地址:http://www.biyoush.com/article/201611/321275.htm

            - common 獨立于處理器體系結構的通用代碼,如內存大小探測與故障檢測;

            - cpu 與處理器相關的文件。如mpc8xx子目錄下含串口、網(wǎng)口、LCD驅動及中斷初始化等文件;

            - driver 通用設備驅動,如CFI FLASH驅動(目前對INTEL FLASH支持較好)

            - doc U-Boot的說明文檔;

            - examples可在U-Boot下運行的示例程序;如hello_world.c,timer.c;

            - include U-Boot頭文件;尤其configs子目錄下與目標板相關的配置頭文件是移植過程中經(jīng)常要修改的文件;

            - lib_xxx 處理器體系相關的文件,如lib_ppc, lib_arm目錄分別包含與PowerPC、ARM體系結構相關的文件;

            - net 與網(wǎng)絡功能相關的文件目錄,如bootp,nfs,tftp;

            - post 上電自檢文件目錄。尚有待于進一步完善;

            - rtc RTC驅動程序;

            - tools 用于創(chuàng)建U-Boot S-RECORD和BIN鏡像文件的工具;

            一、建立自己的開發(fā)板文件

            1.在borad文件夾中新建自己的板子目錄,復制sbc2410x中的文件到此目錄,作為藍本,加快移植進度,修改板子目錄下的makefile文件COBJS := tq2440.o flash.o(其中tq2440.o文件的生成必須要修改此目錄下的sbc2410x.c文件)

            2.在include/configs文件夾下以sbc2410x.h為藍本,創(chuàng)建tq2440.h文件

            3.修改uboot根目錄下的makefile文件,確定CROSS_COMPLE即編譯器選項,加入make選項:

            tq2440_config:unconfig

            (TAB)@./mkconfig $(@:_config=) arm arm920t tq2440 NULL s3c24x0

            其中:

            arm: CPU的架構(ARCH)

            arm920t: CPU的類型(CPU),其對應于cpu/arm920t子目錄。

            tq2440: 開發(fā)板的型號(BOARD),對應于board/tq2440目錄。

            NULL: 開發(fā)者/或經(jīng)銷商(vender)。

            s3c24x0: 片上系統(tǒng)(SOC)。

            4.接下來測試是否能編譯通過,執(zhí)行:make disclean--刪除原來的編譯結果

            make tqconfig

            成功后出現(xiàn)Configuring for xxx board.....

            make –可以生成uboot.bin文件

            二、修改源碼

            1、修改start.S

            修改如下代碼:

            #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

            ldr r0, =pWTCON

            mov r1, #0x0

            str r1, [r0]

            mov r1, #0xffffffff

            ldr r0, =INTMSK

            str r1, [r0]

            # if defined(CONFIG_S3C2410)

            ldr r1, =0x3ff

            ldr r0, =INTSUBMSK

            str r1, [r0]

            # endif

            #ifdefined(CONFIG_S3C2440)

            ldr r1, =0x7fff

            ldr r0, =INTSUBMSK

            str r1, [r0]

            # endif

            #if0

            ldr r0, =CLKDIVN

            mov r1, #3

            str r1, [r0]

            #endif

            #endif

            #ifndefCONFIG_SKIP_LOWLEVEL_INIT

            bl cpu_init_crit

            #endif

            //把堆棧初始化拿到前面來,應為后面要寫的時鐘初始化函數(shù)會用到堆棧

            stack_setup:

            ldr r0, _TEXT_BASE

            sub r0, r0, #CFG_MALLOC_LEN

            sub r0, r0, #CFG_GBL_DATA_SIZE

            #ifdefCONFIG_USE_IRQ

            sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

            #endif

            sub sp, r0, #12

            //跳轉到時鐘初始話函數(shù)

            bl clock_init

            #ifndefCONFIG_SKIP_RELOCATE_UBOOT

            relocate:

            adr r0, _start

            ldr r1, _TEXT_BASE

            cmp r0, r1

            beq stack_setup

            ldr r2, _armboot_start

            ldr r3, _bss_start

            sub r2, r3, r2

            //屏蔽原先代碼,重寫代碼搬運函數(shù)

            #if1

            bl CopyCode2Ram

            #else

            add r2, r0, r2

            copy_loop:

            ldmia r0!, {r3-r10}

            stmia r1!, {r3-r10}

            cmp r0, r2

            ble copy_loop

            #endif

            #endif

            接著在include/configs/tq2440.h添加

            #define CONFIG_S3C2440 1

            #define CONFIG_TQ2440 1

            并屏蔽原先的芯片和開發(fā)板定義,與此同時s3c24x0.h中的S3C24X0_GPIO結構體也要改寫,使其支持2440,而且要添加

            S3C24X0_REG32 res9[4];

            S3C24X0_REG32 GPJCON;

            S3C24X0_REG32 GPJDAT;

            S3C24X0_REG32 GPJUP;

            此為GPIO_J口的定義

            添加typedefstruct{

            S3C24X0_REG32 NFCONF;

            S3C24X0_REG32 NFCONT;

            S3C24X0_REG32 NFCMD;

            S3C24X0_REG32 NFADDR;

            S3C24X0_REG32 NFDATA;

            S3C24X0_REG32 NFMECCD0;

            S3C24X0_REG32 NFMECCD1;

            S3C24X0_REG32 NFSECCD;

            S3C24X0_REG32 NFSTAT;

            S3C24X0_REG32 NFESTAT0;

            S3C24X0_REG32 NFESTAT1;

            S3C24X0_REG32 NFMECC0;

            S3C24X0_REG32 NFMECC1;

            S3C24X0_REG32 NFSECC;

            S3C24X0_REG32 NFSBLK;

            S3C24X0_REG32 NFEBLK;

            } S3C2440_NAND;

            其他結構體也要修改

            修改lowlevel_init.S,修改54,58,126行即可,即外部存儲器控制器。

            54 #defineB1_BWSCON (DW16)

            58 #defineB5_BWSCON (DW8)

            126 #defineREFCNT 0x4f4

            lowlevel_init.S 主要設置SDRAM配置

            ARM的存儲器控制器

            位寬和等待控制寄存器BWSCON中每4位控制一個BANK,最高4位對應BANK7、接下來4位對應BANK6,依此類推

            8 個存儲器 banks

            6 個是 ROM,SRAM 等類型存儲器 bank

            2 個是可以作為 ROM、SRAM、SDRAM 等存儲器 bank

            BANK控制寄存器BANKCONx(BANKCON1~5)這幾個寄存器用來控制BANK0~BANK5外接設備的訪問時序,一般使用默認的0x0700即可。

            BANK控制寄存器BANKCONx(BANKCON6~7,在8個BANK中,只有BANK6和BANK7可以外接SRAM和SDRAM,所以BANKCON6~BANKCON7與BANKCON0~BANKCON5有點不同。

            在board文件夾中添加boot_init.c文件,并修改makefile(boot_init.c文件主要包含nand的讀寫,時鐘的初始化,和代碼的拷貝函數(shù))

            boot_init.c

            #include

            #include

            #defineGSTATUS1 (*(volatileunsignedint*)0x560000B0)

            #defineBUSY 1

            #defineNAND_SECTOR_SIZE 512

            #defineNAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)

            #defineNAND_SECTOR_SIZE_LP 2048

            #defineNAND_BLOCK_MASK_LP (NAND_SECTOR_SIZE_LP - 1)

            charbLARGEBLOCK; //HJ_add 20090807

            charb128MB; //HJ_add 20090807

            voidnand_init_ll(void);

            intnand_read_ll(unsignedchar*buf, unsignedlongstart_addr, intsize);

            intnand_read_ll_lp(unsignedchar*buf, unsignedlongstart_addr, intsize);

            staticvoidnand_reset(void);

            staticvoidwait_idle(void);

            staticvoidnand_select_chip(void);

            staticvoidnand_deselect_chip(void);

            staticvoidwrite_cmd(intcmd);

            staticvoidwrite_addr(unsignedintaddr);

            staticvoidwrite_addr_lp(unsignedintaddr);

            staticunsignedcharread_data(void);

            intNF_ReadID(void); //HJ_add 20090807


            上一頁 1 2 3 下一頁

            評論


            相關推薦

            技術專區(qū)

            關閉