uboot116移植到S3C2410的详细步骤nand flash新代码.docx

上传人:b****3 文档编号:5920969 上传时间:2023-05-09 格式:DOCX 页数:25 大小:22.18KB
下载 相关 举报
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第1页
第1页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第2页
第2页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第3页
第3页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第4页
第4页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第5页
第5页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第6页
第6页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第7页
第7页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第8页
第8页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第9页
第9页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第10页
第10页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第11页
第11页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第12页
第12页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第13页
第13页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第14页
第14页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第15页
第15页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第16页
第16页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第17页
第17页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第18页
第18页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第19页
第19页 / 共25页
uboot116移植到S3C2410的详细步骤nand flash新代码.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

uboot116移植到S3C2410的详细步骤nand flash新代码.docx

《uboot116移植到S3C2410的详细步骤nand flash新代码.docx》由会员分享,可在线阅读,更多相关《uboot116移植到S3C2410的详细步骤nand flash新代码.docx(25页珍藏版)》请在冰点文库上搜索。

uboot116移植到S3C2410的详细步骤nand flash新代码.docx

uboot116移植到S3C2410的详细步骤nandflash新代码

一、移植前说明:

1.工作环境:

RedHat9,内核2.4.20

交叉编译器:

Arm-linux-gcc3.4.4

目标板:

s3c2410,NANDFlash:

64MK9F1208U0B

2.下载源码,建立工作目录

u-boot的源码可以从以下网址下载:

把下载的源码拷贝到/tmp目录,解压;

tarjxvfu-boot-1.1.6.tar.bz2

二、移植步骤如下:

1.在board子目录中建立自己的目录tbwoody2410

[root@localhostu-boot-1.1.6]#cp-rfboard/smdk2410board/tbwoody2410

[root@localhostu-boot-1.1.6]#cpinclude/configs/smdk2410.hinclude/configs/tbwoody2410.h

[root@localhostu-boot-1.1.6]#cdboard/tbwoody2410

[root@localhosttbwoody2410]#mvsmdk2410.ctbwoody2410.c

tbwoody2410.h是开发板的配置文件,他包括开发板的CPU、系统时钟、RAM、FLASH系统及其他相关的配置信息,

由于u-boot已经支持三星的SMDK2410开发板,所以移植的时候直接拷贝SMDK2410的配置文件,做相应的修改即可。

由于Uboot对SMDK2410板的NANDFlash初始化部分没有写,即lib_arm/board.c中的start_armboot函数中有这么一句:

#if(CONFIG_COMMANDS&CFG_CMD_NAND)

puts("NAND:

");

nand_init();/*goinittheNAND*/

#endif

但是在board/smdk2410目录下源文件中都没有定义nand_init这个函数。

所以需要我们补充这个函数以及这个函数涉及的底层操作,

NANDFlash的读写操作相对复杂。

2.修改顶层Makefile,回到u-boot-1.1.6目录

[root@localhostu-boot-1.1.6]#geditMakefile

找到1879行,

smdk2410_config:

unconfig

@$(MKCONFIG)$(@:

_config=)armarm920tsmdk2410NULLs3c24x0

在后面添加自己的配置:

tbwoody2410_config:

unconfig

@$(MKCONFIG)$(@:

_config=)armarm920ttbwoody2410NULLs3c24x0

各项的意思如下:

arm:

CPU的架构(ARCH)

arm920t:

CPU的类型(CPU),其对应于cpu/arm920t子目录。

tbwoody2410:

开发板的型号(BOARD),对应于board/tbwoody2410目录。

NULL:

开发者/或经销商(vender)。

s3c24x0:

片上系统(SOC)。

3.修改include/configs/tbwoody2410.h文件

修改:

111行

#defineCFG_PROMPT“SMDK2410#”

为:

#defineCFG_PROMPT“tbwoody2410#”

这是u-boot的命令行提示符。

4.修改board/tbwoody2410/Makefile

将:

OBJS:

=smdk2410.oflash.o

改为:

OBJS:

=tbwoody2410.oflash.o

当然,tbwoody2410下的smdk2410.c在前面我们已经改成了tbwoody2410.c;

5.依照你自己开发板的内存地址分配情况修改board/tbwoody2410/lowlevel_init.S文件

#include

#include

#defineBWSCON0x48000000

/*BWSCON*/

#defineDW8(0x0)

#defineDW16(0x1)

#defineDW32(0x2)

#defineWAIT(0x1<<2)

#defineUBLB(0x1<<3)

#defineB1_BWSCON(DW16)

#defineB2_BWSCON(DW16)

#defineB3_BWSCON(DW16+WAIT+UBLB)

#defineB4_BWSCON(DW16)

#defineB5_BWSCON(DW16)

#defineB6_BWSCON(DW32)

#defineB7_BWSCON(DW32)

/*BANK0CON*/

#defineB0_Tacs0x3/*0clk*/

#defineB0_Tcos0x3/*0clk*/

#defineB0_Tacc0x7/*14clk*/

#defineB0_Tcoh0x3/*0clk*/

#defineB0_Tah0x3/*0clk*/

#defineB0_Tacp0x3

#defineB0_PMC0x3/*normal*/

/*BANK1CON*/

#defineB1_Tacs0x3/*0clk*/

#defineB1_Tcos0x3/*0clk*/

#defineB1_Tacc0x7/*14clk*/

#defineB1_Tcoh0x3/*0clk*/

#defineB1_Tah0x3/*0clk*/

#defineB1_Tacp0x3

#defineB1_PMC0x0

#defineB2_Tacs0x0

#defineB2_Tcos0x0

#defineB2_Tacc0x7

#defineB2_Tcoh0x0

#defineB2_Tah0x0

#defineB2_Tacp0x0

#defineB2_PMC0x0

#defineB3_Tacs0x0/*0clk*/

#defineB3_Tcos0x3/*4clk*/

#defineB3_Tacc0x7/*14clk*/

#defineB3_Tcoh0x1/*1clk*/

#defineB3_Tah0x0/*0clk*/

#defineB3_Tacp0x3/*6clk*/

#defineB3_PMC0x0/*normal*/

#defineB4_Tacs0x0/*0clk*/

#defineB4_Tcos0x0/*0clk*/

#defineB4_Tacc0x7/*14clk*/

#defineB4_Tcoh0x0/*0clk*/

#defineB4_Tah0x0/*0clk*/

#defineB4_Tacp0x0

#defineB4_PMC0x0/*normal*/

#defineB5_Tacs0x0/*0clk*/

#defineB5_Tcos0x0/*0clk*/

#defineB5_Tacc0x7/*14clk*/

#defineB5_Tcoh0x0/*0clk*/

#defineB5_Tah0x0/*0clk*/

#defineB5_Tacp0x0

#defineB5_PMC0x0/*normal*/

#defineB6_MT0x3/*SDRAM*/

#defineB6_Trcd0x1

#defineB6_SCAN0x1/*9bit*/

#defineB7_MT0x3/*SDRAM*/

#defineB7_Trcd0x1/*3clk*/

#defineB7_SCAN0x1/*9bit*/

/*REFRESHparameter*/

#defineREFEN0x1/*Refreshenable*/

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

#defineTrp0x0/*2clk*/

#defineTrc0x3/*7clk*/

#defineTchr0x2/*3clk*/

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

/**************************************/

_TEXT_BASE:

.wordTEXT_BASE

.globllowlevel_init

lowlevel_init:

/*memorycontrolconfiguration*/

/*maker0relativethecurrentlocationsothatit*/

/*readsSMRDATAoutofFLASHratherthanmemory!

*/

ldrr0,=SMRDATA

ldrr1,_TEXT_BASE

subr0,r0,r1

ldrr1,=BWSCON/*BusWidthStatusController*/

addr2,r0,#13*4

0:

ldrr3,[r0],#4

strr3,[r1],#4

cmpr2,r0

bne0b

/*everythingisfinenow*/

movpc,lr

.ltorg

/*theliteralpoolsorigin*/

SMRDATA:

.word(0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))

.word((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))

.word((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))

.word((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))

.word((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))

.word((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))

.word((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))

.word((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))

.word((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))

.word((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)

.word0x32

.word0x30

.word0x30

6.测试编译能否成功

[root@localhostu-boot-1.1.6]#maketbwoody2410_config

[root@localhostu-boot-1.1.6]#makeCROSS_COMPILE=arm-linux-

如果没有问题,在u-boot-1.1.6目录下就生成u-boot.bin,因为到这一步只是做了点小改动,

并未涉及敏感问题,测试一下可增加点信心.O(∩_∩)O~

7.在board/tbwoody2410下加入NANDFLASH读函数,建立nand_read.c,加入如下内容(copyfromvivi):

#include

#include"linux/mtd/mtd.h"

#include"linux/mtd/nand.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(!

(NFSTAT&BUSY))

for(i=0;i<10;i++);

}

#defineNAND_SECTOR_SIZE512

#defineNAND_BLOCK_MASK(NAND_SECTOR_SIZE-1)

/*lowlevelnandreadfunction*/

int

nand_read_ll(unsignedchar*buf,unsignedlongstart_addr,intsize)

{

inti,j;

if((start_addr&NAND_BLOCK_MASK)||(size&NAND_BLOCK_MASK)){

return-1;/*invalidalignment*/

}

/*chipEnable*/

NFCONF&=~0x800;

for(i=0;i<10;i++);

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

/*READ0*/

NFCMD=0;

/*WriteAddress*/

NFADDR=i&0xff;

NFADDR=(i>>9)&0xff;

NFADDR=(i>>17)&0xff;

NFADDR=(i>>25)&0xff;

wait_idle();

for(j=0;j

*buf=(NFDATA&0xff);

buf++;

}

}

/*chipDisable*/

NFCONF|=0x800;/*chipdisable*/

return0;

}

8.修改cpu/arm920t/start.S文件

2410的启动代码可以在外部的NANDFLASH上执行,启动时,NANDFLASH的前4KB(地址为0x00000000,OM[1:

0]=0)

将被装载到SDRAM中被称为Setppingstone的地址中,然后开始执行这段代码。

启动以后,这4KB的空间可以做其他用途,

在start.S加入搬运代码如下:

174行

...........

...........

copy_loop:

ldmiar0!

{r3-r10}/*copyfromsourceaddress[r0]*/

stmiar1!

{r3-r10}/*copytotargetaddress[r1]*/

cmpr0,r2/*untilsourceendaddreee[r2]*/

blecopy_loop

/*08-6-24********************************************************/

#ifdefCONFIG_S3C2410_NAND_BOOT/*这个一定要放在堆栈设置之前*/

blcopy_myself

#endif/*CONFIG_S3C2410_NAND_BOOT*/

/*08-6-24********************************************************/

#endif/*CONFIG_SKIP_RELOCATE_UBOOT*/

/*Setupthestack*/

stack_setup:

..................

/**************************************************************************

*

*copyu-boottoram放在start.S靠后的位置

*

*************************************************************************

*/

#ifdefCONFIG_S3C2410_NAND_BOOT

/*

@copy_myself:

copyu-boottoram

*/

copy_myself:

movr10,lr

@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

1:

addr3,r3,#0x1

cmpr3,#0xa

blt1b

2:

ldrr2,[r1,#oNFSTAT]@waitready

tstr2,#0x1

beq2b

ldrr2,[r1,#oNFCONF]

orrr2,r2,#0x800@disablechip

strr2,[r1,#oNFCONF]

@getreadtocallCfunctions

ldrsp,DW_STACK_START@setupstackpointer

movfp,#0@nopreviousframe,sofp=0

@copyUBOOTtoRAM

ldrr0,_TEXT_BASE

movr1,#0x0

movr2,#0x20000

blnand_read_ll

teqr0,#0x0

beqok_nand_read

bad_nand_read:

1:

b1b@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

beqdone_nand_read

bnego_next

notmatch:

1:

b1b

done_nand_read:

movpc,r10

#endif

@CONFIG_S3C2440_NAND_BOOT

DW_STACK_START:

.wordSTACK_BASE+STACK_SIZE-4

9.修改include/configs/tbwoody2410.h文件,添加如下内容:

/*08-6-25***************************************************/

/*-----------------------------------------------------------------------

*NANDFLASHBOOT

*/

#defineCONFIG_S3C2410_NAND_BOOT1

#defineSTACK_BASE0x33f00000

#defineSTACK_SIZE0x8000

#defineUBOOT_RAM_BASE0x30100000

#defineNAND_CTL_BASE0x4e000000

#definebINT_CTL(Nb)_REG(INT_CTL_BASE+(Nb))

#defineoNFCONF0x00

#defineoNFCMD0x04

#defineoNFADDR0x08

#defineoNFDATA0x0c

#defineoNFSTAT0x10

#defineoNFECC0x14

/*--------------------------------------------------------------------*/

#defineNAND_MAX_CHIPS1

10.修改board/tbwoody2410/Makefile

OBJS:

=tbwoody2410.oflash.onand_read.o

就是在后面加入了一个nand_read.o

11.重新测试

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2