(Created page with "Dear Fellow Marketer, If you're serious about SEO, and aren't using Wiki Backlinks in your current offsite linking scheme, you're most likely miles behind your competition. W...") |
(Add link to UBI FAQ) |
||
(6 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | |||
− | + | == Preamble == | |
− | + | The Seagate GoFlex Home is fitted with a [http://www.semicon.toshiba.co.jp/openb2b/websearch/productDetails.jsp?partKey=TC58NVG1S3ETA00 Toshiba TC58NVG1S3ETA00] 256Mbyte NAND flash. | |
− | + | ||
− | + | During boot the NAND driver detects it as: | |
− | + | <PRE> | |
+ | NAND device: Manufacturer ID: 0x98, Chip ID: 0xda (Toshiba NAND 256MiB 3,3V 8-bit) | ||
+ | </PRE> | ||
− | + | When loading a new kernel or a new UBI image we get the [http://www.linux-mtd.infradead.org/faq/ubi.html#L_ecc_error following error which suggests] either a buggy NAND driver, a problem with ECC or a subpage problem. | |
− | + | <PRE> | |
+ | uncorrectable error : | ||
+ | uncorrectable error : | ||
+ | uncorrectable error : | ||
+ | uncorrectable error : | ||
+ | UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes | ||
+ | </PRE> | ||
− | + | Below are the results of various MTD Tests. | |
− | + | == MTD Nand ECC Test == | |
− | + | <PRE> | |
− | + | [root@fedora-arm tests]# insmod mtd_nandecctest.ko | |
+ | mtd_nandecctest: ok - nand-ecc-256 | ||
+ | mtd_nandecctest: ok - nand-ecc-512 | ||
+ | </PRE> | ||
− | + | The ECC checks out . . | |
− | + | == MTD PageTest == | |
− | + | <PRE> | |
+ | [root@fedora-arm tests]# insmod mtd_pagetest.ko dev=2 | ||
− | |||
− | |||
− | |||
− | |||
− | + | ================================================= | |
+ | mtd_pagetest: MTD device: 2 | ||
+ | mtd_pagetest: MTD device size 261095424, eraseblock size 131072, page size 2048, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 | ||
+ | mtd_pagetest: scanning for bad eraseblocks | ||
+ | mtd_pagetest: scanned 1992 eraseblocks, 0 are bad | ||
+ | mtd_pagetest: erasing whole device | ||
+ | mtd_pagetest: erased 1992 eraseblocks | ||
+ | mtd_pagetest: writing whole device | ||
+ | mtd_pagetest: written up to eraseblock 0 | ||
+ | mtd_pagetest: written up to eraseblock 256 | ||
+ | mtd_pagetest: written up to eraseblock 512 | ||
+ | mtd_pagetest: written up to eraseblock 768 | ||
+ | mtd_pagetest: written up to eraseblock 1024 | ||
+ | mtd_pagetest: written up to eraseblock 1280 | ||
+ | mtd_pagetest: written up to eraseblock 1536 | ||
+ | mtd_pagetest: written up to eraseblock 1792 | ||
+ | mtd_pagetest: written 1992 eraseblocks | ||
+ | mtd_pagetest: verifying all eraseblocks | ||
+ | mtd_pagetest: verified up to eraseblock 0 | ||
+ | mtd_pagetest: verified up to eraseblock 256 | ||
+ | mtd_pagetest: verified up to eraseblock 512 | ||
+ | mtd_pagetest: verified up to eraseblock 768 | ||
+ | mtd_pagetest: verified up to eraseblock 1024 | ||
+ | mtd_pagetest: verified up to eraseblock 1280 | ||
+ | mtd_pagetest: verified up to eraseblock 1536 | ||
+ | mtd_pagetest: verified up to eraseblock 1792 | ||
+ | mtd_pagetest: verified 1992 eraseblocks | ||
+ | mtd_pagetest: crosstest | ||
+ | mtd_pagetest: reading page at 0x0 | ||
+ | mtd_pagetest: reading page at 0xf8ff800 | ||
+ | mtd_pagetest: reading page at 0x0 | ||
+ | mtd_pagetest: verifying pages read at 0x0 match | ||
+ | mtd_pagetest: crosstest ok | ||
+ | mtd_pagetest: erasecrosstest | ||
+ | mtd_pagetest: erasing block 0 | ||
+ | mtd_pagetest: writing 1st page of block 0 | ||
+ | mtd_pagetest: reading 1st page of block 0 | ||
+ | mtd_pagetest: verifying 1st page of block 0 | ||
+ | mtd_pagetest: erasing block 0 | ||
+ | mtd_pagetest: writing 1st page of block 0 | ||
+ | mtd_pagetest: erasing block 1991 | ||
+ | mtd_pagetest: reading 1st page of block 0 | ||
+ | mtd_pagetest: verifying 1st page of block 0 | ||
+ | mtd_pagetest: erasecrosstest ok | ||
+ | mtd_pagetest: erasetest | ||
+ | mtd_pagetest: erasing block 0 | ||
+ | mtd_pagetest: writing 1st page of block 0 | ||
+ | mtd_pagetest: erasing block 0 | ||
+ | mtd_pagetest: reading 1st page of block 0 | ||
+ | mtd_pagetest: verifying 1st page of block 0 is all 0xff | ||
+ | mtd_pagetest: erasetest ok | ||
+ | mtd_pagetest: finished with 0 errors | ||
+ | ================================================= | ||
+ | </PRE> | ||
− | + | No problems with the page test ... | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | == MTD Sub Page Test == | |
− | + | <PRE> | |
+ | [root@fedora-arm tests]# insmod mtd_subpagetest.ko dev=2 | ||
− | + | ================================================= | |
+ | mtd_subpagetest: MTD device: 2 | ||
+ | mtd_subpagetest: MTD device size 261095424, eraseblock size 131072, page size 2048, subpage size 512, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 | ||
+ | mtd_subpagetest: scanning for bad eraseblocks | ||
+ | mtd_subpagetest: scanned 1992 eraseblocks, 0 are bad | ||
+ | mtd_subpagetest: erasing whole device | ||
+ | mtd_subpagetest: erased 1992 eraseblocks | ||
+ | mtd_subpagetest: writing whole device | ||
+ | mtd_subpagetest: written up to eraseblock 0 | ||
+ | mtd_subpagetest: written up to eraseblock 256 | ||
+ | mtd_subpagetest: written up to eraseblock 512 | ||
+ | mtd_subpagetest: written up to eraseblock 768 | ||
+ | mtd_subpagetest: written up to eraseblock 1024 | ||
+ | mtd_subpagetest: written up to eraseblock 1280 | ||
+ | mtd_subpagetest: written up to eraseblock 1536 | ||
+ | mtd_subpagetest: written up to eraseblock 1792 | ||
+ | mtd_subpagetest: written 1992 eraseblocks | ||
+ | mtd_subpagetest: verifying all eraseblocks | ||
+ | uncorrectable error : | ||
+ | mtd_subpagetest: error: read failed at 0x200 | ||
+ | mtd_subpagetest: error -74 occurred | ||
+ | ================================================= | ||
+ | insmod: error inserting 'mtd_subpagetest.ko': -1 Bad message | ||
+ | </PRE> | ||
− | ( | + | Bingo. Looks like we have a subpage problem. This is probably why the GoFlex Home boots from the UBI using the ubi.mtd=2,2048 kernel parameter. This sets the VID header to an offset of 2048 bytes (same than the page size) and avoids subpages. |
− | + | ||
− | + | ||
− | + | ||
− | and | + | |
+ | == MTD Read Test == | ||
− | + | <PRE> | |
+ | [root@fedora-arm tests]# insmod mtd_readtest.ko dev=2 | ||
− | + | ================================================= | |
− | + | mtd_readtest: MTD device: 2 | |
− | + | mtd_readtest: MTD device size 261095424, eraseblock size 131072, page size 2048, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 | |
− | + | mtd_readtest: scanning for bad eraseblocks | |
− | + | mtd_readtest: scanned 1992 eraseblocks, 0 are bad | |
− | + | mtd_readtest: testing page read | |
− | + | mtd_readtest: finished | |
− | + | ================================================= | |
− | + | </PRE> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
The Seagate GoFlex Home is fitted with a Toshiba TC58NVG1S3ETA00 256Mbyte NAND flash.
During boot the NAND driver detects it as:
NAND device: Manufacturer ID: 0x98, Chip ID: 0xda (Toshiba NAND 256MiB 3,3V 8-bit)
When loading a new kernel or a new UBI image we get the following error which suggests either a buggy NAND driver, a problem with ECC or a subpage problem.
uncorrectable error : uncorrectable error : uncorrectable error : uncorrectable error : UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes
Below are the results of various MTD Tests.
[root@fedora-arm tests]# insmod mtd_nandecctest.ko mtd_nandecctest: ok - nand-ecc-256 mtd_nandecctest: ok - nand-ecc-512
The ECC checks out . .
[root@fedora-arm tests]# insmod mtd_pagetest.ko dev=2 ================================================= mtd_pagetest: MTD device: 2 mtd_pagetest: MTD device size 261095424, eraseblock size 131072, page size 2048, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 mtd_pagetest: scanning for bad eraseblocks mtd_pagetest: scanned 1992 eraseblocks, 0 are bad mtd_pagetest: erasing whole device mtd_pagetest: erased 1992 eraseblocks mtd_pagetest: writing whole device mtd_pagetest: written up to eraseblock 0 mtd_pagetest: written up to eraseblock 256 mtd_pagetest: written up to eraseblock 512 mtd_pagetest: written up to eraseblock 768 mtd_pagetest: written up to eraseblock 1024 mtd_pagetest: written up to eraseblock 1280 mtd_pagetest: written up to eraseblock 1536 mtd_pagetest: written up to eraseblock 1792 mtd_pagetest: written 1992 eraseblocks mtd_pagetest: verifying all eraseblocks mtd_pagetest: verified up to eraseblock 0 mtd_pagetest: verified up to eraseblock 256 mtd_pagetest: verified up to eraseblock 512 mtd_pagetest: verified up to eraseblock 768 mtd_pagetest: verified up to eraseblock 1024 mtd_pagetest: verified up to eraseblock 1280 mtd_pagetest: verified up to eraseblock 1536 mtd_pagetest: verified up to eraseblock 1792 mtd_pagetest: verified 1992 eraseblocks mtd_pagetest: crosstest mtd_pagetest: reading page at 0x0 mtd_pagetest: reading page at 0xf8ff800 mtd_pagetest: reading page at 0x0 mtd_pagetest: verifying pages read at 0x0 match mtd_pagetest: crosstest ok mtd_pagetest: erasecrosstest mtd_pagetest: erasing block 0 mtd_pagetest: writing 1st page of block 0 mtd_pagetest: reading 1st page of block 0 mtd_pagetest: verifying 1st page of block 0 mtd_pagetest: erasing block 0 mtd_pagetest: writing 1st page of block 0 mtd_pagetest: erasing block 1991 mtd_pagetest: reading 1st page of block 0 mtd_pagetest: verifying 1st page of block 0 mtd_pagetest: erasecrosstest ok mtd_pagetest: erasetest mtd_pagetest: erasing block 0 mtd_pagetest: writing 1st page of block 0 mtd_pagetest: erasing block 0 mtd_pagetest: reading 1st page of block 0 mtd_pagetest: verifying 1st page of block 0 is all 0xff mtd_pagetest: erasetest ok mtd_pagetest: finished with 0 errors =================================================
No problems with the page test ...
[root@fedora-arm tests]# insmod mtd_subpagetest.ko dev=2 ================================================= mtd_subpagetest: MTD device: 2 mtd_subpagetest: MTD device size 261095424, eraseblock size 131072, page size 2048, subpage size 512, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 mtd_subpagetest: scanning for bad eraseblocks mtd_subpagetest: scanned 1992 eraseblocks, 0 are bad mtd_subpagetest: erasing whole device mtd_subpagetest: erased 1992 eraseblocks mtd_subpagetest: writing whole device mtd_subpagetest: written up to eraseblock 0 mtd_subpagetest: written up to eraseblock 256 mtd_subpagetest: written up to eraseblock 512 mtd_subpagetest: written up to eraseblock 768 mtd_subpagetest: written up to eraseblock 1024 mtd_subpagetest: written up to eraseblock 1280 mtd_subpagetest: written up to eraseblock 1536 mtd_subpagetest: written up to eraseblock 1792 mtd_subpagetest: written 1992 eraseblocks mtd_subpagetest: verifying all eraseblocks uncorrectable error : mtd_subpagetest: error: read failed at 0x200 mtd_subpagetest: error -74 occurred ================================================= insmod: error inserting 'mtd_subpagetest.ko': -1 Bad message
Bingo. Looks like we have a subpage problem. This is probably why the GoFlex Home boots from the UBI using the ubi.mtd=2,2048 kernel parameter. This sets the VID header to an offset of 2048 bytes (same than the page size) and avoids subpages.
[root@fedora-arm tests]# insmod mtd_readtest.ko dev=2 ================================================= mtd_readtest: MTD device: 2 mtd_readtest: MTD device size 261095424, eraseblock size 131072, page size 2048, count of eraseblocks 1992, pages per eraseblock 64, OOB size 64 mtd_readtest: scanning for bad eraseblocks mtd_readtest: scanned 1992 eraseblocks, 0 are bad mtd_readtest: testing page read mtd_readtest: finished =================================================