Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569308
  • 博文数量: 114
  • 博客积分: 1620
  • 博客等级: 上尉
  • 技术积分: 1104
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 09:16
文章分类

全部博文(114)

文章存档

2016年(1)

2015年(2)

2014年(4)

2013年(9)

2012年(20)

2011年(78)

分类: LINUX

2012-01-10 19:17:16

原文地址:http://hi.baidu.com/serial_story/blog/calendar/201002


Linux Kernel自从2.6.29之后,就加入了MTD test模块,即几个测试模块,用于测试你的mtd的特性。

分别是:

mtd_oobtest.c //测试oob数据读写是否正常
mtd_pagetest.c //测试page读写
mtd_readtest.c //测试读功能
mtd_speedtest.c //测试mtd的速度
mtd_stresstest.c //压力测试
mtd_subpagetest.c //子页面(如果支持的话,此处我的是MLC,不支持sub page)
mtd_torturetest.c //扭曲测试? 反正就是对mtd“严刑拷打”,看看其能经受多少读写,直至挂掉。。,所以,作者说了,除非你知道自己在干啥,否则不要随意进行这个测试。

其中,最有用的就是speed test了,方便了开发者用来测试你的mtd(我的此处是nand flash)的读/写/擦除块的速度。

我当前用的Linux kernel是2.6.28.4,没有加入MTD test,所以自己加入:

(1)下载mtd tests源码,并加入到自己的内核中,编译成.ko模块用于后期动态加载:

我这里是从最新内核linux-2.6.32.8:

中的/drivers/mtd/test里面抽取的,然后放到自己的kernel源码中:

/drivers/mtd/test,再把

config MTD_TESTS
tristate "MTD tests support"
depends on m
help
This option includes various MTD tests into compilation. The tests
should normally be compiled as kernel modules. The modules perform
various checks and verifications when loaded.
加入到Kconfig中,把

obj-y   += tests/

加入到Makefile中。然后make ARCH=arm menuconfig,去把mtd test选上:

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

   MTD tests support

再编译一下:

make ARCH=arm; make ARCH=arm uImage

就可以生成对应的.ko模块文件了。

(2).如何使用MTD test:

进入Kernel后,使用也很简单

比如:insmod mtd_speedtest.ko dev=3

注:此处的dev指的是你mtd设备number,我这里的:

# cat /proc/mtd
dev:    size   erasesize name
mtd0: 00100000 00080000 "U-Boot"
mtd1: 00800000 00080000 "Kernel"
mtd2: 0c800000 00080000 "Root filesystem"
mtd3: 04000000 00080000 "Temp"
mtd4: 69000000 00080000 "Data"

dev=3,就是mtd3,就是上面的Temp分区。

(3)举例如何使用:

最后列举一些测试结果如下:

# ls
mtd_oobtest.ko          mtd_readtest.ko         mtd_subpagetest.ko
mtd_speedtest.ko        mtd_torturetest.ko
mtd_pagetest.ko         mtd_stresstest.ko
# insmod mtd_speedtest.ko dev=3

=================================================
mtd_speedtest: MTD device: 3
mtd_speedtest: MTD device size 67108864, eraseblock size 524288, page size 4096, count of eraseblocks 128, pages per eraseblock 128, OOB size 128
mtd_speedtest: scanning for bad eraseblocks
mtd_speedtest: scanned 128 eraseblocks, 0 are bad
mtd_speedtest: testing eraseblock write speed
mtd_speedtest: eraseblock write speed is 1754 KiB/s
mtd_speedtest: testing eraseblock read speed
mtd_speedtest: eraseblock read speed is 2443 KiB/s
mtd_speedtest: testing page write speed
mtd_speedtest: page write speed is 1748 KiB/s
mtd_speedtest: testing page read speed
mtd_speedtest: page read speed is 2439 KiB/s
mtd_speedtest: testing 2 page write speed
mtd_speedtest: 2 page write speed is 1751 KiB/s
mtd_speedtest: testing 2 page read speed
mtd_speedtest: 2 page read speed is 2440 KiB/s
mtd_speedtest: Testing erase speed
mtd_speedtest: erase speed is 439838 KiB/s
mtd_speedtest: finished
=================================================

# insmod mtd_oobtest.ko dev=3

=================================================
mtd_oobtest: MTD device: 3
mtd_oobtest: MTD device size 67108864, eraseblock size 524288, page size 4096, count of eraseblocks 128, pages per eraseblock 128, OOB size 128
mtd_oobtest: scanning for bad eraseblocks
mtd_oobtest: scanned 128 eraseblocks, 0 are bad
mtd_oobtest: test 1 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 128 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 128 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 128 eraseblocks
mtd_oobtest: test 2 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 128 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 128 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 128 eraseblocks
mtd_oobtest: test 3 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 128 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 128 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 128 eraseblocks
mtd_oobtest: test 4 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 128 eraseblocks
mtd_oobtest: attempting to start write past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to start read past end of OOB
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error: read past end of device
mtd_oobtest: attempting to write past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error occurred as expected
mtd_oobtest: attempting to read past end of device
mtd_oobtest: an error is expected...
mtd_oobtest: error: read past end of device
mtd_oobtest: test 5 of 5
mtd_oobtest: erasing whole device
mtd_oobtest: erased 128 eraseblocks
mtd_oobtest: writing OOBs of whole device
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written up to eraseblock 0
mtd_oobtest: written 127 eraseblocks
mtd_oobtest: verifying all eraseblocks
mtd_oobtest: verified up to eraseblock 0
mtd_oobtest: verified 127 eraseblocks
mtd_oobtest: finished with 2 errors
=================================================

[附录]

1.MTD tests

阅读(3500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~