Yaffs文件系统最小可用分区

    技术2022-05-11  107

    测试目的        目前版本的大板机顶盒上有2M的norflash和64M的nand flash。寻找在nand flash上可用的yaffs文件系统最小可用分区的大小。 测试方案        yaffs最小分区测试方案   策略:连续划分两个分区A和B,向A分区写数据,如果B分区被写坏,则说明为A分区        分配的区域太小,不支持,反之说明,A分区当前的大小是支持的。不断减        少A分区的大小,直到不支持(B分区在写A分区时被写坏)。   注意:        1、NAND flash每次擦除的大小为16K,所以A和B分区每次分配的大小必须是16K        的整数倍。        2、为保证B分区被破坏时被及时发现,在分区B上的数据要尽量充满该分区,        并检查所有文件(还是被破坏后,mount操作不能成功?)。        3、当前NAND flash分区情况是分为3个区,最后一个(mtd10)未被用到,        测试操作可在该区域进行,这样不破坏mtd8和mtd9,方便以太网访问。   步骤:        1、修改linux-2.4.17_mvl21/drivers/mtd/nand/spia.c:        #define NANDFLASH_TEST_SIZE 512 // 分区大小,修改此值,看是否支持        {                 .name   = "NAND flash partition test A",                 .offset = 32*1024*1024,                 .size   = NANDFLASH_TEST_SIZE*1024     },        {                 .name   = "NAND flash partition test B",                 .offset = 32*1024*1024 + NANDFLASH_TEST_SIZE*1024,                 .size   = 96*1024*1024     }               2、重新编译内核,烧写内核        3、为B分区写入足够数据,尽量不要留有空闲空间        4、为A分区进行写操作        5、检查B分区是否被写坏          重复进行1到5操作,找到当烧写A分区时,B分区也被破坏时NANDFLASH_TEST_SIZE 的值,,若不固定,找到其分布规律。          计划从512K开始测试,并采用类似“二分法查找”的方式,第二次为256K,如果 支持,第三次为256/2,否则为((512+256)/2),以此类推,且数值一定为16的整数倍。 测试步骤:        对A 进行写操作有两类不同情况: 1、 B区有无空闲空间 2、 B区有无mount进来 由此可确定以下4 种不同测试前提条件: 1、 当B区有空闲空间且没有被mount进来时对A进行写操作; 2、 当B区没有空闲空间且没有被mount进来时对A进行写操作; 3、 当B区有空闲空间且已经mount进来时对A进行写操作; 4、 当B区没有空闲空间且已经mount进来时对A进行写操作; 针对每一种前提条件的测试步骤: 1、 格式化A区和B区,记录A区和B区的使用情况; 2、 向A写入足够量数据,记录写入数据大小; 3、 记录A区和B区的使用情况; 查看B区使用情况和以前有什么不同,文件是否被破坏或其它操作是否正常;   以上每个测试步骤的结果在下面的“实际情况”一栏中进行描述。区的空间使用情况采用以下格式记录: Filesystem           1k-blocks      Used  Available  Use% 分别是分区名称、空间大小、已经使用空间大小、剩余空间大小和使用百分率。 “SHELL ”一栏中将记录操作步骤,其中的 nf_test.out 是新建一个文件并向其写入指定大小数据的工具。 测试过程: 分配512K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00080000 00004000 "NAND flash partition test A" mtd11: 01f80000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 mtdblock10 496 96 400 19% mtdblock11 32240 96 32144 0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df umount nf2 ./nf_test.out nf1/a 524288 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区没有文件,空间使用情况没有变化,新建、删除文件正常 409088 mtdblock10 496 496 0  100% mtdblock11 32240 96 32144 0% B区没有空闲空间 没有被mount进来 mtdblock10 496 96 400 19% mtdblock11 32240 32240 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33030144 ls -l nf2/ df umount nf2 ./nf_test.out nf1/a 524288 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df ls -l nf2/ B区空间使用情况没有变化,文件访问正常。 409088,32914944 mtdblock10 496 496 0  100% mtdblock11 32240 32240 0  100% B区有空闲空间 已经mount进来 mtdblock10 496 96 400 19%   mtdblock11 32240 96 32144    0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df ./nf_test.out nf1/a 524288 ls -l nf1/ df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况没有变化,新建、删除文件正常 409088 mtdblock10 496 496 0  100% mtdblock11 32240 96 32144    0% B区没有空闲空间 已经mount进来 mtdblock10 496 96 400 19% mtdblock11 32240 32240 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df ./nf_test.out nf2/a 33030144 ls -l nf2/ df ./nf_test.out nf1/a 524288 ls -l nf1/ df ls -l nf2/ B区空间使用情况没有变化,文件访问正常。 409088,32914944 mtdblock10 496 496 0  100% mtdblock11 32240 32240 0  100% 支持512K 大小的分区。。 可用空闲空间409088 字节,不可使用空间:524288 – 409088 = 115200 字节(112。 5K )。 分配256K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00040000 00004000 "NAND flash partition test A" mtd11: 01fc0000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 mtdblock10 240 96 144 40% mtdblock11 32496 96 32400    0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df umount nf2 ./nf_test.out nf1/a 262144 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况没有变化,新建、删除文件正常 146944 mtdblock10 240 240 0  100% mtdblock11 32496 96 32400    0% B区没有空闲空间 没有被mount进来 mtdblock10 240 96 144 40% mtdblock11 32496 32496 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33292288 ls -l nf2/ df umount nf2 ./nf_test.out nf1/a 262144 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df ls -l nf2/ B区空间使用情况没有变化,文件访问正常 146944,33177088 mtdblock10 240 240 0  100% mtdblock11 32496 32496 0  100% B区有空闲空间 已经mount进来 mtdblock10 240 96 144 40% mtdblock11 32496 96 32400 0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df ./nf_test.out nf1/a 262144 ls -l nf1/ df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用前后没有变化,文件的新建和删除操作正常 146944 mtdblock10 240 240 0 100% mtdblock11 32496 96 32400 0% B区没有空闲空间 已经mount进来 mtdblock10 240 96 144 40% mtdblock11 32496 32496 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33292288 ls -l nf2/ df ./nf_test.out nf1/a 262144 ls -l nf1/ df ls -l nf2/ B区空间使用情况没有变化,文件访问正常 146944,33177088 mtdblock10 240 240 0 100% mtdblock11 32496 32496 0  100%   支持256K 大小的分区。 可用空闲空间146944 字节,不可用空间字节数:262144 – 146944 = 115200 (112。 5K )。 分配224K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00038000 00004000 "NAND flash partition test A" mtd11: 01fc8000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 mtdblock10 208 96 112 46% mtdblock11 32528 96 32432  0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df umount nf2 ./nf_test.out nf1/a 229376 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况前后没有任何变化,文件新建或删除操作正常 114176 mtdblock10 208 208 0 100% mtdblock11 32528 96 32432 0% B区没有空闲空间 没有被mount进来 mtdblock10 208 96 112 46% mtdblock11 32528 32528 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33325056 ls -l nf2/ df umount nf2 ./nf_test.out nf1/a 229376 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df ls -l nf2/ B区的空间使用情况前后没有变化,文件访问正常。 114176,33209856 mtdblock10 208 208 0 100% mtdblock11 32528 32528 0  100% B区有空闲空间 已经mount进来 mtdblock10 208 96 112 46% mtdblock11 32528 96 32432  0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df ./nf_test.out nf1/a 229376 ls -l nf1/ df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况前后没有任何变化,文件新建或删除操作正常 114176 mtdblock10 208 208 0 100% mtdblock11 32528 96  32432  0% B区没有空闲空间 已经mount进来 mtdblock10 208 96 112 46% mtdblock11 32528 32528 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33325056 ls -l nf2/ df ./nf_test.out nf1/a 229376 ls -l nf1/ df ls -l nf2/ B区的空间使用情况前后没有变化,文件访问正常。 114176,33209856 mtdblock10 208 208 0 100% mtdblock11 32528 32528 0  100% 支持192K 大小的分区。 可用空闲空间114176 字节,不可用空间字节数:229376 – 114176 = 115200 (112 。5K )。 分配192K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00030000 00004000 "NAND flash partition test A" mtd11: 01fd0000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 mtdblock10 176 96 80 55% mtdblock11 32560 96 32464 0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df umount nf2 ./nf_test.out nf1/a 196608 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况前后没有改变,文件的新建和删除操作正常 81408 mtdblock10 176 176 0 100% mtdblock11 32560 96 32464 0% B区没有空闲空间 没有被mount进来 mtdblock10 176 96 80 55% mtdblock11 32560 32560 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33357824 ls -l nf2/ df umount nf2 ./nf_test.out nf1/a 196608 ls -l nf1/ mount -t yaffs /dev/mtdblock11 nf2 df ls -l nf2/ B区的空间使用情况前后没有变化,文件访问正常。 81408,33242624 mtdblock10 176 176 0 100% mtdblock11 32560 32560 0  100% B区有空闲空间 已经mount进来 mtdblock10 176 96 80 55% mtdblock11 32560 96 32464  0% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 df ./nf_test.out nf1/a 196608 ls -l nf1/ df vi nf2/test ls -l nf2/ rm nf2/test ls -l nf2/ B区空间使用情况前后没有改变,文件的新建和删除操作正常 81408 mtdblock10 176 176 0 100% mtdblock11 32560 96 32464  0% B区没有空闲空间 已经mount进来 mtdblock10 176 96 80 55% mtdblock11 32560 32560 0  100% mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock11 nf2 ./nf_test.out nf2/a 33357824 ls -l nf2/ df ./nf_test.out nf1/a 196608 ls -l nf1/ df ls -l nf2/ B区的空间使用情况前后没有变化,文件访问正常。 81408,33242624 mtdblock10 176 176 0 100% mtdblock11 32560 32560 0  100% 支持192K 大小的分区。 可用空闲空间81408 字节,不可用空间字节数:196608 –81408= 115200 (112 。5K )。 分配176K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 0002c000 00004000 "NAND flash partition test A" mtd11: 01fd4000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 格式化正常, Mount不成功:第一次mount,出现Segmentation fault,第二次mount,挂起。 mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock10 nf1 无法进行操作     B区没有空闲空间 没有被mount进来           B区有空闲空间 已经mount进来           B区没有空闲空间 已经mount进来           不支持176K 空间分配。 分配160K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00028000 00004000 "NAND flash partition test A" mtd11: 01fd8000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 格式化正常, Mount不成功:第一次mount,出现Segmentation fault,第二次mount,挂起。 mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock10 nf1 无法进行操作     B区没有空闲空间 没有被mount进来           B区有空闲空间 已经mount进来           B区没有空闲空间 已经mount进来           不支持160K 空间分配。 分配128K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00020000 00004000 "NAND flash partition test A" mtd11: 01fe0000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 格式化正常, Mount不成功:第一次mount,出现Segmentation fault,第二次mount,挂起。 mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock10 nf1 无法进行操作 B区没有空闲空间 没有被mount进来           B区有空闲空间 已经mount进来           B区没有空闲空间 已经mount进来           不支持128K 空间分配。 分配64K空间 dev:     size   erasesize name mtd0: 00004000 00004000 "Dayang Product data --mtd0" mtd1: 00002000 00002000 "Dayang Loader data --mtd1" mtd2: 00002000 00002000 "Dayang Loader data backup --mtd2" mtd3: 00008000 00008000 "Dayang Bios data --mtd3" mtd4: 000b0000 00010000 "Dayang Linux kernel" mtd5: 00110000 00010000 "Dayang Linux filesystem" mtd6: 00010000 00010000 "Dayang BootLogo" mtd7: 00020000 00010000 "Dayang OpenBIOS" mtd8: 00200000 00004000 "NAND flash partition 1" mtd9: 01e00000 00004000 "NAND flash partition 2" mtd10: 00010000 00004000 "NAND flash partition test A" mtd11: 01ff0000 00004000 "NAND flash partition test B" 测试前提 实际情况 SHELL 总结 B区有空闲空间 没有被mount进来 格式化正常, Mount不成功:第一次mount,出现Segmentation fault,第二次mount,挂起。 mkyaffs /dev/mtd10 mkyaffs /dev/mtd11 mount -t yaffs /dev/mtdblock10 nf1 mount -t yaffs /dev/mtdblock10 nf1 无法进行操作 B区没有空闲空间 没有被mount进来           B区有空闲空间 已经mount进来           B区没有空闲空间 已经mount进来           不支持64K 空间分配。 测试结果:        文件系统会占用一部分空间,且大小固定,数值为115200(112.5K),这部分空间用户无法使用,剩余部分用户可以使用; 分区空间小到一定程度后,该分区将无法操作,即mount不成功,最小值为192K。 分区空间大小 是否支持 可用空间大小(字节) 不可用空间大小(字节) 512K 是 409088(399.5K) 115200(112.5K) 256K 是 146944(143.5K) 115200(112.5K) 224K 是 114176(111.5K) 115200(112.5K) 192K 是 81408(79.5K) 115200(112.5K) 176K 否     160K 否     128K 否     64K 否        

    最新回复(0)