📄 sys_fis.c
字号:
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 + -