测试目的
目前版本的大板机顶盒上有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/
|