This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: AW: cat zImage >/dev/mtd1 does not work


Thanks again.

My system is 2.4.x under snapgear-3.4.0 and I applied only the following part of the patch
since this only seems to be relevant.

   #else
                if (!memcmp(names, "FIS directory", 14)) {
                    // Special hack to let directory be read/write
                    if ((fl->img->size & (master->erasesize - 1)) != 0) {
                        parts[i].size = (fl->img->size + (master->erasesize - 1)) &
~(master->erasesize - 1);
                    }
                }


When I tried to cat the modified ram image for the FIS partition back to /dev/mtd4
I still get 
      
    cat: Write Error: Read-only file system

Wei

--- Gary Thomas <gary@mlbassoc.com> wrote:

> Weiguang Shi wrote:
> > Gary,
> > 
> > I'm at the point to flash the modified partition back but can't erase the
> > FIS partition /dev/mtd4
> > 
> >    # cat /proc/mtd
> >    dev:    size   erasesize  name
> >    mtd0: 00080000 00020000 "RedBoot"
> >    mtd1: 00100000 00020000 "kernel"
> >    mtd2: 00200000 00020000 "ramdisk"
> >    mtd3: 00020000 00020000 "kiyon_config"
> >    mtd4: 0001f000 00020000 "FIS directory"
> >    mtd5: 00001000 00020000 "RedBoot config"
> >    # eraseall /dev/mtd4
> >    eraseall: /dev/mtd4: Permission denied
> > 
> > I realized that I may need to "unlock" it but both my attempts to do that
> > in RedBoot and Linux failed. In the former, "fis unlock" worked fine in 
> > Redboot but after Linux boots up I still get the same "Permission denied"
> > error. In linux, my unlock resulted in 
> >         # unlock /dev/mtd4
> >         Could not open mtd device: /dev/mtd4
> >         # unlock /dev/mtd5
> >         Could not open mtd device: /dev/mtd5
> > 
> > Any ideas on how shall I proceed?
> 
> The problem is that if you use combined FIS directory and FCONFIG data
> (which you are based on the map above), then the MTD layer makes both of
> those images read only.  The attached patch can let you override this.
> It's based on the public 2.6.18 kernel.
> 
> Note: you need to be careful doing these changes to your FLASH.  If you
> simply erase the partition, RedBoot will lose everything.  MTD is pretty
> cool and if you simply open /dev/mtd4 read/write, read the current contents,
> update them and then rewrite them, the MTD layer will take care of erasing
> and updating the appropriate portions.
> 
> > --- Gary Thomas <gary@mlbassoc.com> wrote:
> > 
> >> Weiguang Shi wrote:
> >>> That's even better and was the solution that I was looking for.
> >>> The question is how, from the OS, can I update the FIS. Obviously
> >>> I need to know the structure of the "FIS directory" partition and
> >>> find the offset of that checksum and insert a '0' there by 
> >>>    - reading the whole partition into ram, 
> >>>    - changing the bit, erasing the partition on the flash, 
> >>>    - and finally flashing the modified partition in the ram back.
> >>>
> >>> Any suggestions as to where to start?
> >> <redboot/fis.h>
> >>
> >> Also, drivers/mtd has some RedBoot FIS parsing code in it.  You could
> >> look at it for pointers.
> >>
> >>> --- Gary Thomas <gary@mlbassoc.com> wrote:
> >>>
> >>>> Note: you don't really need to change RedBoot.  Just update the
> >>>> FIS [directory] entry for the image you are changing, either with
> >>>> the corrected checksum, or the value 0.  RedBoot ignores the checksum
> >>>> when the stored value is 0.
> 
> -- 
> ------------------------------------------------------------
> Gary Thomas                 |  Consulting for the
> MLB Associates              |    Embedded world
> ------------------------------------------------------------
> > diff -ubNr --exclude=.gitignore linux-2.6.18/drivers/mtd/redboot.c
> /tmp/fc_base/opt/amltd/develop/linuxppc-2.6/drivers/mtd/redboot.c
> --- linux-2.6.18/drivers/mtd/redboot.c	2006-09-19 21:42:06.000000000 -0600
> +++ /tmp/fc_base/opt/amltd/develop/linuxppc-2.6/drivers/mtd/redboot.c	2006-10-24
> 11:59:32.000000000 -0600
> @@ -85,6 +85,10 @@
>  
>  	numslots = (master->erasesize / sizeof(struct fis_image_desc));
>  	for (i = 0; i < numslots; i++) {
> +                if (buf[i].name[0] == 0xff) {
> +                        i = numslots;
> +                        break;
> +                }
>  		if (!memcmp(buf[i].name, "FIS directory", 14)) {
>  			/* This is apparently the FIS directory entry for the
>  			 * FIS directory itself.  The FIS directory size is
> @@ -124,7 +128,7 @@
>  		struct fis_list *new_fl, **prev;
>  
>  		if (buf[i].name[0] == 0xff)
> -			continue;
> +                        break;
>  		if (!redboot_checksum(&buf[i]))
>  			break;
>  
> @@ -196,14 +200,22 @@
>  		parts[i].size = fl->img->size;
>  		parts[i].offset = fl->img->flash_base;
>  		parts[i].name = names;
> -
>  		strcpy(names, fl->img->name);
> +
>  #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY
>  		if (!memcmp(names, "RedBoot", 8) ||
>  				!memcmp(names, "RedBoot config", 15) ||
>  				!memcmp(names, "FIS directory", 14)) {
>  			parts[i].mask_flags = MTD_WRITEABLE;
>  		}
> +#else
> +		if (!memcmp(names, "FIS directory", 14)) {
> +                    // Special hack to let directory be read/write
> +                    if ((fl->img->size & (master->erasesize - 1)) != 0) {
> +                        parts[i].size = (fl->img->size + (master->erasesize - 1)) &
> ~(master->erasesize - 1);
> +                    }
> +                }
> +
>  #endif
>  		names += strlen(names)+1;
>  
> 
> > -- 
> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



 
____________________________________________________________________________________
It's here! Your new message!  
Get new email alerts with the free Yahoo! Toolbar.
http://tools.search.yahoo.com/toolbar/features/mail/

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]