神舟z7m清灰步骤:u-boot移植 (2011-11-21 21:26)
来源:百度文库 编辑:中财网 时间:2024/05/12 10:25:02
3.u-boot移植 (2011-11-21 21:26)标签: u-boot skyeye 分类: skyeyeu-boot移植
参考:
u-boot-1.1.4:
http://sourceforge.net/projects/u-boot
http://sourceforge.net/apps/trac/skyeye/wiki/u-boot
cross-2.95.3:
http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-2.95.3.tar.bz2
S3C2410A:
http://html.alldatasheet.com/html-pdf/84872/SAMSUNG/S3C2410A/247/1/S3C2410A.html
K9F1208U0B:
http://html.alldatasheet.com/html-pdf/94372/SAMSUNG/K9F1208U0B/249/1/K9F1208U0B.html
0. 环境
工具链:
解压cross-2.95.3.tar.bz2到目录/usr/local/arm.
skyeye.conf:
1 # skyeye config file for S3C2410X
2 arch: arm
3 cpu: arm920t
4 mach: s3c2410x
5
6 # physical memory
7 mem_bank: map=M, type=RW, addr=0x00000000, size=0x000200000, file=./u-boot.bin, boot=yes
8 mem_bank: map=M, type=RW, addr=0x30000000, size=0x04000000
9 #mem_bank: map=M, type=RW, addr=0x30000000, size=0x00200000
10 #mem_bank: map=M, type=RW, addr=0x30200000, size=0x03E00000, file=./vmlinux
11
12 # all peripherals I/O mapping area
13 mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
14
15 # net
16 mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
17 net: type=cs8900a, base=0x19000300, size=0x20, int=9, mac=08:00:3E:26:0A:5B, ethmod=tuntap, hostip=192.168.0.1
18
19 # nandflash
20 nandflash: type=s3c2410x, name=K9F1208U0B, dump=./nand.dump
21
22 # uart
23 uart: mod=term
24
25 # lcd
26 lcd: type=s3c2410x, mod=gtk
27
28 # Dynamic Binary Code Translation
29 #dbct: state=on
30
31 # address for loading elf file
32 #load_addr: base=0x30000000, mask=0xFFFFFF
33 # root file system
34 #load_file: filename=./initrd.img, initrd_start=0x30800000
1. NOR Flash 启动
进入u-boot目录:
# vim Makefile
添加,
24 CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
找到,
1508 smdk2410_config : unconfig
1509 @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
后面添加,
1511 fs2410_config : unconfig
1512 @./mkconfig $(@:_config=) arm arm920t fs2410 NULL s3c24x0
拷贝board相关文件:
# cp include/configs/smdk2410.h include/configs/fs2410.h
# cp -rf board/smdk2410 board/fs2410
# mv board/fs2410/smdk2410.c board/fs2410/fs2410.c
修改,
# vim board/fs2410/Makefile
28 OBJS := smdk2410.o flash.o
==>
28 OBJS := fs2410.o flash.o
# vim include/configs/fs2410.h
112 #define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
==>
112 #define CFG_PROMPT "FS2410 # " /* Monitor Command Prompt */
编译:
# make fs2410_config
# make
错误:
make[1]: *** No rule to make target `hello_world.srec', needed by `all'. Stop.
make[1]: Leaving directory `/home/zfy/u-boot-1.1.4/examples'
修改:
# vim examples/Makefile
126 %.srec: %
127 $(OBJCOPY) -O srec $< $@ 2>/dev/null
128
129 %.bin: %
130 $(OBJCOPY) -O binary $< $@ 2>/dev/null
==>
126 %.srec: %.o
127 $(OBJCOPY) -O srec $< $@ 2>/dev/null
128
129 %.bin: %.o
130 $(OBJCOPY) -O binary $< $@ 2>/dev/null
# make
安装tftpd:
# apt-get install tftpd
# mkdir /srv/tftp
添加ping命令:
# vim include/configs/fs2410.h
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF)
==>
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
修改网络设置:
#vim include/configs/fs2410.h
96 #define CONFIG_NETMASK 255.255.255.0
97 #define CONFIG_IPADDR 10.0.0.110
98 #define CONFIG_SERVERIP 10.0.0.1
==>
96 #define CONFIG_NETMASK 255.255.255.0
97 #define CONFIG_IPADDR 192.168.0.110
98 #define CONFIG_SERVERIP 192.168.0.1
编译:
# make
测试:
# mknandflashdump u-boot.bin nand.dump 0
# skyeye
(skyeye) start
(skyeye) run
2. Nand Flash 支持
添加CFG_CMD_NAND命令:
# vim include/configs/fs2410.h
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
==>
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 CFG_CMD_NAND | \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
编译:
# make
错误:
cmd_nand.c: In function `do_nand':
cmd_nand.c:117: `CFG_MAX_NAND_DEVICE' undeclared (first use in this function)
cmd_nand.c:117: (Each undeclared identifier is reported only once
cmd_nand.c:117: for each function it appears in.)
cmd_nand.c:118: `NAND_ChipID_UNKNOWN' undeclared (first use in this function)
cmd_nand.c: In function `do_nandboot':
cmd_nand.c:332: `CFG_MAX_NAND_DEVICE' undeclared (first use in this function)
cmd_nand.c:333: `NAND_ChipID_UNKNOWN' undeclared (first use in this function)
cmd_nand.c:344: `SECTORSIZE' undeclared (first use in this function)
... ...
... ...
make[1]: *** [cmd_nand.o] Error 1
make[1]: Leaving directory `/home/zfy/u-boot-1.1.4/common'
make: *** [common/libcommon.a] Error 2
添加board/fs2410/fsnand.h:
1 #ifndef _FSNAND_H_
2 #define _FSNAND_H_
3
4 #define CFG_MAX_NAND_DEVICE 1
5 #define SECTORSIZE 512
6 #define ADDR_COLUMN 1
7 #define ADDR_PAGE 2
8 #define ADDR_COLUMN_PAGE 3
9 #define NAND_ChipID_UNKNOWN 0x00
10 #define NAND_MAX_FLOORS 1
11 #define NAND_MAX_CHIPS 1
12
13 #define rNFCONF (*(volatile unsigned *)0x4E000000)
14 #define rNFCMD (*(volatile unsigned *)0x4E000004)
15 #define rNFADDR (*(volatile unsigned *)0x4E000008)
16 #define rNFDATA (*(volatile unsigned *)0x4E00000C)
17 #define rNFSTAT (*(volatile unsigned *)0x4E000010)
18 #define rNFECC (*(volatile unsigned *)0x4E000014)
19
20 #define NAND_WAIT_READY(nand) {while(!(rNFSTAT&(1<<0)));}
21 #define WRITE_NAND_COMMAND(d, adr) (rNFCMD = (d))
22 #define WRITE_NAND_ADDRESS(d, adr) (rNFADDR = (d))
23 #define WRITE_NAND(d, adr) (rNFDATA = (d))
24 #define READ_NAND(adr) (rNFDATA)
25 #define NAND_DISABLE_CE(nand) (rNFCONF |= 0x800)
26 #define NAND_ENABLE_CE(nand) (rNFCONF &= ~0x800)
27 #define NAND_CTL_CLRALE(nandptr)
28 #define NAND_CTL_SETALE(nandptr)
29 #define NAND_CTL_CLRCLE(nandptr)
30 #define NAND_CTL_SETCLE(nandptr)
31
32 #endif
修改board/fs2410/fs2410.c,添加:
29 #include
30 #include "fsnand.h"
128 extern unsigned long nand_probe(unsigned long physadr);
129 void nand_init(void)
130 {
131 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
132 rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7<<0);
133 printf("%4lu MB\n", nand_probe((ulong)nand) >> 20);
134 }
修改common/cmd_nand.c,添加:
15 #include
16 #include "../board/fs2410/fsnand.h"
参考:http://forum.linuxfans.org/thread-182694-1-1.html?tid=182694&extra=page%3D1&page=1
注释:
# vim common/cmd_nand.c
813 // NanD_Command (nand, NAND_CMD_READ0);
编译:
# make
测试:
3. NAND Flash 启动
修改cpu/arm920t/start.S:
163 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
164 relocate: /* relocate U-Boot to RAM */
165 adr r0, _start /* r0 <- current position of code */
166 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
167 cmp r0, r1 /* don't reloc during debug */
168 beq stack_setup
169
170 ldr r2, _armboot_start
171 ldr r3, _bss_start
172 sub r2, r3, r2 /* r2 <- size of armboot */
173 add r2, r0, r2 /* r2 <- source end address */
174
175 copy_loop:
176 ldmia r0!, {r3-r10} /* copy from source address [r0] */
177 stmia r1!, {r3-r10} /* copy to target address [r1] */
178 cmp r0, r2 /* until source end addreee [r2] */
179 ble copy_loop
180 #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
==>
163 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
164 #if 0
165 relocate: /* relocate U-Boot to RAM */
166 adr r0, _start /* r0 <- current position of code */
167 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
168 cmp r0, r1 /* don't reloc during debug */
169 beq stack_setup
170
171 ldr r2, _armboot_start
172 ldr r3, _bss_start
173 sub r2, r3, r2 /* r2 <- size of armboot */
174 add r2, r0, r2 /* r2 <- source end address */
175
176 copy_loop:
177 ldmia r0!, {r3-r10} /* copy from source address [r0] */
178 stmia r1!, {r3-r10} /* copy to target address [r1] */
179 cmp r0, r2 /* until source end addreee [r2] */
180 ble copy_loop
181 #else
182 relocate:
183 ldr sp, =0x33f08000 /* setup stack pointer */
184 mov fp, #0 /* no previous frame, so fp=0 */
185 bl nand_relocate
186 #endif
187 #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
修改board/fs2410/fs2410.c,增加:
135
136 void read_page(unsigned int addr, unsigned char* buf)
137 {
138 unsigned int i;
139
140 NAND_ENABLE_CE(0);
141
142 WRITE_NAND_COMMAND(0, 0);
143 WRITE_NAND_ADDRESS(0, 0);
144 WRITE_NAND_ADDRESS((addr>>9)&0xff, 0);
145 WRITE_NAND_ADDRESS((addr>>17)&0xff, 0);
146 WRITE_NAND_ADDRESS((addr>>25)&0xff, 0);
147
148 for (i = 0; i < 10; i ++); //wait tWB(100ns)
149 NAND_WAIT_READY(0);
150
151 for (i = 0; i < 512; i ++)
152 buf[i] = READ_NAND(0);
153 }
154
155 void nand_relocate(void)
156 {
157 unsigned int nfconf;
158 unsigned int nfsrc = 0;
159 unsigned char* memdest = (unsigned char*)0x33F80000;
160 unsigned int i;
161
162 nfconf = rNFCONF;
163 rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7<<0);
164
165 for (i = 0; i < 256; i ++) {
166 read_page(nfsrc, memdest);
167 nfsrc += 512;
168 memdest += 512;
169 }
170
171 rNFCONF = nfconf;
172 }
编译:
# make
测试:
# mknandflashdump u-boot.bin nand.dump 0
# skyeye
(skyeye) start
(skyeye) run
参考:
u-boot-1.1.4:
http://sourceforge.net/projects/u-boot
http://sourceforge.net/apps/trac/skyeye/wiki/u-boot
cross-2.95.3:
http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-2.95.3.tar.bz2
S3C2410A:
http://html.alldatasheet.com/html-pdf/84872/SAMSUNG/S3C2410A/247/1/S3C2410A.html
K9F1208U0B:
http://html.alldatasheet.com/html-pdf/94372/SAMSUNG/K9F1208U0B/249/1/K9F1208U0B.html
0. 环境
工具链:
解压cross-2.95.3.tar.bz2到目录/usr/local/arm.
skyeye.conf:
1 # skyeye config file for S3C2410X
2 arch: arm
3 cpu: arm920t
4 mach: s3c2410x
5
6 # physical memory
7 mem_bank: map=M, type=RW, addr=0x00000000, size=0x000200000, file=./u-boot.bin, boot=yes
8 mem_bank: map=M, type=RW, addr=0x30000000, size=0x04000000
9 #mem_bank: map=M, type=RW, addr=0x30000000, size=0x00200000
10 #mem_bank: map=M, type=RW, addr=0x30200000, size=0x03E00000, file=./vmlinux
11
12 # all peripherals I/O mapping area
13 mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
14
15 # net
16 mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
17 net: type=cs8900a, base=0x19000300, size=0x20, int=9, mac=08:00:3E:26:0A:5B, ethmod=tuntap, hostip=192.168.0.1
18
19 # nandflash
20 nandflash: type=s3c2410x, name=K9F1208U0B, dump=./nand.dump
21
22 # uart
23 uart: mod=term
24
25 # lcd
26 lcd: type=s3c2410x, mod=gtk
27
28 # Dynamic Binary Code Translation
29 #dbct: state=on
30
31 # address for loading elf file
32 #load_addr: base=0x30000000, mask=0xFFFFFF
33 # root file system
34 #load_file: filename=./initrd.img, initrd_start=0x30800000
1. NOR Flash 启动
进入u-boot目录:
# vim Makefile
添加,
24 CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
找到,
1508 smdk2410_config : unconfig
1509 @./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
后面添加,
1511 fs2410_config : unconfig
1512 @./mkconfig $(@:_config=) arm arm920t fs2410 NULL s3c24x0
拷贝board相关文件:
# cp include/configs/smdk2410.h include/configs/fs2410.h
# cp -rf board/smdk2410 board/fs2410
# mv board/fs2410/smdk2410.c board/fs2410/fs2410.c
修改,
# vim board/fs2410/Makefile
28 OBJS := smdk2410.o flash.o
==>
28 OBJS := fs2410.o flash.o
# vim include/configs/fs2410.h
112 #define CFG_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
==>
112 #define CFG_PROMPT "FS2410 # " /* Monitor Command Prompt */
编译:
# make fs2410_config
# make
错误:
make[1]: *** No rule to make target `hello_world.srec', needed by `all'. Stop.
make[1]: Leaving directory `/home/zfy/u-boot-1.1.4/examples'
修改:
# vim examples/Makefile
126 %.srec: %
127 $(OBJCOPY) -O srec $< $@ 2>/dev/null
128
129 %.bin: %
130 $(OBJCOPY) -O binary $< $@ 2>/dev/null
==>
126 %.srec: %.o
127 $(OBJCOPY) -O srec $< $@ 2>/dev/null
128
129 %.bin: %.o
130 $(OBJCOPY) -O binary $< $@ 2>/dev/null
# make
安装tftpd:
# apt-get install tftpd
# mkdir /srv/tftp
添加ping命令:
# vim include/configs/fs2410.h
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF)
==>
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
修改网络设置:
#vim include/configs/fs2410.h
96 #define CONFIG_NETMASK 255.255.255.0
97 #define CONFIG_IPADDR 10.0.0.110
98 #define CONFIG_SERVERIP 10.0.0.1
==>
96 #define CONFIG_NETMASK 255.255.255.0
97 #define CONFIG_IPADDR 192.168.0.110
98 #define CONFIG_SERVERIP 192.168.0.1
编译:
# make
测试:
# mknandflashdump u-boot.bin nand.dump 0
# skyeye
(skyeye) start
(skyeye) run
2. Nand Flash 支持
添加CFG_CMD_NAND命令:
# vim include/configs/fs2410.h
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 /*CFG_CMD_NAND |*/ \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
==>
78 #define CONFIG_COMMANDS \
79 (CONFIG_CMD_DFL | \
80 CFG_CMD_CACHE | \
81 CFG_CMD_NAND | \
82 /*CFG_CMD_EEPROM |*/ \
83 /*CFG_CMD_I2C |*/ \
84 /*CFG_CMD_USB |*/ \
85 CFG_CMD_REGINFO | \
86 CFG_CMD_DATE | \
87 CFG_CMD_ELF | \
88 CFG_CMD_PING)
编译:
# make
错误:
cmd_nand.c: In function `do_nand':
cmd_nand.c:117: `CFG_MAX_NAND_DEVICE' undeclared (first use in this function)
cmd_nand.c:117: (Each undeclared identifier is reported only once
cmd_nand.c:117: for each function it appears in.)
cmd_nand.c:118: `NAND_ChipID_UNKNOWN' undeclared (first use in this function)
cmd_nand.c: In function `do_nandboot':
cmd_nand.c:332: `CFG_MAX_NAND_DEVICE' undeclared (first use in this function)
cmd_nand.c:333: `NAND_ChipID_UNKNOWN' undeclared (first use in this function)
cmd_nand.c:344: `SECTORSIZE' undeclared (first use in this function)
... ...
... ...
make[1]: *** [cmd_nand.o] Error 1
make[1]: Leaving directory `/home/zfy/u-boot-1.1.4/common'
make: *** [common/libcommon.a] Error 2
添加board/fs2410/fsnand.h:
1 #ifndef _FSNAND_H_
2 #define _FSNAND_H_
3
4 #define CFG_MAX_NAND_DEVICE 1
5 #define SECTORSIZE 512
6 #define ADDR_COLUMN 1
7 #define ADDR_PAGE 2
8 #define ADDR_COLUMN_PAGE 3
9 #define NAND_ChipID_UNKNOWN 0x00
10 #define NAND_MAX_FLOORS 1
11 #define NAND_MAX_CHIPS 1
12
13 #define rNFCONF (*(volatile unsigned *)0x4E000000)
14 #define rNFCMD (*(volatile unsigned *)0x4E000004)
15 #define rNFADDR (*(volatile unsigned *)0x4E000008)
16 #define rNFDATA (*(volatile unsigned *)0x4E00000C)
17 #define rNFSTAT (*(volatile unsigned *)0x4E000010)
18 #define rNFECC (*(volatile unsigned *)0x4E000014)
19
20 #define NAND_WAIT_READY(nand) {while(!(rNFSTAT&(1<<0)));}
21 #define WRITE_NAND_COMMAND(d, adr) (rNFCMD = (d))
22 #define WRITE_NAND_ADDRESS(d, adr) (rNFADDR = (d))
23 #define WRITE_NAND(d, adr) (rNFDATA = (d))
24 #define READ_NAND(adr) (rNFDATA)
25 #define NAND_DISABLE_CE(nand) (rNFCONF |= 0x800)
26 #define NAND_ENABLE_CE(nand) (rNFCONF &= ~0x800)
27 #define NAND_CTL_CLRALE(nandptr)
28 #define NAND_CTL_SETALE(nandptr)
29 #define NAND_CTL_CLRCLE(nandptr)
30 #define NAND_CTL_SETCLE(nandptr)
31
32 #endif
修改board/fs2410/fs2410.c,添加:
29 #include
30 #include "fsnand.h"
128 extern unsigned long nand_probe(unsigned long physadr);
129 void nand_init(void)
130 {
131 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
132 rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7<<0);
133 printf("%4lu MB\n", nand_probe((ulong)nand) >> 20);
134 }
修改common/cmd_nand.c,添加:
15 #include
16 #include "../board/fs2410/fsnand.h"
参考:http://forum.linuxfans.org/thread-182694-1-1.html?tid=182694&extra=page%3D1&page=1
注释:
# vim common/cmd_nand.c
813 // NanD_Command (nand, NAND_CMD_READ0);
编译:
# make
测试:
3. NAND Flash 启动
修改cpu/arm920t/start.S:
163 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
164 relocate: /* relocate U-Boot to RAM */
165 adr r0, _start /* r0 <- current position of code */
166 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
167 cmp r0, r1 /* don't reloc during debug */
168 beq stack_setup
169
170 ldr r2, _armboot_start
171 ldr r3, _bss_start
172 sub r2, r3, r2 /* r2 <- size of armboot */
173 add r2, r0, r2 /* r2 <- source end address */
174
175 copy_loop:
176 ldmia r0!, {r3-r10} /* copy from source address [r0] */
177 stmia r1!, {r3-r10} /* copy to target address [r1] */
178 cmp r0, r2 /* until source end addreee [r2] */
179 ble copy_loop
180 #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
==>
163 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
164 #if 0
165 relocate: /* relocate U-Boot to RAM */
166 adr r0, _start /* r0 <- current position of code */
167 ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
168 cmp r0, r1 /* don't reloc during debug */
169 beq stack_setup
170
171 ldr r2, _armboot_start
172 ldr r3, _bss_start
173 sub r2, r3, r2 /* r2 <- size of armboot */
174 add r2, r0, r2 /* r2 <- source end address */
175
176 copy_loop:
177 ldmia r0!, {r3-r10} /* copy from source address [r0] */
178 stmia r1!, {r3-r10} /* copy to target address [r1] */
179 cmp r0, r2 /* until source end addreee [r2] */
180 ble copy_loop
181 #else
182 relocate:
183 ldr sp, =0x33f08000 /* setup stack pointer */
184 mov fp, #0 /* no previous frame, so fp=0 */
185 bl nand_relocate
186 #endif
187 #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
修改board/fs2410/fs2410.c,增加:
135
136 void read_page(unsigned int addr, unsigned char* buf)
137 {
138 unsigned int i;
139
140 NAND_ENABLE_CE(0);
141
142 WRITE_NAND_COMMAND(0, 0);
143 WRITE_NAND_ADDRESS(0, 0);
144 WRITE_NAND_ADDRESS((addr>>9)&0xff, 0);
145 WRITE_NAND_ADDRESS((addr>>17)&0xff, 0);
146 WRITE_NAND_ADDRESS((addr>>25)&0xff, 0);
147
148 for (i = 0; i < 10; i ++); //wait tWB(100ns)
149 NAND_WAIT_READY(0);
150
151 for (i = 0; i < 512; i ++)
152 buf[i] = READ_NAND(0);
153 }
154
155 void nand_relocate(void)
156 {
157 unsigned int nfconf;
158 unsigned int nfsrc = 0;
159 unsigned char* memdest = (unsigned char*)0x33F80000;
160 unsigned int i;
161
162 nfconf = rNFCONF;
163 rNFCONF = (1<<15)|(1<<12)|(1<<11)|(7<<8)|(7<<4)|(7<<0);
164
165 for (i = 0; i < 256; i ++) {
166 read_page(nfsrc, memdest);
167 nfsrc += 512;
168 memdest += 512;
169 }
170
171 rNFCONF = nfconf;
172 }
编译:
# make
测试:
# mknandflashdump u-boot.bin nand.dump 0
# skyeye
(skyeye) start
(skyeye) run