Problem with mtd-snapshot-20031211.tar

thomaspang at shaw.ca thomaspang at shaw.ca
Thu Dec 18 15:10:01 EST 2003


I have problems with the latest MTD snapshot running on Linux kernel 2.4.22.

I have integrated the MTD snapshot (which is supposed to give better JFFS2
performance) dated 2003-12-11 into my linux kernel 2.4.22.  I modify my
kernel as per mtd-jffs-HOWTO.txt and cross-compile it for ARM9 processor.
Primary changes to the linux kernel include:

arch/arm/kernel/setup.c - calls physmap_configure and physmap_set_partitions
drivers/mtd/maps - to use ioremap_nocache() instead as my ARM9 processor
                   has cache in it

I download the boot image into my target system and successfully boot up
the board.  I also download the file systems, one is CRAMFS, another one
is JFFS2.

I am using the latest mkfs.jffs2 to create my JFFS2 file system as shown
below:

mkfs.jffs2 -p -e 0x10000 -c 12 -b -r rootfs -o jffsImage

where rootfs is my file system, and jffsImage is the corresponding JFFS2 
image.

Problem 1 (Fail to mount JFFS2 file system)
===========================================

I seem to be able to mount the JFFS2 file system but when I access the 
JFFS2 file system, the system complains "Chip not ready after erase 
suspended: status = 0x1985". Any idea?


Below are messages from the system:

...
physmap flash device: 8000000 at 0
phys_mapped_flash: Found 1 x16 devices at 0x0 in 16-bit mode
phys_mapped_flash: Found 1 x16 devices at 0x2000000 in 16-bit mode
... 
number of CFI chips: 2
...
Using physmap partition definition
Creating 4 MTD partitions on "phys_mapped_flash":
0x00000000-0x00800000 : "Physically mapped flash"
mtd: Giving out device 0 to Physically mapped flash
0x00000000-0x00400000 : "boot"
mtd: Giving out device 1 to boot
0x00400000-0x00500000 : "root"
mtd: Giving out device 2 to root
0x00500000-0x00800000 : "fs"
mtd: Giving out device 3 to fs


# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00800000 00010000 "Physically mapped flash"
mtd1: 00400000 00010000 "boot"
mtd2: 00100000 00010000 "root"
mtd3: 00300000 00010000 "fs"


# mount -t jffs2 /dev/mtdblock3 /mnt
mtdblock_open
ok
# ls
bin      etc      linuxrc  proc     tmp      var
dev      lib      mnt      sbin     usr
# cd mnt
# ls
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x001901f8 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 2 returned -5
ls: ./bin: Input/output error
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x000586b4 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 3 returned -5
ls: ./dev: Input/output error
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x00058af0 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 4 returned -5
ls: ./etc: Input/output error
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x00000188 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 5 returned -5
ls: ./lib: Input/output error
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x00000358 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 9 returned -5
ls: ./tmp: Input/output error
Chip not ready after erase suspended: status = 0x1985
error -5 reading node at 0x0005a660 in get_inode_nodes()
jffs2_get_inode_nodes() for ino 11 returned -5

... (I have to press ctrl-C to stop it.)

# 

Problem 2 (Writing to JFFS2 file system still slow)
===================================================

Try different way of setting up the JFFS2 file system.
Instead of downloading the file image directly into the MTD partition,
I follow the steps shown in mtd-jffs-HOWTO.txt and have the following
observations:

(1) ereaseall fails

    # eraseall --help
    Usage: eraseall [OPTION] MTD_DEVICE
    Erases all of the specified MTD device.

      -j, --jffs2    format the device for jffs2
      -q, --quiet    don't display progress messages
          --silent   same as --quiet
          --help     display this help and exit
          --version  output version information and exit

    # eraseall -j /dev/mtdblock3
    mtdblock_open
    ok
    eraseall: /dev/mtdblock3: unable to get mtdblock_release
    okD device info

(2) I therefore use erase command.  (seems okay)

    # erase /dev/mtdblock3 0 0x300000
    mtdblock_open
    ok
    Erase Total 3145728 Units
    mtdblock_release
    ok

(3) Copy the file image to MTD device  (seems okay, but why mtdblock_release?)
    # cp /tmp/jffsImage /dev/mtdblock3
    mtdblock_open
    ok
    mtdblock_release
    ok
    #

(4) Mounting JFFS2 file system to /mnt (seems ok)

    # mount -t jffs2 /dev/mtdblock3 /mnt
    mtdblock_open
    ok

(5) Copy a file but it takes long!

    cd /mnt
    cp bin/myfile .

    myfile is of the size of about 400k.  It takes 40 seconds!

(6) Remove the file and try again but fails!

    rm myfile
    cp bin/myfile .
    Chip not ready after erase suspended: status = 0xffff
    Chip not ready after erase suspended: status = 0xffff
    Write of 2021 bytes at 0x00268f74 failed. returned -5, retlen 0
    Not marking the space at 0x00268f74 as dirty because the flash driver 
    returned retlen zero
    Chip not ready after erase suspended: status = 0x1985
    Error reading node from 0x00268828: -5
    cp: write: Input/output error



Any helps would be much appreciated.

Thanks.

Thomas






More information about the linux-mtd mailing list