<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          U-Boot主要目錄結(jié)構(gòu)

          - board 目標(biāo)板相關(guān)文件,主要包含SDRAM、FLASH驅(qū)動(dòng);

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

          - common 獨(dú)立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測(cè)與故障檢測(cè);

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

          - driver 通用設(shè)備驅(qū)動(dòng),如CFI FLASH驅(qū)動(dòng)(目前對(duì)INTEL FLASH支持較好)

          - doc U-Boot的說明文檔;

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

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

          - lib_xxx 處理器體系相關(guān)的文件,如lib_ppc, lib_arm目錄分別包含與PowerPC、ARM體系結(jié)構(gòu)相關(guān)的文件;

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

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

          - rtc RTC驅(qū)動(dòng)程序;

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

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

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

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

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

          tq2440_config:unconfig

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

          其中:

          arm: CPU的架構(gòu)(ARCH)

          arm920t: CPU的類型(CPU),其對(duì)應(yīng)于cpu/arm920t子目錄。

          tq2440: 開發(fā)板的型號(hào)(BOARD),對(duì)應(yīng)于board/tq2440目錄。

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

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

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

          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

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

          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

          //跳轉(zhuǎn)到時(shí)鐘初始話函數(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

          //屏蔽原先代碼,重寫代碼搬運(yùn)函數(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ā)板定義,與此同時(shí)s3c24x0.h中的S3C24X0_GPIO結(jié)構(gòu)體也要改寫,使其支持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;

          其他結(jié)構(gòu)體也要修改

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

          54 #defineB1_BWSCON (DW16)

          58 #defineB5_BWSCON (DW8)

          126 #defineREFCNT 0x4f4

          lowlevel_init.S 主要設(shè)置SDRAM配置

          ARM的存儲(chǔ)器控制器

          位寬和等待控制寄存器BWSCON中每4位控制一個(gè)BANK,最高4位對(duì)應(yīng)BANK7、接下來4位對(duì)應(yīng)BANK6,依此類推

          8 個(gè)存儲(chǔ)器 banks

          6 個(gè)是 ROM,SRAM 等類型存儲(chǔ)器 bank

          2 個(gè)是可以作為 ROM、SRAM、SDRAM 等存儲(chǔ)器 bank

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

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

          在board文件夾中添加boot_init.c文件,并修改makefile(boot_init.c文件主要包含nand的讀寫,時(shí)鐘的初始化,和代碼的拷貝函數(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


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

          關(guān)鍵詞: U-boot116TQ2440開發(fā)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();