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

📄 update.c~

📁 umon bootloader source code, support mips cpu.
💻 C~
📖 第 1 页 / 共 3 页
字号:

	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 + -