From: Weiguang Shi <wgshizz@yahoo.com>
To: Gary Thomas <gary@mlbassoc.com>
Cc: ecos-discuss <ecos-discuss@ecos.sourceware.org>
Subject: Re: AW: [ECOS] cat zImage >/dev/mtd1 does not work
Date: Tue, 23 Jan 2007 19:34:00 -0000 [thread overview]
Message-ID: <804814.62549.qm@web30410.mail.mud.yahoo.com> (raw)
In-Reply-To: <45B5CA65.1060604@mlbassoc.com>
I have to make it work, old or new ;-) So I've been trying to apply your patch
to 2.6.18 in a way that makes sense in uClinux-2.4.x.
The patch consists three parts and, besides the one I tried, there
are (I patched and diff'ed them)
87a88,91
> if (buf[i].name[0] == 0xff) {
> i = numslots;
> break;
> }
and
127c131
< continue;
---
> break;
It appears to me that 0xff is significant in both parts. What does it mean?
I haven't been able to figure out how either will enable writing.
As my node starts up, I saw in the sequence
0x003e0000-0x003ff000 : "FIS directory"
mtd: partition "FIS directory" doesn't end on an erase block -- force read-only
0x003ff000-0x00400000 : "RedBoot config"
mtd: partition "RedBoot config" doesn't start on an erase block boundary -- force
read-only
can I remove the code that forced read-only (in mtdpart.c) at start up as an alternative to
applying your patch?
Thanks!
Wei
In addition, I found this piece of code in redboot.c confusing.
#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;
}
That is, if CONFIG_MTD_REDBOOT_PARTS_READONLY is defined, the partitions, "RedBoot",
"RedBoot config", and "FIS directory", are set writeable! Can you shed some light?
> image for the FIS partition back to /dev/mtd4
> > I still get
> >
> > cat: Write Error: Read-only file system
>
> You missed the part of the patch that allows the FIS directory to be
> writable even if you have combined FIS & FCONFIG. I don't have such an
> old system, so you'll need to figure out how to get that code in.
>
> > --- 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/
>
>
> --
> ------------------------------------------------------------
> Gary Thomas | Consulting for the
> MLB Associates | Embedded world
> ------------------------------------------------------------
>
> --
> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
>
>
____________________________________________________________________________________
Do you Yahoo!?
Everyone is raving about the all-new Yahoo! Mail beta.
http://new.mail.yahoo.com
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
next prev parent reply other threads:[~2007-01-23 19:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-19 7:48 Neundorf, Alexander
2007-01-19 9:00 ` [ECOS] Ecos/redboot on Xscale pxa270 tejas pawaskar
2007-01-19 16:50 ` AW: [ECOS] cat zImage >/dev/mtd1 does not work Weiguang Shi
2007-01-19 16:53 ` Andrew Lunn
2007-01-19 17:50 ` Gary Thomas
2007-01-19 18:08 ` Weiguang Shi
2007-01-19 18:18 ` Gary Thomas
2007-01-19 18:28 ` Weiguang Shi
2007-01-20 2:00 ` Weiguang Shi
2007-01-20 13:46 ` Gary Thomas
2007-01-23 2:08 ` Weiguang Shi
2007-01-23 8:42 ` Gary Thomas
2007-01-23 19:34 ` Weiguang Shi [this message]
2007-01-23 20:11 ` Gary Thomas
2007-01-28 21:26 ` Weiguang Shi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=804814.62549.qm@web30410.mail.mud.yahoo.com \
--to=wgshizz@yahoo.com \
--cc=ecos-discuss@ecos.sourceware.org \
--cc=gary@mlbassoc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).