在源码中搜索Flash not Erased,在common/flash.c中flash_perror()函数为错误打印函数
void flash_perror (int err)
{
switch(err) {
caseERR_OK:
break;
caseERR_TIMOUT:
puts("Timeout writing to Flash\n");
break;
caseERR_NOT_ERASED:
puts("Flash not Erased\n");
break;
caseERR_PROTECTED:
puts("Can't write to protected Flash sectors\n");
break;
caseERR_INVAL:
puts("Outside available Flash\n");
break;
caseERR_ALIGN:
puts("Start and/or end address not on sector boundary\n");
break;
caseERR_UNKNOWN_FLASH_VENDOR:
puts("Unknown Vendor of Flash\n");
break;
caseERR_UNKNOWN_FLASH_TYPE:
puts("Unknown Type of Flash\n");
break;
caseERR_PROG_ERROR:
puts("General Flash Programming Error\n");
break;
default:
printf("%s[%d] FIXME: rc=%d\n", __FILE__, __LINE__, err);
break;
}
}
在common/cmd_mem.c文件中查找cp命令,锁定do_mem_cp函数
int do_mem_cp ( cmd_tbl_t *cmdtp, int flag,int argc, char * const argv[])
{
ulong addr, dest, count;
int size;
if(argc != 4)
returnCMD_RET_USAGE;
/*Check for size specification.
*/
if((size = cmd_get_data_size(argv[0], 4)) < 0)
return1;
addr= simple_strtoul(argv[1], NULL, 16);
addr+= base_address;
dest= simple_strtoul(argv[2], NULL, 16);
dest+= base_address;
count= simple_strtoul(argv[3], NULL, 16);
if(count == 0) {
puts("Zero length ???\n");
return1;
}
#ifndef CONFIG_SYS_NO_FLASH
/*check if we are copying to Flash */
if( (addr2info(dest) != NULL)
#ifdef CONFIG_HAS_DATAFLASH
&& (!addr_dataflash(dest))
#endif
) {
intrc;
puts("Copy to Flash... ");
rc = flash_write ((char *)addr,dest, count*size);
if (rc != 0) {
flash_perror(rc);
return(1);
}
puts("done\n");
return 0;
}
#endif
#ifdef CONFIG_HAS_DATAFLASH
/*Check if we are copying from RAM or Flash to DataFlash */
if(addr_dataflash(dest) && !addr_dataflash(addr)){
intrc;
puts("Copy to DataFlash... ");
rc= write_dataflash (dest, addr, count*size);
if(rc != 1) {
dataflash_perror(rc);
return(1);
}
puts("done\n");
return0;
}
/*Check if we are copying from DataFlash to RAM */
if(addr_dataflash(addr) && !addr_dataflash(dest)
#ifndef CONFIG_SYS_NO_FLASH
&& (addr2info(dest) == NULL)
#endif
){
intrc;
rc= read_dataflash(addr, count * size, (char *) dest);
if(rc != 1) {
dataflash_perror(rc);
return(1);
}
return0;
}
if(addr_dataflash(addr) && addr_dataflash(dest)){
puts("Unsupported combination of source/destination.\n\r");
return1;
}
#endif
#ifdef CONFIG_BLACKFIN
/*See if we'r