⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmp

📁 LINUX NANDFLASH读写函数.实现UBOOTNANDFLSH 启动.并且可以烧写内河.文件系统
💻
📖 第 1 页 / 共 2 页
字号:
diff -urN u-boot-1.2.0.orig/Makefile u-boot-1.2.0/Makefile--- u-boot-1.2.0.orig/Makefile	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/Makefile	2007-09-19 12:56:04.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 ifeq ($(ARCH),i386) ifeq ($(HOSTARCH),i386)@@ -2350,3 +2350,10 @@ 	gtar --force-local -zcvf `date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F  #########################################################################++#+# make {your board}+#++%: distclean %_config+	$(MAKE) && echo "^_^ Succeed!"diff -urN u-boot-1.2.0.orig/board/smdk2410/Makefile u-boot-1.2.0/board/smdk2410/Makefile--- u-boot-1.2.0.orig/board/smdk2410/Makefile	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/board/smdk2410/Makefile	2007-09-19 13:48:33.000000000 +0800@@ -25,7 +25,7 @@  LIB	= $(obj)lib$(BOARD).a -COBJS	:= smdk2410.o flash.o+COBJS	:= smdk2410.o nand_read.o SOBJS	:= lowlevel_init.o  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)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.S	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/board/smdk2410/lowlevel_init.S	2007-09-19 12:22:08.000000000 +0800@@ -123,7 +123,7 @@ #define Trp		 	0x0	/* 2clk */ #define Trc		 	0x3	/* 7clk */ #define Tchr		 	0x2	/* 3clk */-#define REFCNT		 	1113	/* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */+#define REFCNT		 	1268	/* period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100) */ /**************************************/  _TEXT_BASE: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.c	1970-01-01 08:00:00.000000000 +0800+++ u-boot-1.2.0/board/smdk2410/nand_read.c	2007-09-19 12:24:13.000000000 +0800@@ -0,0 +1,77 @@+/* + * vivi/s3c2410/nand_read.c: Simple NAND read functions for booting from NAND+ *+ * This is used by cpu/arm920/start.S assembler code,+ * and the board-specific linker script must make sure this+ * file is linked within the first 4kB of NAND flash.+ *+ * Taken from GPLv2 licensed vivi bootloader,+ * Copyright (C) 2002 MIZI Research, Inc.+ *+ * Author: Hwang, Chideok <hwang@mizi.com>+ * Date  : $Date: 2002/08/14 10:26:47 $+ */++#include <config.h>++#ifdef CONFIG_S3C2410_NAND_BOOT++#define __REGb(x)	(*(volatile unsigned char *)(x))+#define __REGi(x)	(*(volatile unsigned int *)(x))+#define NF_BASE		0x4e000000+#define NFCONF		__REGi(NF_BASE + 0x0)+#define NFCMD		__REGb(NF_BASE + 0x4)+#define NFADDR		__REGb(NF_BASE + 0x8)+#define NFDATA		__REGb(NF_BASE + 0xc)+#define NFSTAT		__REGb(NF_BASE + 0x10)++#define BUSY 1+inline void wait_idle(void) {+    int i;++    while(!(NFSTAT & BUSY))+      for(i=0; i<10; i++);+}++#define NAND_SECTOR_SIZE	512+#define NAND_BLOCK_MASK		(NAND_SECTOR_SIZE - 1)++/* low level nand read function */+int+nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)+{+    int i, j;++    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {+        return -1;	/* invalid alignment */+    }++    /* chip Enable */+    NFCONF &= ~0x800;+    for(i=0; i<10; i++);++    for(i=start_addr; i < (start_addr + size);) {+      /* READ0 */+      NFCMD = 0;++      /* Write Address */+      NFADDR = i & 0xff;+      NFADDR = (i >> 9) & 0xff;+      NFADDR = (i >> 17) & 0xff;+      NFADDR = (i >> 25) & 0xff;++      wait_idle();++      for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {+	*buf = (NFDATA & 0xff);+	buf++;+      }+    }++    /* chip Disable */+    NFCONF |= 0x800;	/* chip disable */++    return 0;+}++#endif /* CONFIG_S3C2410_NAND_BOOT */diff -urN u-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.c	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/board/smdk2410/smdk2410.c	2007-09-19 12:21:39.000000000 +0800@@ -36,10 +36,10 @@ #define M_MDIV	0xC3 #define M_PDIV	0x4 #define M_SDIV	0x1-#elif FCLK_SPEED==1		/* Fout = 202.8MHz */-#define M_MDIV	0xA1-#define M_PDIV	0x3-#define M_SDIV	0x1+#elif FCLK_SPEED==1		/* Fout = 200MHz */+#define M_MDIV	0x5C+#define M_PDIV	0x4+#define M_SDIV	0x0 #endif  #define USB_CLOCK 1@@ -87,7 +87,7 @@  	/* set up the I/O ports */ 	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;  	/* arch number of SMDK2410-Board */diff -urN u-boot-1.2.0.orig/common/env_common.c u-boot-1.2.0/common/env_common.c--- u-boot-1.2.0.orig/common/env_common.c	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/common/env_common.c	2007-09-19 13:43:39.000000000 +0800@@ -198,6 +198,25 @@ 	} } +void default_env(void)+{+	if (sizeof(default_environment) > ENV_SIZE)+	{+		puts ("*** Error - default environment is too large\n\n");+		return;+	}++	memset (env_ptr, 0, sizeof(env_t));+	memcpy (env_ptr->data,+		default_environment,+		sizeof(default_environment));+#ifdef CFG_REDUNDAND_ENVIRONMENT+	env_ptr->flags = 0xFF;+#endif+	env_crc_update ();+	gd->env_valid = 1;+}+ void env_relocate (void) { 	DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,@@ -228,28 +247,7 @@ 	env_get_char = env_get_char_memory;  	if (gd->env_valid == 0) {-#if defined(CONFIG_GTH)	|| defined(CFG_ENV_IS_NOWHERE)	/* Environment not changable */-		puts ("Using default environment\n\n");-#else-		puts ("*** Warning - bad CRC, using default environment\n\n");-		SHOW_BOOT_PROGRESS (-1);-#endif--		if (sizeof(default_environment) > ENV_SIZE)-		{-			puts ("*** Error - default environment is too large\n\n");-			return;-		}--		memset (env_ptr, 0, sizeof(env_t));-		memcpy (env_ptr->data,-			default_environment,-			sizeof(default_environment));-#ifdef CFG_REDUNDAND_ENVIRONMENT-		env_ptr->flags = 0xFF;-#endif-		env_crc_update ();-		gd->env_valid = 1;+		default_env(); 	} 	else { 		env_relocate_spec ();diff -urN u-boot-1.2.0.orig/common/env_nand.c u-boot-1.2.0/common/env_nand.c--- u-boot-1.2.0.orig/common/env_nand.c	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/common/env_nand.c	2007-09-19 13:53:55.000000000 +0800@@ -57,8 +57,15 @@ 	    size_t start, size_t len, 	    size_t * retlen, u_char * buf); +#ifdef CFG_NAND_LEGACY+extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE];+extern int nand_legacy_erase(struct nand_chip *nand, size_t ofs,+                                size_t len, int clean);+nand_info_t nand_info[CFG_MAX_NAND_DEVICE];+#else /* info for NAND chips, defined in drivers/nand/nand.c */ extern nand_info_t nand_info[];+#endif  /* references to names in env_common.c */ extern uchar default_environment[];@@ -76,9 +83,7 @@   /* local functions */-#if !defined(ENV_IS_EMBEDDED) static void use_default(void);-#endif  DECLARE_GLOBAL_DATA_PTR; @@ -192,12 +197,23 @@ 	int ret = 0;  	puts ("Erasing Nand...");+	#if (CFG_NAND_LEGACY)+	if (nand_legacy_erase(nand_dev_desc + 0, CFG_ENV_OFFSET, CFG_ENV_SIZE, 0))+ 		return 1;+	#else 	if (nand_erase(&nand_info[0], CFG_ENV_OFFSET, CFG_ENV_SIZE)) 		return 1;+	#endif  	puts ("Writing to Nand... "); 	total = CFG_ENV_SIZE;+	#if (CFG_NAND_LEGACY)+        ret = nand_legacy_rw(nand_dev_desc + 0,+                        0x00 | 0x02, CFG_ENV_OFFSET, CFG_ENV_SIZE,+                        &total, (u_char*)env_ptr);+	#else 	ret = nand_write(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);+	#endif 	if (ret || total != CFG_ENV_SIZE) 		return 1; @@ -272,7 +288,12 @@ 	int ret;  	total = CFG_ENV_SIZE;-	ret = nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);+	#if (CFG_NAND_LEGACY)+		ret = nand_legacy_rw(nand_dev_desc + 0, 0x01 | 0x02, CFG_ENV_OFFSET, +                                     CFG_ENV_SIZE, &total, (u_char*)env_ptr);+	#else+		ret = nand_read(&nand_info[0], CFG_ENV_OFFSET, &total, (u_char*)env_ptr);+	#endif   	if (ret || total != CFG_ENV_SIZE) 		return use_default(); @@ -282,24 +303,11 @@ } #endif /* CFG_ENV_OFFSET_REDUND */ -#if !defined(ENV_IS_EMBEDDED) static void use_default() { 	puts ("*** Warning - bad CRC or NAND, using default environment\n\n"); -	if (default_environment_size > CFG_ENV_SIZE){-		puts ("*** Error - default environment is too large\n\n");-		return;-	}--	memset (env_ptr, 0, sizeof(env_t));-	memcpy (env_ptr->data,-			default_environment,-			default_environment_size);-	env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE);-	gd->env_valid = 1;-+	default_env(); }-#endif  #endif /* CFG_ENV_IS_IN_NAND */diff -urN u-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.S	2007-01-07 07:13:11.000000000 +0800+++ u-boot-1.2.0/cpu/arm920t/start.S	2007-09-19 12:37:00.000000000 +0800@@ -27,7 +27,7 @@  #include <config.h> #include <version.h>-+#include <s3c2410.h>  /*  *************************************************************************@@ -140,7 +140,7 @@ 	ldr	r0, =INTMSK 	str	r1, [r0] # if defined(CONFIG_S3C2410)-	ldr	r1, =0x3ff+	ldr	r1, =0x7ff	/* not necessary */ 	ldr	r0, =INTSUBMSK 	str	r1, [r0] # endif@@ -161,6 +161,7 @@ #endif  #ifndef CONFIG_SKIP_RELOCATE_UBOOT+#ifndef CONFIG_S3C2410_NAND_BOOT relocate:				/* relocate U-Boot to RAM	    */ 	adr	r0, _start		/* r0 <- current position of code   */ 	ldr	r1, _TEXT_BASE		/* test if we run from flash or RAM */@@ -177,8 +178,67 @@ 	stmia	r1!, {r3-r10}		/* copy to   target address [r1]    */ 	cmp	r0, r2			/* until source end addreee [r2]    */ 	ble	copy_loop+#else /* NAND BOOT */+relocate:+copy_myself:+	@ reset NAND+	mov	r1, #S3C2410_NAND_BASE+	ldr	r2, =0xf830		@ initial value enable+	str	r2, [r1, #oNFCONF]+	ldr	r2, [r1, #oNFCONF]+	bic	r2, r2, #0x800		@ enable chip+	str	r2, [r1, #oNFCONF]+	mov	r2, #0xff		@ RESET command+	strb	r2, [r1, #oNFCMD]+	mov	r3, #0			@ wait+1:	add	r3, r3, #0x1+	cmp	r3, #0xa+	blt	1b+2:	ldr	r2, [r1, #oNFSTAT]	@ wait ready+	tst	r2, #0x1+	beq	2b+	ldr	r2, [r1, #oNFCONF]+	orr	r2, r2, #0x800		@ disable chip+	str	r2, [r1, #oNFCONF]++	/* stack setup */+	ldr	r0, _TEXT_BASE			/* upper 128 KiB: relocated uboot   */+	sub	r0, r0, #CFG_MALLOC_LEN		/* malloc area                      */+	sub	r0, r0, #CFG_GBL_DATA_SIZE	/* bdinfo                        */+#ifdef CONFIG_USE_IRQ+	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)+#endif+	sub	sp, r0, #12			/* leave 3 words for abort-stack    */++	@ copy u-boot to RAM+	ldr	r0, _TEXT_BASE+	mov     r1, #0x0+	mov	r2, #CFG_UBOOT_SIZE+	bl	nand_read_ll++	tst	r0, #0x0+	beq	ok_nand_read+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -