firmware problem

Patrick Higgins phiggins at
Wed Jul 5 14:18:27 EDT 2000

This is pretty much a big pain in the neck that I also ran into a while
ago (can't remember the cause, though).  Anyway, the only way I found to
recover the flash was to erase the entire thing.  The bad block table
(made when the flash is manufactured) could probably be saved somewhere,
but I never coded it up because I don't know the location or format.  
Anyway, you can use the attached utility (a modified version of
util/erase.c which erases all the flash, not just a single block).  We
should definitely look into adding support for saving the bad block table,


On Tue, 4 Jul 2000, Rodrigo Moya wrote:

> Hi all!
> I am trying to put the firmware in the DOC, using the following command:
> dformat /win:d000 /s:doc123.exb
> and I get the following error message:
> Format failed, Medium not large enough
> Any idea on what's happening?
> Thanks
> To unsubscribe, send "unsubscribe mtd" to majordomo at

-------------- next part --------------
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/mount.h>

#include <linux/mtd/mtd.h>

int main(int argc,char *argv[])
  mtd_info_t meminfo;
  int Fd;
  unsigned long Length;
  if (1 >= argc)
      fprintf(stderr,"You must specify a device\n");
      return 16;
  // Open and size the device
  if ((Fd = open(argv[1],O_RDWR)) < 0)
      fprintf(stderr,"File open error\n");
      return 8;
   if (ioctl(Fd,MEMGETINFO,&meminfo) == 0)
       erase_info_t erase;
       printf("Device information:\n");
       printf("Name: %s\n",;
       printf("Type: %d\n", meminfo.type);
       printf("Flags: %d\n", meminfo.flags);
       printf("Size: %d\n", meminfo.size);
       printf("Erase size: %d\n", meminfo.erasesize);
       printf("OOB block: %d\n", meminfo.oobblock);
       printf("OOB size: %d\n", meminfo.oobsize);
       printf("ECC type: %d\n", meminfo.ecctype);
       printf("ECC size: %d\n", meminfo.eccsize);
       erase.length = meminfo.erasesize;
       erase.start = 0;
       printf("Erasing...", erase.start);
       while (erase.start < meminfo.size)
	   if (ioctl(Fd,MEMERASE,&erase) != 0)
	       perror("\nMTD Erase failure");
	       return 8;
	   erase.start += erase.length;
   return 0;

More information about the linux-mtd mailing list