成功移植uboot116到edukitIII.docx

上传人:b****6 文档编号:8178107 上传时间:2023-01-29 格式:DOCX 页数:16 大小:22.01KB
下载 相关 举报
成功移植uboot116到edukitIII.docx_第1页
第1页 / 共16页
成功移植uboot116到edukitIII.docx_第2页
第2页 / 共16页
成功移植uboot116到edukitIII.docx_第3页
第3页 / 共16页
成功移植uboot116到edukitIII.docx_第4页
第4页 / 共16页
成功移植uboot116到edukitIII.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

成功移植uboot116到edukitIII.docx

《成功移植uboot116到edukitIII.docx》由会员分享,可在线阅读,更多相关《成功移植uboot116到edukitIII.docx(16页珍藏版)》请在冰豆网上搜索。

成功移植uboot116到edukitIII.docx

成功移植uboot116到edukitIII

待修改,由于时间关系还没整理完善,先把主要步骤列出:

有关于Retrycountexceeded;startingagain错误即将描述

一、先实现可从nandflash启动

1.在u-boot-1.2.0/Makefile中

diff-urN

u-boot-1.2.0.orig/Makefileu-boot-1.2.0/Makefile

---

u-boot-1.2.0.orig/Makefile2007-01-07

07:

13:

11.000000000+0800

+++

u-boot-1.2.0/Makefile2007-09-19

12:

09:

20.000000000+0800

@@-125,7

+125,7@@

CROSS_COMPILE=powerpc-linux-

endif

ifeq($(ARCH),arm)

-CROSS_COMPILE=arm-linux-

+CROSS_COMPILE=

/usr/local/arm/arm-2007q1/bin/arm-none-linux-gnueabi-

endif

这是需要修改的第一段代码

其实就是把/u-boot-1.2.0/Makefile

程序第125行改了,其实就是设定交叉编译器,这段代码是很好的学习材料

这就是一个补丁的制作过程

diff:

以u-boot-1.2.0/Makefile为目标文件,以u-boot-1.2.0.orig/Makefile为源文件

2.在u-boot-1.2.0/board/smdk2410/中

Makefile

diff-urNu-boot-1.2.0.orig/board/smdk2410/Makefile

u-boot-1.2.0/board/smdk2410/Makefile

---

u-boot-1.2.0.orig/board/smdk2410/Makefile2007-01-07

07:

13:

11.000000000+0800

+++

u-boot-1.2.0/board/smdk2410/Makefile2007-09-19

12:

22:

24.000000000+0800

@@-25,7+25,7@@

LIB=$(obj)lib$(BOARD).a

-COBJS:

=smdk2410.oflash.o

+COBJS:

=smdk2410.oflash.o

nand_read.o

SOBJS:

=

lowlevel_init.o

SRCS:

=$(SOBJS:

.o=.S)

$(COBJS:

.o=.c)

lowlevel_init.S

diff-urN

u-boot-1.2.0.orig/board/smdk2410/lowlevel_init.S

u-boot-1.2.0/board/smdk2410/lowlevel_init.S

---

u-boot-1.2.0.orig/board/smdk2410/lowlevel_init.S2007-01-07

07:

13:

11.000000000+0800

+++

u-boot-1.2.0/board/smdk2410/lowlevel_init.S2007-09-19

12:

22:

08.000000000+0800

@@-123,7+123,7@@

#defineTrp  

0x0

#defineTrc  

0x3

#defineTchr  

0x2

-#defineREFCNT  

1113

+#define

REFCNT  

1268

_TEXT_BASE:

新建文件nand_read.c

diff-urN

u-boot-1.2.0.orig/board/smdk2410/nand_read.c

u-boot-1.2.0/board/smdk2410/nand_read.c

---

u-boot-1.2.0.orig/board/smdk2410/nand_read.c1970-01-01

08:

00:

00.000000000+0800

+++

u-boot-1.2.0/board/smdk2410/nand_read.c2007-09-19

12:

24:

13.000000000+0800

@@-0,0+1,77@@

+

+

+#include

+

+#ifdefCONFIG_S3C2410_NAND_BOOT

+

+#define__REGb(x)(*(volatileunsignedchar

*)(x))

+#define__REGi(x)(*(volatileunsignedint

*)(x))

+#define

NF_BASE  0x4e000000

+#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){

+  int

i;

+

+  

while(!

(NFSTAT&BUSY))

+    

for(i=0;i512

+#define

NAND_BLOCK_MASK  (NAND_SECTOR_SIZE

-1)

+

+

+int

+nand_read_ll(unsignedchar*buf,unsignedlongstart_addr,int

size)

+{

+  inti,

j;

+

+  if

((start_addr&NAND_BLOCK_MASK)||(size

&NAND_BLOCK_MASK)){

+    

return-1;

+  }

+

+  

+  NFCONF

&=~0x800;

+  for(i=0;

i  

for(i=start_addr;i    

+    

NFCMD=0;

+

+    

+    

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++;

+    

}

+  }

+

+  

+  NFCONF|=

0x800;

+

+  return

0;

+}

+

+#endif

smdk2410.c

diff-urNu-boot-1.2.0.orig/board/smdk2410/smdk2410.c

u-boot-1.2.0/board/smdk2410/smdk2410.c

---

u-boot-1.2.0.orig/board/smdk2410/smdk2410.c2007-01-07

07:

13:

11.000000000+0800

+++

u-boot-1.2.0/board/smdk2410/smdk2410.c2007-09-19

12:

21:

39.000000000+0800

@@-36,10+36,10@@

#defineM_MDIV0xC3

#defineM_PDIV0x4

#defineM_SDIV0x1

-#elifFCLK_SPEED==1  

-#defineM_MDIV0xA1

-#defineM_PDIV0x3

-#defineM_SDIV0x1

+#elif

FCLK_SPEED==1  

+#defineM_MDIV0x5C

+#defineM_PDIV0x4

+#define

M_SDIV0x0

#endif

#defineUSB_CLOCK1

@@-87,7+87,7@@

  

  gpio->GPACON=

0x007FFFFF;

-gpio->GPBCON=0x00044555;

+gpio->GPBCON=

0x000055A;

  gpio->GPBUP

=0x000007FF;

  gpio->GPCCON=

0xAAAAAAAA;

  gpio->GPCUP=

0x0000FFFF;

@@-99,7+99,7@@

  gpio->GPFUP=

0x000000FF;

  gpio->GPGCON=

0xFF95FFBA;

  gpio->GPGUP=

0x0000FFFF;

-gpio->GPHCON=0x002AFAAA;

+gpio->GPHCON=

0x0016FAAA;

  gpio->GPHUP

=0x000007FF;

  

3.在u-boot-1.2.0/cpu/arm920t中

start.S(第一层汇编程序入口)

diff-urNu-boot-1.2.0.orig/cpu/arm920t/start.S

u-boot-1.2.0/cpu/arm920t/start.S

---

u-boot-1.2.0.orig/cpu/arm920t/start.S2007-01-07

07:

13:

11.000000000+0800

+++u-boot-1.2.0/cpu/arm920t/start.S2007-09-19

12:

37:

00.000000000+0800

@@-27,7+27,7@@

#include

#include

-

+#include

  ldrr0,

=INTSUBMSK

  strr1,

[r0]

#endif

@@-161,6+161,7@@

#endif

#ifndefCONFIG_SKIP_RELOCATE_UBOOT

+#ifndef

CONFIG_S3C2410_NAND_BOOT

relocate:

  

  adrr0,

_start  

  ldrr1,

_TEXT_BASE  

@@-177,8+178,67@@

  stmiar1!

{r3-r10}  

  cmpr0,

r2  

  blecopy_loop

+#else

+relocate:

+copy_myself:

+@resetNAND

+movr1,

#S3C2410_NAND_BASE

+ldrr2,

=0xf830  @initialvalue

enable

+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]

+

+

+ldrr0,

_TEXT_BASE  

+subr0,r0,

#CFG_MALLOC_LEN  

+subr0,r0,

#CFG_GBL_DATA_SIZE

+#ifdefCONFIG_USE_IRQ

+subr0,r0,

#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

+#endif

+subsp,r0,

#12  

+

+@copyu-boottoRAM

+ldrr0,_TEXT_BASE

+mov  

r1,#0x0

+movr2,#CFG_UBOOT_SIZE

+blnand_read_ll

+

+tstr0,#0x0

+beqok_nand_read

+

+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:

+#endif

#endif

+#ifndef

CONFIG_S3C2410_NAND_BOOT

  

stack_setup:

  ldrr0,

_TEXT_BASE  

@@-188,6+248,7@@

  subr0,r0,

#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)

#endif

  subsp,r0,

#12  

+#endif

clear_bss:

  ldrr0,

_bss_start  

4.在u-boot-1.2.0/include/Configs/smdk2410.h中

diff-urNu-boot-1.2.0.orig/include/configs/smdk2410.h

u-boot-1.2.0/include/configs/smdk2410.h

---

u-boot-1.2.0.orig/include/configs/smdk2410.h2007-01-07

07:

13:

11.000000000+0800

+++

u-boot-1.2.0/include/configs/smdk2410.h2007-09-19

12:

42:

45.000000000+0800

@@-82,6+82,8@@

  

\

  

\

  

\

+  CFG_CMD_NET

|\

+  CFG_CMD_PING

|

\

  CFG_CMD_REGINFO

|\

  CFG_CMD_DATE

|\

  CFG_CMD_ELF)

@@-91,10+93,10@@

#defineCONFIG_BOOTDELAY3

-

+#define

CONFIG_ETHADDR  08:

00:

3e:

26:

0a:

5b

#define

CONFIG_NETMASK      

255.255.255.0

-#define

CONFIG_IPADDR  10.0.0.110

-#define

CONFIG_SERVERIP  10.0.0.1

+#define

CONFIG_IPADDR  192.168.1.110

+#define

CONFIG_SERVERIP  192.168.1.216

@@-108,7+110,7@@

  *Miscellaneousconfigurableoptions

  */

#defineCFG_LONGHELP  

-#defineCFG_PROMPT  "SMDK2410

#"

+#defineCFG_PROMPT  "U-boot

#

"

#defineCFG_CBSIZE  256  

#defineCFG_PBSIZE

(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)

#defineCFG_MAXARGS  16  

@@-178,4+180,8@@

#defineCFG_ENV_IS_IN_FLASH1

#define

CFG_ENV_SIZE  0x10000

+

+#defineCONFIG_S3C2410_NAND_BOOT

+#define

CFG_UBOOT_SIZE  0x20000

+

#endif

5.在u-boot-1.2.0/include/s3c2410.h

diff-urNu-boot-1.2.0.orig/include/s3c2410.h

u-boot-1.2.0/include/s3c2410.h

---u-boot-1.2.0.orig/include/s3c2410.h2007-01-07

07:

13:

11.000000000+0800

+++u-boot-1.2.0/include/s3c2410.h2007-09-19

12:

38:

31.000000000+0800

@@-38,12+38,6@@

#define

S3C2410_ECCSIZE  512

#defineS3C2410_ECCBYTES3

-typedefenum{

-S3C24X0_UART0,

-S3C24X0_UART1,

-S3C24X0_UART2

-}S3C24X0_UARTS_NR;

-

#define

S3C24X0_MEMCTL_BASE  0x48000000

#define

S3C24X0_USB_HOST_BASE  0x49000000

@@-64,10+58,23@@

#define

S3C24X0_SPI_BASE  0x59000000

#define

S3C2410_SDI_BASE  0x5A000000

+#define

oNFCONF  0x00

+#define

oNFCMD  0x04

+#define

oNFADDR  0x08

+#define

oNFDATA  0x0C

+#define

oNFSTAT  0x10

+#define

oNFECC  0x14

+

+#ifndef__ASSEMBLER__

#include

+typedefenum{

+S3C24X0_UART0,

+S3C24X0_UART1,

+S3C24X0_UART2

+}S3C24X0_UARTS_NR;

staticinlineS3C24X0_MEMCTL*const

S3C24X0_GetBase_MEMCTL(void)

{

@@-224,4+231,7@@

  

rINTPND;\

  }

+

+#endif

+

#endif

二、再实现支持nandflash读写的部分(可以去掉2440的部分):

U-Boot1.1.6中对NAND

Flash的支持有新旧两套代码,新代码在drivers/nand目录下,旧代码在drivers/nand_legacy目录下。

文档

doc/README.nand对这两套代码有所说明:

使用旧代码需要定义更多的宏,而新代码移植自Linux内核2.6.12,它更加智能,可以自动识

别更多型号的NAND

Flash。

目前之所以还保留旧的代码,是因为两个目标板NETTA、NETTA_ISDN使用JFFS文件系统,它们还依赖于旧代码。

当相关功能移植到

新代码之后,旧的代码将从U-Boot中去除。

要让U-Boot支持NANDFlash,首先在配置文件include/configs/100ask24x0.h的宏CONFIG_COMMANDS中增加CFG_CMD_NAND,如下:

#defineCONFIG_COMMANDS\

(CONFIG_CMD_DFL|\

CFG_CMD_CACHE|\

CFG_CMD_PING|\

CFG_CMD_NAND|\

……

然后选择使用哪套代码:

在配置文件中定义宏CFG_NAND_LEGACY则使用旧代码,否则使用新代码。

使用旧代码时,需要实现drivers/nand_legacy/nand_legacy.c中使用到的各种宏,比如:

#defineNAND_WAIT_READY(nand)/*等待NandFlash的状态为“就绪”,代码依赖于具体的开发板*/

#defineWRITE_NAND_COMMAND(d,adr)/*写NANDFlash命令,代码依赖于具体的开发板*/

本书使用新代码,下面讲述移植过程。

代码的移植没有现成的文档,可以在配置文件include/configs/100ask24x0.h的宏CONFIG_COMMANDS中增加CFG_CMD_NAND后,就编译代码,然后一个一个地解决出现的错误。

编译结果中出现的错误和警告如下:

nand.h:

412:

error:

`NAND_MAX_CHIPS'undeclaredhere(notinafunction)

nand.c:

35:

error:

`CFG_MAX_NAND_DEVICE'undeclaredhere(notinafunction)

nand.c:

38:

error:

`CFG_NAND_BASE'undeclaredhere(notinafunction)

nand.c:

35:

error:

storagesizeof`nand_info'isn'tknown

nand.c:

37:

error:

storagesizeof`nand_chip'isn'tknown

nand.c:

38:

error:

storagesizeof`base_address'isn'tknown

nand.c:

37:

warning:

'nand_chip'definedbutnotused

nand.c:

38:

warning:

'base_address'definedbutnotused

在配置文件include/

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

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1