(一)解决u-boot读取完DRAM后卡死
1、修改common/board_f.c
diff -urN u-boot-2016.11/common/board_f.c u-boot-2016.11_s3c2440/common/board_f.c
--- u-boot-2016.11/common/board_f.c 2016-11-15 00:27:11.000000000 +0800
+++ u-boot-2016.11_s3c2440/common/board_f.c 2018-06-15 16:26:03.283161976 +0800
@@ -517,8 +517,9 @@
* reserve memory for U-Boot code, data & bss
* round down to next 4 kB limit
*/
- gd->relocaddr -= gd->mon_len;
- gd->relocaddr &= ~(4096 - 1);
+ //gd->relocaddr -= gd->mon_len;
+ //gd->relocaddr &= ~(4096 - 1);
+ gd->relocaddr = (unsigned int)_start;
#ifdef CONFIG_E500
/* round down to next 64 kB limit so that IVPR stays aligned */
gd->relocaddr &= ~(65536 - 1);
2、烧写u-boot.bin到Nor Flash或Nand Flash上
book@ubuntu:~/u-boot-2016.11$ ./auto_run.sh
(二)查看Nor Flash信息
1、分析flash_init的过程
drivers/mtd/cfi_flash.c
flash_init
flash_detect_legacy(cfi_flash_bank_addr(i)
jedec_flash_match(info, info->start[0])
jedec_table(这里面就有许多Flash的一些信息,比如:厂家ID、设备ID、容量等)
2、修改drivers/mtd/cfi_flash.c,使其打印出调试信息
diff -urN u-boot-2016.11/drivers/mtd/cfi_flash.c u-boot-2016.11_s3c2440/drivers/mtd/cfi_flash.c
--- u-boot-2016.11/drivers/mtd/cfi_flash.c 2016-11-15 00:27:11.000000000 +0800
+++ u-boot-2016.11_s3c2440/drivers/mtd/cfi_flash.c 2018-06-15 16:45:39.679161976 +0800
@@ -30,6 +30,9 @@
#include <mtd/cfi_flash.h>
#include <watchdog.h>
+#define DEBUG 1
+#define _DEBUG 1
+
/*
* This file implements a Common Flash Interface (CFI) driver for
* U-Boot.
3、烧写u-boot.bin到NOR Flash上启动
book@ubuntu:~/u-boot-2016.11$ ./auto_run.sh
可以看出我的NOR Flash 厂家ID:c2、设备ID:2249,查看jedec_flash.c文件发现在jedec_table数组里面是没有的该型号的Nor Flash信息
(三)u-boot识别Nor Flash
1、修改drivers/mtd/jedec_flash.c增加MTLV160DB这款Nor Flash信息
大家要知道清楚自己的开发板所用到的Nor Flash型号并相应进行一小部分修改就可以了
diff -urN u-boot-2016.11/drivers/mtd/jedec_flash.c u-boot-2016.11_s3c2440/drivers/mtd/jedec_flash.c
--- u-boot-2016.11/drivers/mtd/jedec_flash.c 2016-11-15 00:27:11.000000000 +0800
+++ u-boot-2016.11_s3c2440/drivers/mtd/jedec_flash.c 2018-06-15 17:01:46.951161976 +0800
@@ -57,6 +57,8 @@
/* MXIC */
#define MX29LV040 0x004F
+#define MTLV160DB 0X2249
+
/* WINBOND */
#define W39L040A 0x00D6
@@ -401,6 +403,25 @@
}
},
#endif
+ /* JZ2440v3使用的MTLV160DB */
+ {
+ .mfr_id = (u16)MX_MANUFACT, /* 厂家ID */
+ .dev_id = MTLV160DB, /* 设备ID */
+ .name = "MXIC MTLV160DB",
+ .uaddr = { /* NOR flash看到解锁地址 */
+ [1] = MTD_UADDR_0x0555_0x02AA /* x16 */
+ },
+ .DevSize = SIZE_2MiB, /* 总大小 */
+ .CmdSet = P_ID_AMD_STD,
+ .NumEraseRegions= 4,
+ .regions = {
+ ERASEINFO(16*1024, 1),
+ ERASEINFO(8*1024, 2),
+ ERASEINFO(32*1024, 1),
+ ERASEINFO(64*1024, 31),
+ }
+ },
+
};
static inline void fill_info(flash_info_t *info, const struct amd_flash_info *jedec_entry, ulong base)
2、烧写u-boot.bin到Nor Flash上启动
book@ubuntu:~/u-boot-2016.11$ ./auto_run.sh
可以看到已经可以成功识别到2MB大小的Nor Flash了,但还存在错误信息ERROR: too many flash sectors
3、修改include/configs/smdk2440.h
diff -urN u-boot-2016.11/include/configs/smdk2440.h u-boot-2016.11_s3c2440/include/configs/smdk2440.h
--- u-boot-2016.11/include/configs/smdk2440.h 2018-06-15 16:28:35.839161976 +0800
+++ u-boot-2016.11_s3c2440/include/configs/smdk2440.h 2018-06-15 17:17:26.087161976 +0800
@@ -135,7 +135,7 @@
#define CONFIG_SYS_MAX_FLASH_BANKS 1
#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE }
-#define CONFIG_SYS_MAX_FLASH_SECT (19)
+#define CONFIG_SYS_MAX_FLASH_SECT (128)
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH
4、修改drivers/mtd/cfi_flash.c关闭调试信息
diff -urN u-boot-2016.11/drivers/mtd/cfi_flash.c u-boot-2016.11_s3c2440/drivers/mtd/cfi_flash.c
--- u-boot-2016.11/drivers/mtd/cfi_flash.c 2018-06-15 17:02:57.551161976 +0800
+++ u-boot-2016.11_s3c2440/drivers/mtd/cfi_flash.c 2018-06-15 17:17:50.607161976 +0800
@@ -30,8 +30,8 @@
#include <mtd/cfi_flash.h>
#include <watchdog.h>
-#define DEBUG 1
-#define _DEBUG 1
+//#define DEBUG 1
+//#define _DEBUG 1
/*
* This file implements a Common Flash Interface (CFI) driver for
5、重新烧写u-boot.bin到Nor Flash上
book@ubuntu:~/u-boot-2016.11$ ./auto_run.sh
到此已经成功识别到Nor Flash为2MB