diff packages/redboot/current/src/flash.c @ 126:518f42066aba ecos-sw-2000-09-19

Merge from eCos master repository on 2000-09-19-06:25:26-BST
author jlarmour
date Tue, 19 Sep 2000 05:53:51 +0000
parents 6bd9d475ed4b
children eb9fd8c04db3
line wrap: on
line diff
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -185,14 +185,14 @@ fis_init(int argc, char *argv[])
     strcpy(img->name, "RedBoot");
     img->flash_base = (unsigned long)flash_start;
     img->mem_base = (unsigned long)flash_start;
-    img->size = 0;
+    img->size = block_size;
     img++;  img_count++;
     // And a backup image
     memset(img, 0, sizeof(*img));
     strcpy(img->name, "RedBoot[backup]");
     img->flash_base = (unsigned long)flash_start+block_size;
     img->mem_base = (unsigned long)flash_start+block_size;
-    img->size = 0;
+    img->size = block_size;
     img++;  img_count++;
 #ifdef CYGSEM_REDBOOT_FLASH_CONFIG
     // And a descriptor for the configuration data
@@ -362,9 +362,8 @@ fis_create(int argc, char *argv[])
     }
     if ((mem_addr < (unsigned long)ram_start) ||
         ((mem_addr+length) >= (unsigned long)ram_end)) {
-        printf("Invalid RAM address: %p\n", (void *)mem_addr);
+        printf("** WARNING: RAM address: %p may be invalid\n", (void *)mem_addr);
         printf("   valid range is %p-%p\n", (void *)ram_start, (void *)ram_end);
-        return;
     }
     if (strlen(name) >= sizeof(img->name)) {
         printf("Name is too long, must be less than %d chars\n", (int)sizeof(img->name));
@@ -382,10 +381,14 @@ fis_create(int argc, char *argv[])
     img = (struct image_desc *)fis_work_block;
     for (i = 0;  i < block_size/sizeof(*img);  i++, img++) {
         if ((img->name[0] != (unsigned char)0xFF) && (strcmp(name, img->name) == 0)) {
-            if (img->flash_base != flash_addr) {
+            if (flash_addr_set && (img->flash_base != flash_addr)) {
                 printf("Image found, but FLASH address incorrect\n");
                 return;
             }
+            if (img->size != length) {
+                printf("Image found, but LENGTH is incorrect\n");
+                return;
+            }
             if (!verify_action("An image named '%s' exists", name)) {
                 return;
             } else {
@@ -1052,13 +1055,13 @@ load_flash_config(void)
     bool use_boot_script;
 
     config_ok = false;
+    script = (unsigned char *)0;
     if (!do_flash_init()) return;
     cfg_base = (void *)((unsigned long)flash_end - (2*block_size));
     memcpy(&config, cfg_base, sizeof(config));
     if ((_cksum((unsigned long *)&config, sizeof(config)-sizeof(config.cksum)) != config.cksum) ||
         (config.key1 != CONFIG_KEY1)|| (config.key2 != CONFIG_KEY2)) {
         printf("FLASH configuration checksum error or invalid key\n");
-        script = (unsigned char *)0;
         memset(&config, 0, sizeof(config));
         return;
     }