public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
From: Li Yang <leoli@motorola.com>
Cc: linux-mtd@lists.infradead.org
Subject: Re: jffs2+mtd+big endian problem
Date: 19 Jan 2004 18:58:01 +0800	[thread overview]
Message-ID: <1074509881.14564.3.camel@Gundam> (raw)
In-Reply-To: <1074503876.14499.40.camel@imladris.demon.co.uk>

On Mon, 2004-01-19 at 17:17, David Woodhouse wrote:
> On Mon, 2004-01-19 at 16:43 +0800, Li Yang-r58472 wrote:
> > Hi,
> >
> > I'm doing a JFFS2 port to a PowerPC target board.  I have several
> > questions while porting.
> >
> > 1. Which kind of endian should I use in JFFS2?  Mkfs.jffs2 (older
> > version, I have tried the new binary on JFFS2 website, the
big-endian
> > option breaks) can generate images of the two endian types.
> 
> There are two options. First, you can try a fixed version of
mkfs.jffs2
> which gets the byte-swapping right. I've uploaded the current CVS
> version, 1.39, to sources.redhat.com now -- I think that should be OK.
> 
> Second, you could use the current CVS JFFS2 code (you should probably
> use that anyway since it has a lot of optimisations missing from older
> kernels), and make it use little-endian images by defining
> JFFS2_LITTLE_ENDIAN instead of JFFS2_NATIVE_ENDIAN at about line 90 of
> include/linux/jffs2.h

I have some problem accessing CVS from the damned corporate network. 
I'm a poor guy living on binaries and snapshots.  :(  Thanks for you
update.
I'm using JFFS2 code from kernel-2.4.22.  Seems it's pretty old code in
the kernel.  Could you kindly give me a recent snapshot or direct me to
a link to download it?

> 
> > 2. I added a new map file in driver/mtd/maps directory.  Which
> > read/write/memcpy operation should I use?  __raw_readw() or readw()?
> > Or Inw()?  They determined whether to swap bytes.
> 
> That depends on how your hardware is wired up. It's probably best not
to
> try this with JFFS2, which introduces its own endianness complexity...
> try it with raw read/write (and the erase ioctl of course) on the
> /dev/mtd devices. Read and write data in units of 1, 2 and 4 bytes at
> various offsets and see what you get.
> 
> > I have tried several cases.  When I use little-endian fs and
> > __raw_read(), the JFFS2 mount got error: jffs2_scan_eraseblock():
> > Magic bitmask 0x1985 not found at 0x00000000: 0x8519 instead.
> >
> > However, after I change to use big-endian fs, mount can be
successful.
> > Create new file on JFFS2 got error: Node totlen on flash
(0x44000000)
> > != totlen in node ref (0x00000044).  Seems data written to flash are
> > 32-bit byte-swaped.
> 
> That's odd. If you look in the image file you downloaded to the board,
> is it telling the truth? Do you actually see (00,00,00,44) or
> (44,00,00,00). Can you make the actual image available to me to play
> with, and I'll tell you whether it's a valid image and your board
> mapping is at fault, or whether it's an invalid image.

The image generated by mkfs.jffs2 with -b seems ok, but it's not all
right after I done some operations on the target.  In the bottom is the
log of these operations.

Yes, I have examined a section which is formatted by the target board. 
The first several bytes of the section are:  

fe3c0000: 03208519 0c000000 98dc60f0 ffffffff    . ........`.....
fe3c0010: ffffffff ffffffff ffffffff ffffffff    ................

They are all 32-bit swapped.  I traced into the JFFS2 code, and know it
use mtd->write to write data into flash.  Which function is it turned
out to be finally?  Is it the write defined in the drivers/mtd/maps/
files?  I used __raw_write*() at the very beginning, it shouldn't be
like this.

> 
> > Has anyone here done JFFS2 on Powerpc Big-endian system?  What are
> > your options?
> 
> Mostly people using JFFS2 on PPC are using it in big-endian mode, I
> think.
> 
> --
> dwmw2

Log of the operations: 

# mount -t jffs2 /dev/mtdblock1 /mnt
mtdblock_open
ok
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x003c0000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x003c0004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x003c0008:
0x98dc instead
JFFS2: Erase block at 0x003c0000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00400000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00400004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00400008:
0x98dc instead
JFFS2: Erase block at 0x00400000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00440000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00440004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00440008:
0x98dc instead
JFFS2: Erase block at 0x00440000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00480000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00480004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00480008:
0x98dc instead
JFFS2: Erase block at 0x00480000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004c0000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004c0004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x004c0008:
0x98dc instead
JFFS2: Erase block at 0x004c0000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00500000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00500004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00500008:
0x98dc instead
JFFS2: Erase block at 0x00500000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00540000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00540004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00540008:
0x98dc instead
JFFS2: Erase block at 0x00540000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00580000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00580004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00580008:
0x98dc instead
JFFS2: Erase block at 0x00580000 is not formatted. It will be erased
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005c0000:
0x0320 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005c0004:
0x0c00 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005c0008:
0x98dc instead
JFFS2: Erase block at 0x005c0000 is not formatted. It will be erased
# cd /mnt
# ls
bin      dev      home     mnt      prj_tmp  root     tmp      var
boot     etc      lib      opt      proc     sbin     usr
# touch abc
Node totlen on flash (0x44000000) != totlen in node ref (0x00000044)
# ls
abc      boot     etc      lib      opt      proc     sbin     usr
bin      dev      home     mnt      prj_tmp  root     tmp      var
# echo "jhskjfsldfjdklsf" > abc
Node totlen on flash (0x44000000) != totlen in node ref (0x00000044)
Node totlen on flash (0x44000000) != totlen in node ref (0x00000044)

  parent reply	other threads:[~2004-01-19 10:58 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-19  8:43 jffs2+mtd+big endian problem Li Yang-r58472
2004-01-19  9:17 ` David Woodhouse
2004-01-19  9:48   ` Joakim Tjernlund
2004-01-19 10:58   ` Li Yang [this message]
2004-01-19 11:04     ` David Woodhouse
2004-01-20  4:20       ` Li Yang
2004-01-20  7:32         ` David Woodhouse
2004-02-04  8:11           ` Li Yang
2004-02-05  3:07           ` Li Yang
2004-02-05  7:00             ` David Woodhouse
2004-02-05  9:02               ` Li Yang
2004-02-05  9:27                 ` David Woodhouse
2004-02-05  9:59                   ` Li Yang

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=1074509881.14564.3.camel@Gundam \
    --to=leoli@motorola.com \
    --cc=linux-mtd@lists.infradead.org \
    /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