diff options
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | board/trab/auto_update.c | 18 |
2 files changed, 15 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG index f3481222ced..c1492ccd438 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,8 @@ Changes for U-Boot 1.0.0: ====================================================================== +* Use IH_TYPE_FILESYSTEM for TRAB "disk" images. + * Fix build problems under FreeBSD * Add generic filesystem image type diff --git a/board/trab/auto_update.c b/board/trab/auto_update.c index 3113cf89ad0..f44b9bf5944 100644 --- a/board/trab/auto_update.c +++ b/board/trab/auto_update.c @@ -254,9 +254,11 @@ au_check_valid(int idx, long nbytes) printf ("Image %s wrong type\n", aufile[idx]); return -1; } - if ((idx == IDX_DISK || idx == IDX_APP) - && (hdr->ih_type != IH_TYPE_RAMDISK)) - { + if ((idx == IDX_DISK) && (hdr->ih_type != IH_TYPE_FILESYSTEM)) { + printf ("Image %s wrong type\n", aufile[idx]); + return -1; + } + if ((idx == IDX_APP) && (hdr->ih_type != IH_TYPE_RAMDISK)) { printf ("Image %s wrong type\n", aufile[idx]); return -1; } @@ -269,8 +271,14 @@ au_check_valid(int idx, long nbytes) /* special case for prepare.img */ if (idx == IDX_PREPARE) return 0; - /* check the size does not exceed space in flash */ - if ((ausize[idx] != 0) && (ausize[idx] < ntohl(hdr->ih_size))) { + /* recycle checksum */ + checksum = ntohl(hdr->ih_size); + /* for kernel and app the image header must also fit into flash */ + if (idx != IDX_DISK) + checksum += sizeof(*hdr); + /* check the size does not exceed space in flash. HUSH scripts */ + /* all have ausize[] set to 0 */ + if ((ausize[idx] != 0) && (ausize[idx] < checksum)) { printf ("Image %s is bigger than FLASH\n", aufile[idx]); return -1; } |