diff -uN fis.orig/crc.c fis/crc.c
--- fis.orig/crc.c	1970-01-01 10:00:00.000000000 +1000
+++ fis/crc.c	2008-04-01 11:39:13.000000000 +1100
@@ -0,0 +1,88 @@
+/*
+ * crc.c
+ *
+ * $Id: crc.c,v 1.1 2006/02/13 09:58:08 andrzej Exp $
+ *
+ * Gary S. Brown's CRC
+ * Code based on Gary S. Brown CRC (1986). 
+ * Generation polynomial is:
+ *   X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 
+ *
+ * Copyright (C) 2006 Ekiert sp z o.o.
+ * Author: Andrzej Ekiert <a.ekiert@ekiert.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version. 
+ */
+
+#include <stdint.h>
+
+#include "crc.h"
+
+static const uint32_t crc32_tab[] = {
+      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
+      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
+      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
+      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
+      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
+      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
+      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
+      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
+      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
+      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
+      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
+      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
+      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
+      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
+      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
+      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
+      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
+      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
+      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
+      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
+      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
+      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
+      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
+      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
+      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
+      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
+      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
+      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
+      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
+      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
+      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
+      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
+      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
+      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
+      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
+      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
+      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
+      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
+      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
+      0x2d02ef8dL
+   };
+
+uint32_t crc32(uint8_t *s, uint32_t len)
+{
+	uint32_t i, val = 0;
+
+	for (i = 0;  i < len;  i++) {
+		val = crc32_tab[(val^s[i]) & 0xff] ^ (val >> 8);
+	}
+	return val;
+}
+
diff -uN fis.orig/crc.h fis/crc.h
--- fis.orig/crc.h	1970-01-01 10:00:00.000000000 +1000
+++ fis/crc.h	2008-04-01 11:39:13.000000000 +1100
@@ -0,0 +1,25 @@
+/*
+ * crc.h
+ *
+ * $Id: crc.h,v 1.1 2006/02/13 09:58:08 andrzej Exp $
+ *
+ * Gary S. Brown's CRC - header. 
+ *
+ * Copyright (C) 2006 Ekiert sp z o.o.
+ * Author: Andrzej Ekiert <a.ekiert@ekiert.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version. 
+ */
+
+#ifndef CRC_H
+#define CRC_H
+
+#include <stdint.h>
+
+uint32_t crc32(uint8_t *s, uint32_t len);
+
+#endif //CRC_H
+
diff -uN fis.orig/fis.c fis/fis.c
--- fis.orig/fis.c	2007-05-03 06:42:51.000000000 +1000
+++ fis/fis.c	2008-04-01 11:52:11.000000000 +1100
@@ -30,6 +30,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
+#include "crc.h"
 
 // Report an error and terminate:
 
@@ -141,8 +142,8 @@
 
 static void dump_desc(FILE* f, const struct fis_image_desc* d)
 {
-  fprintf(f,"%16s: addr = 0x%08x, size = 0x%08x\n",
-             d->name,     d->flash_base, d->size);
+  fprintf(f,"%16s: flash addr = 0x%08x, mem addr = 0x%08x, size = 0x%08x, checksum = 0x%08x\n",
+             d->name, d->flash_base, d->mem_base, d->size, d->file_cksum);
   for (unsigned int i=0; i<(sizeof(d->skips)/4); ++i) {
     if (d->skips[i]==0x736b6970 || d->skips[i]==0x70696b73) { // "skip"
       uint32_t offset = d->skips[i+1];
@@ -332,6 +333,7 @@
   d->size        = swap_end_32(d->size);
   d->entry_point = swap_end_32(d->entry_point);
   d->data_length = swap_end_32(d->data_length);
+  d->file_cksum  = swap_end_32(d->file_cksum);
   for (unsigned int i=0; i<(sizeof(d->skips)/4); ++i) {
     d->skips[i] = swap_end_32(d->skips[i]);
   }
@@ -446,19 +448,25 @@
     char* arg=argv[i];
     if (strcmp(arg,"-l")==0) {
       if (i==argc-1) {
-        fatal("argumnet missing for -l");
+        fatal("argument missing for -l");
       }
       ++i;
       d->size = str_to_int_maybe_hex(argv[i]);
     } else if (strcmp(arg,"-f")==0) {
       if (i==argc-1) {
-        fatal("argumnet missing for -f");
+        fatal("argument missing for -f");
       }
       ++i;
       d->flash_base = str_to_int_maybe_hex(argv[i]);
+    } else if (strcmp(arg,"-m")==0) {
+      if (i==argc-1) {
+        fatal("argument missing for -m");
+      }
+      ++i;
+      d->mem_base = str_to_int_maybe_hex(argv[i]);
     } else if (strcmp(arg,"-n")==0) {
       if (i==argc-1) {
-        fatal("argumnet missing for -n");
+        fatal("argument missing for -n");
       }
       ++i;
       char* name = argv[i];
@@ -499,6 +507,66 @@
   save_dir(fd,offset,size,swap_endianness,dir);
 }
 
+static void fis_checksum(const char* device, int offset, int size, bool swap_endianness,
+                       int argc, char* argv[])
+{
+  char* name = NULL;
+  char* filename = NULL;
+
+  for (int i=0; i<argc; ++i) {
+    char* arg=argv[i];
+    if (strcmp(arg,"-f")==0) {
+      if (i==argc-1) {
+        fatal("argument missing for -f");
+      }
+      ++i;
+      filename = argv[i];
+    } else if (strcmp(arg,"-n")==0) {
+      if (i==argc-1) {
+        fatal("argument missing for -n");
+      }
+      ++i;
+      name = argv[i];
+      if (strlen(name)>=16) {
+        fatal("name too long, max 16 chars including terminating null");
+      }
+    } else {
+      fputs("Unrecognised option '",stderr);
+      fputs(arg,stderr);
+      fputs("'\n",stderr);
+      exit(1);
+    }
+  }
+
+  if (name == NULL || filename == NULL)
+    fatal("filename and partition name must be specified");
+
+  int fd;
+  char *buf;
+  struct stat stat_buf;
+  uint32_t crc;
+
+  CHECK(fd=open(filename,O_RDONLY),-1);
+  CHECK(stat(filename, &stat_buf),-1);
+  buf = (char*)chk_malloc(stat_buf.st_size);
+  CHECK(read(fd,buf,stat_buf.st_size),-1);
+  crc = crc32(buf,stat_buf.st_size);
+  close(fd);
+  free(buf);
+
+  CHECK(fd=open(device,O_RDWR),-1);
+  dir_t dir;
+  load_dir(fd,offset,&size,swap_endianness,&dir);
+  iter_t after = NULL;
+  FOR_EACH_DIR_ENTRY(dir,i) {
+    if (strcmp(get(i)->name, name) == 0) {
+      get(i)->file_cksum = crc;
+      get(i)->data_length = stat_buf.st_size;
+      break;
+    }
+  }
+  save_dir(fd,offset,size,swap_endianness,dir);
+}
 
 static void fis_delete(const char* device, int offset, int size, bool swap_endianness,
                        char* name)
@@ -526,8 +594,9 @@
   fputs("Usage:\n"
         "  fis [options] list\n"
         "  fis [options] init\n"
-        "  fis [options] create -f address -l size -n name\n"
+        "  fis [options] create -f address -l size -n name [-m memory_address]\n"
         "  fis [options] delete name\n"
+        "  fis [options] checksum -f filename -n name\n"
         "Options:\n"
         "  -d device    specify /dev/mtd* device containing directory\n"
         "  -o offset    specify offset into device of start of directory\n"
@@ -597,9 +666,14 @@
         fis_create(device,offset,size,swap_endianness,
                    argc-i-1,&argv[i+1]);
         break;
+      } else if (strcmp(arg,"checksum")==0) {
+        check_dev(device);
+        fis_checksum(device,offset,size,swap_endianness,
+                   argc-i-1,&argv[i+1]);
+        break;
       } else if (strcmp(arg,"delete")==0) {
         if (i!=argc-2) {
-          fatal("Exactly one argumnet required after 'delete'");
+          fatal("Exactly one argument required after 'delete'");
         }
         ++i;
         char* name = argv[i];
