二、目的
从上一节的成果我们观察到Flash的信息不正确,mini2440板子上为2M的Nor Flash(型号为SST39VF1601),还有就是提示*** Warning - bad CRC, using default environment的警告。
本节,笔者主要完成这2项的修改工作。
三、修改Flash配置
1、 修改命令行前的名字
这个一般是在.h文件里面定义,首先笔者查找了include/configs/mini2440.h。在115行找到如下语句
#define CONFIG_SYS_PROMPT "SMDK2410 # " /* Monitor Command Prompt */
我们将其修改为
#define CONFIG_SYS_PROMPT "mini2440/care # " /* Monitor Command Prompt */
2、 修改flash部分代码
使用source insight 阅读源代码,我们可以找到Flash:512KB的打印信息所对应的函数位置。
lib_arm/board.c [214行] void display_flash_config (ulongsize)函数
找到调用该函数的地方,在本文件329行
#ifndef CONFIG_SYS_NO_FLASH /* configure available FLASH banks */ display_flash_config (flash_init ()); #endif /* CONFIG_SYS_NO_FLASH *
flash_init()函数定义在board/samsung/mini2440/flash.c
flash_info[i].flash_id = #if defined(CONFIG_AMD_LV400) (AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV400B & FLASH_TYPEMASK); #elif defined(CONFIG_AMD_LV800) (AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV800B & FLASH_TYPEMASK); #else #error "Unknown flash configured" #endif
CONFIG_AMD_LV400并不是mini2440的NorFlash id。
接下来,我们修改mini2440.h关于NorFlash 的一些定义include/configs/mini2440.h
#if 0
#define CONFIG_AMD_LV400 1 /*uncomment this if you have a LV400 flash */
#define CONFIG_AMD_LV800 1 /*uncomment this if you have a LV800 flash */
#endif
在176行后添加
#define CONFIG_SST_39VF1601 1 #define PHYS_FLASH_SIZE 0x200000 //2m NorFlash #define CONFIG_SYS_MAX_FLASH_SECT (512) //扇区大小,一扇区4k #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x040000)
修改board/samsung/mini2440/flash.c norflash的参数宏定义#define MAIN_SECT_SIZE 0x1000 /* 4 KB */ #define MEM_FLASH_ADDR1 (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00005555 << 1))) #define MEM_FLASH_ADDR2 (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00002AAA << 1)))
修改flash_init()函数#if defined(CONFIG_AMD_LV400) (AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV400B & FLASH_TYPEMASK); #elif defined(CONFIG_AMD_LV800) (AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV800B & FLASH_TYPEMASK); #elif defined(CONFIG_SST_39VF1601) //添加CONFIG_SST_39VF1601 定义 (SST_MANUFACT & FLASH_VENDMASK) | (SST_ID_xF1601 & FLASH_TYPEMASK); #else #error "Unknown flash configured" #endif