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

📄 sys_fis.c

📁 某个ARM9板子的实际bootloader 对裁剪
💻 C
📖 第 1 页 / 共 2 页
字号:
	strcpy(img->file.name, BOARD_FIS_RAM_DISK_NAME);	img->file.flash_base	= BOARD_FLASH_RAM_DISK_ADDR;	img->file.mem_base		= BOARD_DRAM_RAM_DISK_ADDR;	img->file.size			= BOARD_RAM_DISK_SIZE;	img->file.entry_point	= BOARD_DRAM_RAM_DISK_ADDR; //0;	img->file.data_length	= BOARD_RAM_DISK_SIZE;	img->desc_cksum			= fis_desc_chksum(img);	img++;		// Application	memset((char *)img, 0, FIS_ENTRY_SIZE);	strcpy(img->file.name, BOARD_FIS_APPS_NAME);	img->file.flash_base	= BOARD_FLASH_APPS_ADDR;	img->file.mem_base		= 0;	img->file.size			= BOARD_APPS_SIZE;	img->file.entry_point	= 0;	img->file.data_length	= BOARD_APPS_SIZE;	img->desc_cksum			= fis_desc_chksum(img);	img++;#endif		// Configuration	memset((char *)img, 0, FIS_ENTRY_SIZE);	strcpy(img->file.name, BOARD_FIS_CONFIG_NAME);	img->file.flash_base	= BOARD_FLASH_CONFIG_ADDR;	img->file.mem_base		= 0;	img->file.size			= BOARD_FLASH_CONFIG_SIZE;	img->file.entry_point	= 0;	img->file.data_length	= BOARD_FLASH_CONFIG_SIZE;	img->desc_cksum			= fis_desc_chksum(img);	img++;#ifdef BOARD_SUPPORT_TWO_CPU	// CPU2 code	memset((char *)img, 0, FIS_ENTRY_SIZE);	strcpy(img->file.name, BOARD_FIS_CPU2_NAME);	img->file.flash_base	= BOARD_FLASH_CPU2_ADDR;	img->file.mem_base		= BOARD_DRAM_CPU2_ADDR+CPU2_BOOT_OFFSET;	img->file.size			= BOARD_CPU2_SIZE;	img->file.entry_point	= 0;	img->file.data_length	= BOARD_CPU2_SIZE;	img->desc_cksum			= fis_desc_chksum(img);	img++;#endif		// VCTL	memset((char *)img, 0, FIS_ENTRY_SIZE);	strcpy(img->file.name, BOARD_FIS_VCTL_NAME);	img->file.flash_base	= BOARD_FLASH_VCTL_ADDR;	img->file.mem_base		= 0;	img->file.size			= BOARD_FLASH_VCTL_SIZE;	img->file.entry_point	= 0;	img->file.data_length	= BOARD_FLASH_VCTL_SIZE;	img->desc_cksum			= fis_desc_chksum(img);	img++;		fis_write_flash();}/*----------------------------------------------------------------------* fis_set_ip_addr*----------------------------------------------------------------------*/void fis_write_flash(void){    unsigned long	err_addr;	int				stat;		printf("\nStart Update FIS data......\n");	printf("Erase flash (0x%x): Size=%u ", BOARD_FLASH_FIS_ADDR, BOARD_FLASH_FIS_SIZE);  	if ((stat = flash_erase((void *)BOARD_FLASH_FIS_ADDR,     							    BOARD_FLASH_FIS_SIZE,    							    (unsigned long *)&err_addr)) != 0)	{		printf(" FAILED at 0x%x: ", err_addr);		printf((char *)flash_errmsg(stat));		printf("\n"); 		return;	}	printf(" OK!\n"); 	printf("Program flash (0x%x): Size=%u ", BOARD_FLASH_FIS_ADDR, FIS_TOTAL_SIZE); 	if ((stat = flash_program((void *)BOARD_FLASH_FIS_ADDR,     						  (void *)fis_datap,     						  FIS_TOTAL_SIZE, 	    					  (unsigned long *)&err_addr)) != 0)	{		printf(" FAILED at 0x%x: ", err_addr);		printf((char *)flash_errmsg(stat));		printf("\n"); 		return;	}	else		printf(" OK!\n"); }/*----------------------------------------------------------------------* fis_set_ip_addr*----------------------------------------------------------------------*/void fis_set_ip_addr(UINT32 ipaddr){	FIS_T	*img;	UINT32  netmask, gateway;	char	*datap;	img = fis_find_image(BOARD_FIS_BOOT_NAME);	if (!img)	{		printf("FIS is not found! Create a default FIS!\n");		sys_set_ip_addr(ipaddr);		fis_create_default();		return;	}		netmask = sys_get_ip_netmask();	gateway = sys_get_ip_gateway();	datap = img->data;	sprintf(datap, "%d.%d.%d.%d",			IP1(ipaddr), IP2(ipaddr), IP3(ipaddr), IP4(ipaddr));	datap += strlen(datap) + 1;	sprintf(datap, "%d.%d.%d.%d",			IP1(netmask), IP2(netmask), IP3(netmask), IP4(netmask));	datap += strlen(datap) + 1;	sprintf(datap, "%d.%d.%d.%d",			IP1(gateway), IP2(gateway), IP3(gateway), IP4(gateway));		img->desc_cksum = fis_desc_chksum(img);	fis_write_flash();}	/*----------------------------------------------------------------------* fis_ui_delete_image*----------------------------------------------------------------------*/void fis_ui_delete_image(int type){	FIS_T *img;	char name[FIS_NAME_SIZE];	int rc;		name[0] = 0x00;	fis_ui_list(0);	printf("Input image name: ");	rc = ui_gets(name, sizeof(name));	if (rc)		img = fis_find_image(name);	if (rc == 0 || !img)	{		printf("Image is not found!\n");		return;	}		if ((strncasecmp(name, BOARD_FIS_BOOT_NAME) == 0)		|| (strncasecmp(name, BOARD_FIS_DIRECTORY_NAME) == 0))	{		printf("Cannot delete %s or %s image!\n", BOARD_FIS_BOOT_NAME, BOARD_FIS_DIRECTORY_NAME);		return;	}			memset((char *)img, 0, FIS_ENTRY_SIZE);	fis_write_flash();}/*----------------------------------------------------------------------* sys_fis_create_image*----------------------------------------------------------------------*/void fis_ui_create_image(int type){	FIS_T	*img;	char	name[FIS_NAME_SIZE];	char	buf[20];	int		rc;	int		max_size, total_size;	unsigned long flash_addr, ram_addr, entry_point;	printf("Input Image Name: ");	name[0] = 0x00;	rc = ui_gets(name, sizeof(name));	if (rc == 0)		return;	//img = fis_find_image(name);	//if (img)	//{	//	printf("Image is existed!(%s, %x)\n", name, img);	//	return;	//}	//img = fis_get_free_image();	//if (!img)	//{	//	printf("No free image space!\n");	//	return;	//}		img = fis_find_image(name);	if (!img)	{		img = fis_get_free_image();		if (!img)		{			printf("No free image space!\n");			return;		}	}			printf("Input Flash Address: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	flash_addr = str2hex(buf);	if (flash_addr < BOARD_FLASH_BASE_ADDR || 		flash_addr > (BOARD_FLASH_BASE_ADDR + BOARD_FLASH_SIZE))	{		printf("Address is NOT in FLASH range!\n");		return;	}		printf("Input Memory Address: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	ram_addr = str2hex(buf);	if (ram_addr > (BOARD_DRAM_BASE_ADDR + BOARD_DRAM_SIZE))	{		printf("Address is NOT in DRAM range!\n");		return;	}		printf("Input Entry Point: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	entry_point = str2hex(buf);	if (entry_point > (BOARD_DRAM_BASE_ADDR + BOARD_DRAM_SIZE))	{		printf("Address is NOT in DRAM range!\n");		return;	}	#if 0		printf("Input Max Size: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	max_size = str2hex(buf);	if (max_size > (BOARD_FLASH_SIZE - BOARD_FLASH_BOOT_SIZE))	{		printf("Size is too large!\n");		return;	}#endif		total_size = ui_download(flash_addr, 0, 0);	if (total_size > 0)	{		memset((char *)img, 0, FIS_ENTRY_SIZE);		strcpy(img->file.name, name);		img->file.flash_base	= flash_addr;		img->file.mem_base		= ram_addr;		img->file.size			= total_size;		img->file.entry_point	= entry_point;		img->file.data_length	= total_size;		img->desc_cksum			= fis_desc_chksum(img);		fis_write_flash();	}}/*----------------------------------------------------------------------* fis_ui_over_write_image*----------------------------------------------------------------------*/void fis_ui_over_write_image(int type){	FIS_T	*img;	char	name[FIS_NAME_SIZE];	char	buf[20];	int		rc;	int		max_size, total_size;	unsigned long flash_addr, ram_addr, entry_point;	printf("Input Image Name: ");	name[0] = 0x00;	rc = ui_gets(name, sizeof(name));	if (rc == 0)		return;	img = fis_find_image(name);	if (!img)	{		printf("Image is not existed!(%s, %x)\n", name, img);		return;	}		printf("Input Flash Address: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	flash_addr = str2hex(buf);	if (flash_addr < BOARD_FLASH_BASE_ADDR || 		flash_addr > (BOARD_FLASH_BASE_ADDR + BOARD_FLASH_SIZE))	{		printf("Address is NOT in FLASH range!\n");		return;	}		printf("Input Memory Address: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	ram_addr = str2hex(buf);	if (ram_addr > (BOARD_DRAM_BASE_ADDR + BOARD_DRAM_SIZE))	{		printf("Address is NOT in DRAM range!\n");		return;	}		printf("Input Entry Point: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	entry_point = str2hex(buf);	if (entry_point > (BOARD_DRAM_BASE_ADDR + BOARD_DRAM_SIZE))	{		printf("Address is NOT in DRAM range!\n");		return;	}	#if 0		printf("Input Max Size: ");	buf[0] = 0x00;	rc = ui_gets(buf, sizeof(buf));	if (rc == 0)		return;	max_size = str2hex(buf);	if (max_size > (BOARD_FLASH_SIZE - BOARD_FLASH_BOOT_SIZE))	{		printf("Size is too large!\n");		return;	}#endif		total_size = ui_download(flash_addr, 0, 0);	if (total_size > 0)	{		memset((char *)img, 0, FIS_ENTRY_SIZE);		strcpy(img->file.name, name);		img->file.flash_base	= flash_addr;		img->file.mem_base		= ram_addr;		img->file.size			= total_size;		img->file.entry_point	= entry_point;		img->file.data_length	= total_size;		img->desc_cksum			= fis_desc_chksum(img);		fis_write_flash();	}}/*----------------------------------------------------------------------* fis_ui_create_default*----------------------------------------------------------------------*/void fis_ui_create_default(int type){	printf("Create default FIS\n");	fis_create_default();}#endif // BOARD_SUPPORT_FIS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -