I am trying to create a production image that can be flashed with flash programmer in factory. I am using Micron 51MB nand flash.
I am finding issues with the approaches I have taken so far.
1) Boot a development board with all the partitions
i.e
/dev/mtd0--> xloader
/dev/mtd1 -> uboot
/dev->mtd2 -> kernel
/dev/mtd3> root file system
/dev/mtd4 -> user application
now, I used nanddump -nof xloader.bin /dev/mtd0
nanddump -nof uboot.bin /dev/mtd1
nanddump -nof kernel.bin /dev/mtd2
nanddump -nof rootfs.bin /dev/mtd3
nanddump -nof apps.bin /dev/mtd4
cat /dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd3 /dev/mtd4 > golden_flash
when I flash this golden_flash on an empty flash on which I first run u-boot from RAM and then
tftp golden_flash
nand erase all
nand write 0x82000000 golden_flash
it wouldn't work.
Upon boot, I get
mtd->read(0x1fc38 bytes from 0x60a03c8) returned ECC error
mtd->read(0xa7b0 bytes from 0x60b5850) returned ECC error
Empty flash at 0x060b584c ends at 0x060b6000
jffs2_scan_eraseblock(): Node at 0x060b618c {0x1985, 0xe022, 0x000000a7) has invalid CRC 0x5c3d15cb (calculated 0x5b9110fd)
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6190: 0x00a7 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6194: 0x15cb instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x060b6198: 0x2e5b instead
mtd->read(0x59c bytes from 0x13eba64) returned ECC error
mtd->read(0x44 bytes from 0x13ec800) returned ECC error
mtd->read(0x7bc bytes from 0x13ec844) returned ECC error
mtd->read(0x558 bytes from 0x13ebaa8) returned ECC error
mtd->read(0x44 bytes from 0x13ec844) returned ECC error
mtd->read(0x514 bytes from 0x13ebaec) returned ECC error
mtd->read(0x44 bytes from 0x13ec888) returned ECC error
I flashed the image from u-boot
Is there any better way to create production image or correct way to create production image for NAND flash?
As a previous commenter stated, you're going to have issues with bad blocks since bad block counts and locations are not consistent between devices. But if you skip bad blocks on the dumps, any bad blocks in mtd0-mtd3 will result in partition boundary mismatch. The nand write command probably does not utilize knowledge of the partition layout, so bad blocks in the first four partitions of the device in manufacturing will also result in a misalignment. I think the best option is to flash the five partitions separately.
User contributions licensed under CC BY-SA 3.0