ubootfs移植过程Word格式文档下载.docx
- 文档编号:21137281
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:16
- 大小:21.46KB
ubootfs移植过程Word格式文档下载.docx
《ubootfs移植过程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ubootfs移植过程Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
fs2410:
开发板的型号(BOARD),对应于board/fs2410目录。
NULL:
开发者/或经销商(vender),本例为空
s3c24x0:
片上系统(SOC)
(5)编译
#makefs2410_config;
#make
本步骤将编译u-boot.bin文件,但此时还无法运行在FS2410开发板上。
二、修改cpu/arm920t/start.S文件,完成U-Boot的重定向
(1)修改中断禁止部分
#ifdefined(CONFIG_S3C2410)
ldr
r1,=0x7ff
/*根据2410芯片手册,INTSUBMSK有11位可用*/
ldr
r0,=INTSUBMSK
str
r1,[r0]
#endif
(2)修改时钟设置(这个文件要根据具体的平台进行修改)
(3)将从NorFlash启动改成从NANDFlash启动
在文件中找到195-201代码,并在201行后面添加如下代码:
195copy_loop:
196ldmiar0!
{r3-r10}/*copyfromsourceaddress[r0]*/
197stmiar1!
{r3-r10}/*copytotargetaddress[r1]*/
198cmpr0,r2/*untilsourceendaddreee[r2]*/
199blecopy_loop
200#endif/*CONFIG_SKIP_RELOCATE_UBOOT*/
201#endif
#ifdefCONFIG_S3C2410_NAND_BOOT
@resetNAND
movr1,#NAND_CTL_BASE
ldrr2,=0xf830@initialvalue
strr2,[r1,#oNFCONF]
ldrr2,[r1,#oNFCONF]
bicr2,r2,#0x800@enablechip
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,#0x30000
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
(4)在“_start_armboot:
.wordstart_armboot
”后加入:
.align2
DW_STACK_START:
.wordSTACK_BASE+STACK_SIZE-4
三、创建board/fs2410/nand_read.c文件,加入读NANDFlash的操作。
#include<
config.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++);
}
/*lowlevelnandreadfunction*/
intnand_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;
for(i=start_addr;
i<
(start_addr+size);
){
/*READ0*/
NFCMD=0;
/*WriteAddress*/
NFADDR=i&
0xff;
NFADDR=(i>
>
9)&
17)&
25)&
wait_idle();
for(j=0;
j<
NAND_SECTOR_SIZE;
j++,i++){
*buf=(NFDATA&
0xff);
buf++;
}
/*chipDisable*/
NFCONF|=0x800;
/*chipdisable*/
return0;
#endif
四.同时修改board/fs2410/Makefile文件,增加nand_read文件
COBJS
:
=fs2410.o
nand_read.oflash.o
五、修改board/fs2410/fs2410.c文件,加入NANDFlash操作
(1)加入NandFlash的初始化函数
在文件的最后加入NandFlash的初始化函数,该函数在后面NandFlash的操作都要用到。
u-boot运行到第2阶段会进入start_armboot()函数。
其中nand_init()函数是对nandflash的最初初始化函数。
nand_init()函数在两个文件中实现。
其调用与CFG_NAND_LEGACY宏有关,如果没有定义这个宏,系统调用drivers/nand/nand.c中的nand_init();
否则调用自己在本文件中的nand_init()函数,本例使用后者。
fs2410.c代码如下:
#ifdefined(CONFIG_CMD_NAND)
typedefenum{
NFCE_LOW,
NFCE_HIGH
}NFCE_STATE;
staticinlinevoidNF_Conf(u16conf)
S3C2410_NAND*constnand=S3C2410_GetBase_NAND();
nand->
NFCONF=conf;
staticinlinevoidNF_Cmd(u8cmd)
NFCMD=cmd;
staticinlinevoidNF_CmdW(u8cmd)
NF_Cmd(cmd);
udelay
(1);
staticinlinevoidNF_Addr(u8addr)
NFADDR=addr;
staticinlinevoidNF_WaitRB(void)
while(!
(nand->
NFSTAT&
(1<
<
0)));
staticinlinevoidNF_Write(u8data)
NFDATA=data;
staticinlineu8NF_Read(void)
return(nand->
NFDATA);
staticinlineu32NF_Read_ECC(void)
NFECC);
staticinlinevoidNF_SetCE(NFCE_STATEs)
switch(s){
caseNFCE_LOW:
NFCONF&
=~(1<
11);
break;
caseNFCE_HIGH:
NFCONF|=(1<
staticinlinevoidNF_Init_ECC(void)
12);
externulongnand_probe(ulongphysadr);
staticinlinevoidNF_Reset(void)
NF_SetCE(NFCE_LOW);
NF_Cmd(0xFF);
/*resetcommand*/
for(i=0;
10;
/*tWB=100ns.*/
NF_WaitRB();
/*wait200~500us;
*/
NF_SetCE(NFCE_HIGH);
staticinlinevoidNF_Init(void)
#if0
#defineTACLS0
#defineTWRPH03
#defineTWRPH10
#else
#defineTWRPH04
#defineTWRPH12
#endif
#ifdefined(CONFIG_S3C2440)
NF_Conf((TACLS<
12)|(TWRPH0<
8)|(TWRPH1<
4));
NF_Cont((1<
6)|(1<
4)|(1<
1)|(1<
0));
NF_Conf((1<
15)|(0<
14)|(0<
13)|(1<
12)|(1<
11)|(TACLS<
8)|(TWRPH0<
4)|(TWRPH1<
/*nand->
NFCONF=(1<
15)|(1<
14)|(1<
0);
/*1111,1xxx,rxxx,rxxx*/
/*En512B4stepECCRnFCE=HtACLStWRPH0tWRPH1*/
NF_Reset();
voidnand_init(void)
NF_Init();
#ifdefDEBUG
printf("
NANDflashprobingat0x%.8lX\n"
(ulong)nand);
printf("
%4luMB\n"
nand_probe((ulong)nand)>
20);
(2)配置GPIO和PLL
根据开发板的硬件说明和芯片手册,修改GPIO和PLL的配置。
六、修改include/configs/fs2410.h头文件
(1)加入命令定义
/*
Commandlineconfiguration.
*/
config_cmd_default.h>
#defineCONFIG_CMD_ASKENV
#defineCONFIG_CMD_CACHE
#defineCONFIG_CMD_DATE
#defineCONFIG_CMD_DHCP
#defineCONFIG_CMD_ELF
#defineCONFIG_CMD_PING
#defineCONFIG_CMD_NAND
#defineCONFIG_CMD_REGINFO
#defineCONFIG_CMD_USB
#defineCONFIG_CMD_FAT
(2)修改命令提示符
#defineCFG_PROMPT"
SMDK2410#"
->
#defineCFG_PROMPT"
FS2410#"
(3)修改默认载入地址
#defineCFG_LOAD_ADDR0x33000000
#defineCFG_LOAD_ADDR0x30008000
(4)加入Flash环境信息
#defineCFG_ENV_IS_IN_NAND1
#defineCFG_ENV_OFFSET0X30000
#defineCFG_NAND_LEGACY
//#define
CFG_ENV_IS_IN_FLASH
1
#defineCFG_ENV_SIZE
0x10000
/*TotalSizeofEnvironmentSector*/
(5)加入NandFlash设置(在文件结尾处)
/*NANDflashsettings
#defineCFG_NAND_BASE0x4E000000/*NandFlash控制器在SFR区起始寄存器地址*/
#defineCFG_MAX_NAND_DEVICE1
/*支持的最在NandFlash数据*/
#defineSECTORSIZE512/*1页的大小*/
#defineNAND_SECTOR_SIZESECTORSIZE
#defineNAND_BLOCK_MASK511/*页掩码*/
#defineADDR_COLUMN1/*一个字节的Column地址*/
#defineADDR_PAGE3/*3字节的页块地址!
!
#defineADDR_COLUMN_PAGE4/*总共4字节的页块地址!
#defineNAND_ChipID_UNKNOWN0x00/*未知芯片的ID号*/
#defineNAND_MAX_FLOORS1
#defineNAND_MAX_CHIPS1
/*NandFlash命令层底层接口函数*/
#defineWRITE_NAND_ADDRESS(d,adr){rNFADDR=d;
#defineWRITE_NAND(d,adr){rNFDATA=d;
#defineREAD_NAND(adr)(rNFDATA)
#defineNAND_WAIT_READY(nand){while(!
(rNFSTAT&
(1<
#defineWRITE_NAND_COMMAND(d,adr){rNFCMD=d;
#defineWRITE_NAND_COMMANDW(d,adr)
NF_CmdW(d)
#defineNAND_DISABLE_CE(nand){rNFCONF|=(1<
#defineNAND_ENABLE_CE(nand){rNFCONF&
/*thefollowingfunctionsareNOP'
sbecauseS3C24X0handlesthisinhardware*/
#defineNAND_CTL_CLRALE(nandptr)
#defineNAND_CTL_SETALE(nandptr)
#defineNAND_CTL_CLRCLE(nandptr)
#defineNAND_CTL_SETCLE(nandptr)
/*允许NandFlash写校验*/
#defineCONFIG_MTD_NAND_VERIFY_WRITE1
(6)加入NandFlash启动支持(在文件结尾处)
/*NandflashBoot*/
#defineSTACK_BASE0x33f00000
#defineSTACK_SIZE0x8000
/*NANDFlashController*/
#defineNAND_CTL_BASE0x4E000000
#definebINT_CTL(Nb)__REG(INT_CTL_BASE+(Nb))
/*Offset*/
#defineoNFCONF0x00
#defineCONFIG_S3C2410_NAND_BOOT1
#defineoNFCMD0x04
#defineoNFADDR0x08
#defineoNFDATA0x0c
#defineoNFSTAT0x10
#defineoNFECC0x14
#definerNFCONF(*(volatileunsignedint*)0x4e000000)
#definerNFCMD(*(volatileunsignedchar*)0x4e000004)
#definerNFADDR(*(volatileunsignedchar*)0x4e000008)
#definerNFDATA(*(volatileunsignedchar*)0x4e00000c)
#definerNFSTAT(*(volatileunsignedint*)0x4e000010)
#definerNFECC(*(volatileunsignedint*)0x4e000014)
#definerNFECC0(*(volatileunsignedchar*)0x4e000014)
#definerNFECC1(*(volatileunsignedchar*)0x4e000015)
#definerNFECC2(*(volatileunsignedchar*)0x4e000016)
(7)加入jffs2的支持
/*JFFS2Support*/
#undefCONFIG_JFFS2_CMDLINE
#defineCONFIG_JFFS2_NAND1
#defineCONFIG_JFFS2_DEV"
nand0"
#defineCONFIG_JFFS2_PART_SIZE0x4c0000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ubootfs 移植 过程