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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux開發(fā)環(huán)境的搭建之:U-Boot移植

          嵌入式Linux開發(fā)環(huán)境的搭建之:U-Boot移植

          作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

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

          (4)memsetup.S

          這個文件是用于配置開發(fā)板參數(shù)的,如下所示:

          /*memsetup.c*/

          /*memorycontrolconfiguration*/

          /*maker0relativethecurrentlocationsothatit*/

          /*readsSMRDATAoutofFLASHratherthanmemory!*/

          ldrr0,=SMRDATA

          ldrr1,_TEXT_BASE

          subr0,r0,r1

          ldrr1,=BWSCON /*BusWidthStatusController*/

          addr2,r0,#52

          0:

          ldrr3,[r0],#4

          strr3,[r1],#4

          cmpr2,r0

          bne0b

          /*everythingisfinenow*/

          movpc,lr

          .ltorg

          5.2.4主要步驟

          (1)建立自己的開發(fā)板類型。

          閱讀makefile文件,在makefile文件中添加兩行,如下所示:

          fs2410_config:unconfig

          @./mkconfig$(@:_config=)armarm920tfs2410

          其中“arm”為表示處理器體系結(jié)構(gòu)的種類,“arm920t”表示處理器體系結(jié)構(gòu)的名稱,“fs2410”為主板名稱。

          在board目錄中建立fs2410目錄,并將smdk2410目錄中的內(nèi)容(cp–asmdk2410/*fs2410)復(fù)制到該目錄中。

          n 在include/configs/目錄下將smdk2410.h復(fù)制到(cpsmdk2410.hfs2410.h)。

          n 修改ARM編譯器的目錄名及前綴(都要改成以“fs2410”開頭)。

          n 完成之后,可以測試配置。

          $makefs2410_config;make

          (2)修改程序鏈接地址。

          在board/s3c2410中有一個config.mk文件,它是用于設(shè)置程序鏈接的起始地址,因?yàn)闀赨-Boot中增加功能,所以留下6MB的空間,修改33F80000為33A00000。

          為了以后能用U-Boot的“go”命令執(zhí)行修改過的用loadb或tftp下載的U-Boot,需要在board/s3c2410的memsetup.S中標(biāo)記符”0:”上加入5句:

          movr3,pc

          ldrr4,=0x3FFF0000

          andr3,r3,r4(以上3句得到實(shí)際代碼啟動的內(nèi)存地址)

          aadr0,r0,r3(用go命令調(diào)試u-boot時,啟動地址在RAM)

          addr2,r2,r3(把初始化內(nèi)存信息的地址,加上實(shí)際啟動地址)

          (3)將中斷禁止的部分應(yīng)該改為如下所示(/cpu/arm920t/start.S):

          #ifdefined(CONFIG_S3C2410)

          ldrr1,=0x7ff

          ldrr0,=INTSUBMSK

          strr1,[r0]

          #endif

          (4)因?yàn)樵趂s2410開發(fā)板啟動時是直接從NandFlash加載代碼,所以啟動代碼應(yīng)該改成如下所示(/cpu/arm920t/start.S):

          #ifdefCONFIG_S3C2410_NAND_BOOT@START

          @resetNAND

          movr1,#NAND_CTL_BASE

          ldrr2,=0xf830@initialvalue

          strr2,[r1,#oNFCONF]

          ldrr2,[r1,#oNFCONF]

          bicr2,r2,#0x800@enablechip

          strr2,[r1,#oNFCONF]

          movr2,#0xff@RESETcommand

          strbr2,[r1,#oNFCMD]

          movr3,#0@wait

          nand1:

          addr3,r3,#0x1

          cmpr3,#0xa

          bltnand1

          nand2:

          ldrr2,[r1,#oNFSTAT]@waitready

          tstr2,#0x1

          beqnand2

          ldrr2,[r1,#oNFCONF]

          orrr2,r2,#0x800@disablechip

          strr2,[r1,#oNFCONF]

          @getreadtocallCfunctions(fornand_read())

          ldrsp,DW_STACK_START@setupstackpointer

          movfp,#0@nopreviousframe,sofp=0

          @copyU-BoottoRAM

          ldrr0,=TEXT_BASE

          movr1,#0x0

          movr2,#0x20000

          blnand_read_ll

          tstr0,#0x0

          beqok_nand_read

          bad_nand_read:

          loop2:bloop2@infiniteloop

          ok_nand_read:

          @verify

          movr0,#0

          ldrr1,=TEXT_BASE

          movr2,#0x400@4bytes*1024=4K-bytes

          go_next:

          ldrr3,[r0],#4

          ldrr4,[r1],#4

          teqr3,r4

          bnenotmatch

          subsr2,r2,#4

          beqstack_setup

          bnego_next

          notmatch:

          loop3:bloop3@infiniteloop

          #endif@CONFIG_S3C2410_NAND_BOOT@END

          在“_start_armboot:.wordstart_armboot”后加入:

          .align2

          DW_STACK_START:.wordSTACK_BASE+STACK_SIZE-4

          (5)修改內(nèi)存配置(board/fs2410/lowlevel_init.S)。

          #defineBWSCON0x48000000

          #definePLD_BASE0x2C000000

          #defineSDRAM_REG0x2C000106

          /*BWSCON*/

          #defineDW8 (0x0)

          #defineDW16(0x1)

          #defineDW32(0x2)

          #defineWAIT(0x12)

          #defineUBLB(0x13)

          /*BANKSIZE*/

          #defineBURST_EN(0x17)

          #defineB1_BWSCON(DW16+WAIT)

          #defineB2_BWSCON(DW32)

          #defineB3_BWSCON(DW32)

          #defineB4_BWSCON(DW16+WAIT+UBLB)

          #defineB5_BWSCON(DW8+UBLB)

          #defineB6_BWSCON(DW32)

          #defineB7_BWSCON(DW32)

          /*BANK0CON*/

          #defineB0_Tacs0x0/*0clk*/

          #defineB0_Tcos0x1/*1clk*/

          #defineB0_Tacc0x7/*14clk*/

          #defineB0_Tcoh0x0/*0clk*/

          #defineB0_Tah0x0/*0clk*/

          #defineB0_Tacp0x0/*pagemodeisnotused*/

          #defineB0_PMC0x0/*pagemodedisabled*/

          /*BANK1CON*/

          #defineB1_Tacs0x0/*0clk*/

          #defineB1_Tcos0x1/*1clk*/

          #defineB1_Tacc0x7/*14clk*/

          #defineB1_Tcoh0x0/*0clk*/

          #defineB1_Tah0x0/*0clk*/

          #defineB1_Tacp0x0/*pagemodeisnotused*/

          #defineB1_PMC0x0/*pagemodedisabled*/

          ……

          /*REFRESHparameter*/

          #defineREFEN0x1/*Refreshenable*/

          #defineTREFMD0x0/*CBR(CASbeforeRAS)/Autorefresh*/

          #defineTrp0x0/*2clk*/

          #defineTrc0x3/*7clk*/

          #defineTchr0x2/*3clk*/

          #defineREFCNT1113/*period=15.6us,HCLK=60Mhz,(2048+1-15.6*60)*/

          ......

          .word((B6_MT15)+(B6_Trcd2)+(B6_SCAN))

          .word((B7_MT15)+(B7_Trcd2)+(B7_SCAN))

          .word((REFEN23)+(TREFMD22)+(Trp20)+(Trc18)+(Tchr16)+REFCNT)

          .word0x32

          .word0x30

          .word0x30

          (6)加入NandFlash讀函數(shù)(創(chuàng)建board/fs2410/nand_read.c文件)。

          #includeconfig.h>

          #define__REGb(x)(*(volatileunsignedchar*)(x))

          #define__REGi(x)(*(volatileunsignedint*)(x))

          #defineNF_BASE0x4e000000

          #defineNFCONF__REGi(NF_BASE+0x0)

          #defineNFCMD__REGb(NF_BASE+0x4)

          #defineNFADDR__REGb(NF_BASE+0x8)

          #defineNFDATA__REGb(NF_BASE+0xc)

          #defineNFSTAT__REGb(NF_BASE+0x10)

          #defineBUSY1

          inlinevoidwait_idle(void)

          {

          Inti;

          while(!(NFSTATBUSY))

          {

          for(i=0;i10;i++);

          }

          }

          /*lowlevelnandreadfunction*/

          intnand_read_ll(unsignedchar*buf,unsignedlongstart_addr,intsize)

          {

          inti,j;

          if((start_addrNAND_BLOCK_MASK)||(sizeNAND_BLOCK_MASK))

          {

          return-1;/*invalidalignment*/

          }

          /*chipEnable*/

          NFCONF=~0x800;

          for(i=0;i10;i++);

          for(i=start_addr;i(start_addr+size);)

          {

          /*READ0*/

          NFCMD=0;

          /*WriteAddress*/

          NFADDR=i0xff;

          NFADDR=(i>>9)0xff;

          NFADDR=(i>>17)0xff;

          NFADDR=(i>>25)0xff;

          wait_idle();

          for(j=0;jNAND_SECTOR_SIZE;j++,i++)

          {

          *buf=(NFDATA0xff);

          buf++;

          }

          }

          /*chipDisable*/

          NFCONF|=0x800;/*chipdisable*/

          return0;

          }

          修改board/fs2410/makefile文件,以增加nand_read()函數(shù)。

          OBJS:=fs2410.oflash.onand_read.o

          c語言相關(guān)文章:c語言教程


          linux相關(guān)文章:linux教程




          評論


          相關(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); })();