📄 update.c~
字号:
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
return 1;
}
puts ("OK\n");
}
printf("\n ============ STEP 3: display image header \n\n");
print_image_hdr(phead);
len += sizeof(image_header_t);
printf("\n ============ STEP 4: Erase & Write flash \n\n");
print_warning();
while(1)
{
char readchar = (char)getchar();
if( readchar == 'y')
{
//printf("\nBootloader console...\n");
break;
}
else if(readchar =='n')
{
return 0;
}
else
print_warning();
}
puts("\n");
for(i = KERNEL_IMAGE_START_SEC;i<=KERNEL_IMAGE_END_SEC;i++)
{
printf("Erase sector %d...",i);
rc = fdev->flerase(fdev,i);
printf("OK\n");
}
printf("\nWrite image from 0x%x to 0x%x:\n",addr,KERNEL_IMAGE_START_ADDR);
rc = fdev->flwrite(fdev,KERNEL_IMAGE_START_ADDR,(unsigned char *)addr,len);
printf("OK\n");
}
//################ romfs file system
if(strcmp(argv[4],"no") != 0)
{
printf("\n Update Romfs File system image !!! \n");
printf("\n ============ STEP 1: downloading Romfs File system image to 0x%x ...\n\n",addr);
tftpsize = tftpGet(addr,argv[1],mode,argv[4],file,flags,info);
if(!tftpsize)
return 0;
phead = (image_header_t *)addr;
printf("\n ============ STEP 2: file checking ...\n\n");
if(phead->ih_magic != IH_MAGIC) //
{
puts ("Bad Magic Number\n");
return 0;
}
if(phead->ih_magic != IH_MAGIC)
{
puts ("Bad Magic Number\n");
return 0;
}
data = addr;
len = sizeof(image_header_t);
checksum = phead->ih_hcrc;
phead->ih_hcrc = 0;
if (crc32 (0, (unsigned char *)data, len) != checksum) {
puts ("Bad Header Checksum\n");
return 1;
}
data = addr + sizeof(image_header_t);
len = phead->ih_size;
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
return 1;
}
puts ("OK\n");
}
printf("\n ============ STEP 3: display image header \n\n");
print_image_hdr(phead);
len += sizeof(image_header_t);
printf("\n ============ STEP 4: Erase & Write flash \n\n");
print_warning();
while(1)
{
char readchar = (char)getchar();
if( readchar == 'y')
{
//printf("\nBootloader console...\n");
break;
}
else if(readchar =='n')
{
return 0;
}
else
print_warning();
}
puts("\n");
for(i = FILE_IMAGE_START_SEC;i<=FILE_IMAGE_END_SEC;i++)
{
printf("Erase sector %d...",i);
rc = fdev->flerase(fdev,i);
printf("OK\n");
}
printf("\nWrite image from 0x%x to 0x%x:\n",addr,FILE_IMAGE_START_ADDR);
rc = fdev->flwrite(fdev,FILE_IMAGE_START_ADDR,(unsigned char *)addr,len);
printf("OK\n");
}
//################ jffs2 file system
if(strcmp(argv[5],"no") != 0)
{
printf("\n Update Jffs2 File system image !!! \n");
printf("\n ============ STEP 1: downloading jffs2 File system image to 0x%x ...\n\n",addr);
tftpsize = tftpGet(addr,argv[1],mode,argv[4],file,flags,info);
if(!tftpsize)
return 0;
phead = (image_header_t *)addr;
printf("\n ============ STEP 2: file checking ...\n\n");
if(phead->ih_magic != IH_MAGIC) //
{
puts ("Bad Magic Number\n");
return 0;
}
if(phead->ih_magic != IH_MAGIC)
{
puts ("Bad Magic Number\n");
return 0;
}
data = addr;
len = sizeof(image_header_t);
checksum = phead->ih_hcrc;
phead->ih_hcrc = 0;
if (crc32 (0, (unsigned char *)data, len) != checksum) {
puts ("Bad Header Checksum\n");
return 1;
}
data = addr + sizeof(image_header_t);
len = phead->ih_size;
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
return 1;
}
puts ("OK\n");
}
printf("\n ============ STEP 3: display image header \n\n");
print_image_hdr(phead);
len += sizeof(image_header_t);
printf("\n ============ STEP 4: Erase & Write flash \n\n");
print_warning();
while(1)
{
char readchar = (char)getchar();
if( readchar == 'y')
{
//printf("\nBootloader console...\n");
break;
}
else if(readchar =='n')
{
return 0;
}
else
print_warning();
}
puts("\n");
for(i = JFFS2_IMAGE_START_SEC;i<=JFFS2_IMAGE_END_SEC;i++)
{
printf("Erase sector %d...",i);
rc = fdev->flerase(fdev,i);
printf("OK\n");
}
printf("\nWrite image from 0x%x to 0x%x:\n",addr,JFFS2_IMAGE_START_ADDR);
rc = fdev->flwrite(fdev,JFFS2_IMAGE_START_ADDR,(unsigned char *)addr,len);
printf("OK\n");
}
puts("Update successfully,Please restart system!!!\n");
}
char *UpQVHelp[] = {
"Update system image without Warning !!!!",
"upqv [tftpsrv] [ucos image name] [kernel image name] [romfs image name] [jffs2.image name]",
"If image name is 'no', Don't update the image !!!",
0,
};
/* Update():
* Code that handles the user interface. See UpdateHelp[] below for usage.
*/
int
UpQV(int argc,char *argv[])
{
char *mode, *file, *info, *flags;
unsigned int addr,data,len,checksum,verify,tftpsize,new_version,i,snum,process,step,rc;
image_header_t *phead,header;
short *tmp;
struct flashinfo *fdev;
puts(" //*********************************************************************//\n");
puts(" //*** ***//\n");
puts(" //*** WARNING: Update process will be finished without Warning!!! ***//\n");
puts(" //*** Please keep power on!! ***//\n");
puts(" //*** ***//\n");
puts(" //*********************************************************************//\n");
fdev = nametofdev(boot_device_name);
phead = &header;
//get image file through tftp client
file = (char *)0;
info = (char *)0;
flags = (char *)0;
mode = "octet";
if (argc == 7)
addr = (unsigned int)strtol(argv[5],0,0);
else if (argc == 6)
addr = getAppRamStart();
else
return(CMD_PARAM_ERROR);
//########## UCOS
if(strcmp(argv[2],"no")!= 0)
{
printf("\n Update UCOS image !!! \n");
printf("\n ============ STEP 1: downloading UCOS image to 0x%x ...\n\n",addr);
tftpsize = tftpGet(addr,argv[1],mode,argv[2],file,flags,info);
if(!tftpsize)
return 0;
phead = (image_header_t *)addr;
printf("\n ============ STEP 2: file checking ...\n\n");
if(phead->ih_magic != IH_MAGIC) //
{
puts ("Bad Magic Number\n");
return 0;
}
if(phead->ih_magic != IH_MAGIC)
{
puts ("Bad Magic Number\n");
return 0;
}
data = addr;
len = sizeof(image_header_t);
checksum = phead->ih_hcrc;
phead->ih_hcrc = 0;
if (crc32 (0, (unsigned char *)data, len) != checksum) {
puts ("Bad Header Checksum\n");
return 1;
}
data = addr + sizeof(image_header_t);
len = phead->ih_size;
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
return 1;
}
puts ("OK\n");
}
printf("\n ============ STEP 3: display image header \n\n");
print_image_hdr(phead);
len += sizeof(image_header_t);
printf("\n ============ STEP 4: Erase & Write flash \n\n");
/*
print_warning();
while(1)
{
char readchar = (char)getchar();
if( readchar == 'y')
{
//printf("\nBootloader console...\n");
break;
}
else if(readchar =='n')
{
return 0;
}
else
print_warning();
}
puts("\n");
*/
for(i = UCOS_IMAGE_START_SEC;i<=UCOS_IMAGE_END_SEC;i++)
{
printf("Erase sector %d...",i);
rc = fdev->flerase(fdev,i);
printf("OK\n");
}
printf("\nWrite image from 0x%x to 0x%x:\n",addr,UCOS_IMAGE_START_ADDR);
rc = fdev->flwrite(fdev,UCOS_IMAGE_START_ADDR,(unsigned char *)addr,len);
printf("OK\n");
}
//########### kernel
if(strcmp(argv[3],"no") != 0)
{
printf("\n\n Update Linux kernel image !!! \n");
printf("\n ============ STEP 1: downloading Linux kernel image to 0x%x ...\n\n",addr);
tftpsize = tftpGet(addr,argv[1],mode,argv[3],file,flags,info);
if(!tftpsize)
return 0;
phead = (image_header_t *)addr;
printf("\n ============ STEP 2: file checking ...\n\n");
if(phead->ih_magic != IH_MAGIC) //
{
puts ("Bad Magic Number\n");
return 0;
}
if(phead->ih_magic != IH_MAGIC)
{
puts ("Bad Magic Number\n");
return 0;
}
data = addr;
len = sizeof(image_header_t);
checksum = phead->ih_hcrc;
phead->ih_hcrc = 0;
if (crc32 (0, (unsigned char *)data, len) != checksum) {
puts ("Bad Header Checksum\n");
return 1;
}
data = addr + sizeof(image_header_t);
len = phead->ih_size;
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
return 1;
}
puts ("OK\n");
}
printf("\n ============ STEP 3: display image header \n\n");
print_image_hdr(phead);
len += sizeof(image_header_t);
printf("\n ============ STEP 4: Erase & Write flash \n\n");
/*
print_warning();
while(1)
{
char readchar = (char)getchar();
if( readchar == 'y')
{
//printf("\nBootloader console...\n");
break;
}
else if(readchar =='n')
{
return 0;
}
else
print_warning();
}
puts("\n");
*/
for(i = KERNEL_IMAGE_START_SEC;i<=KERNEL_IMAGE_END_SEC;i++)
{
printf("Erase sector %d...",i);
rc = fdev->flerase(fdev,i);
printf("OK\n");
}
printf("\nWrite image from 0x%x to 0x%x:\n",addr,KERNEL_IMAGE_START_ADDR);
rc = fdev->flwrite(fdev,KERNEL_IMAGE_START_ADDR,(unsigned char *)addr,len);
printf("OK\n");
}
//################ romfs file system
if(strcmp(argv[4],"no") != 0)
{
printf("\n Update Romfs File system image !!! \n");
printf("\n ============ STEP 1: downloading Romfs File system image to 0x%x ...\n\n",addr);
tftpsize = tftpGet(addr,argv[1],mode,argv[4],file,flags,info);
if(!tftpsize)
return 0;
phead = (image_header_t *)addr;
printf("\n ============ STEP 2: file checking ...\n\n");
if(phead->ih_magic != IH_MAGIC) //
{
puts ("Bad Magic Number\n");
return 0;
}
if(phead->ih_magic != IH_MAGIC)
{
puts ("Bad Magic Number\n");
return 0;
}
data = addr;
len = sizeof(image_header_t);
checksum = phead->ih_hcrc;
phead->ih_hcrc = 0;
if (crc32 (0, (unsigned char *)data, len) != checksum) {
puts ("Bad Header Checksum\n");
return 1;
}
data = addr + sizeof(image_header_t);
len = phead->ih_size;
verify = 1;
if (verify) {
puts (" Verifying Checksum ... ");
if (crc32 (0, (unsigned char *)data, len) != phead->ih_dcrc) {
printf ("Bad Data CRC\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -