디바이스 드라이버
SD카드에 Raw Block I/O를 하기 위한 테스트모듈로서 리눅스소스의 drivers/mmc/card/mmc_test.c가
있다.
mmc/sd카드의 Block I/O를 수행하는 모듈(mmc_block.ko)은 drivers/mmc/card/{block.c,queue.c}이다
mmc_test를 테스트하기 위해서는 mmc_block에 해당하는 커널파라메터를 조정하여야 한다.
mmc/card/Kconfig에서 mmc_block에 해당하는 "MMC block device driver"를 off시키고,
mmc_test모듈에 해당하는 "MMC host test driver"를 모듈(!)로서 빌드되게끔 한다.
커널 빌드후 insmod를 이용해서 mmc_test.ko를 로딩하면,
debugfs파일시스템 아래 mmc_test가 만든 테스트노드를 찾을 수 있다.
이 노드에 test scenario번호(1부터시작한다.)를 주입하면 mmc_test는 해당하는 테스트를 찾아 실행하게 된다.
echo 1 > /sys/kernel/debug/mmc0/mmc0:b368/test
mmc_test가 구현하고 있는 테스트 목록은 다음과 같다. 실험버젼은 linux-3.0.8이다
주의사항: 테스트수행 후에는 MMC/SD카드의 내용을 복구할 수 없으므로(!) 카드의 내용을 백업받아야 한다.
1-th test: 1-sector를 SD카드 0번지에 Write한다.
[ 4.572168] testcase=1.
[ 4.575706] mmc0: Starting tests of card mmc0:b368...
[ 4.580975] mmc0: Test case 1. Basic write (no data verification)...
[ 4.591218] mmc0: Result: OK
[ 4.593930] mmc0: Tests completed.
2-th test: 1-sector를 SD카드 0번지에 Read한다.
[ 5.608278] testcase=2.
[ 5.611701] mmc0: Starting tests of card mmc0:b368...
[ 5.616862] mmc0: Test case 2. Basic read (no data verification)...
[ 5.640246] mmc0: Result: OK
[ 5.643217] mmc0: Tests completed.
3-th test: 1-sector를 SD카드 0번지에 쓰고 다시 읽어서 Verify한다.
[ 6.657151] testcase=3.
[ 6.660786] mmc0: Starting tests of card mmc0:b368...
[ 6.665843] mmc0: Test case 3. Basic write (with data verification)...
[ 6.753026] mmc0: Result: OK
[ 6.829687] mmc0: Tests completed.
4-th test:
[ 7.843986] testcase=4.
[ 7.847509] mmc0: Starting tests of card mmc0:b368...
[ 7.852775] mmc0: Test case 4. Basic read (with data verification)...
[ 7.931798] mmc0: Result: OK
[ 8.007398] mmc0: Tests completed.
5-th test: 여러개(16개?)의 섹터를 SD카드 0번지에 Write한다.
[ 9.021972] testcase=5.
[ 9.025496] mmc0: Starting tests of card mmc0:b368...
[ 9.030756] mmc0: Test case 5. Multi-block write...
[ 9.117409] mmc0: Result: OK
[ 9.211422] mmc0: Tests completed.
6-th test: 여러개(16개?)의 섹터를 SD카드 0번지에 Read한다.
[ 10.225286] testcase=6.
[ 10.228907] mmc0: Starting tests of card mmc0:b368...
[ 10.233974] mmc0: Test case 6. Multi-block read...
[ 10.317741] mmc0: Result: OK
[ 10.395136] mmc0: Tests completed.
7-th test: 쓰기버퍼의 크기를 변경해 가면서 Write한다. 버퍼크기는 1, 2, 4, 8, ... 256
[ 11.409722] testcase=7.
[ 11.413249] mmc0: Starting tests of card mmc0:b368...
[ 11.418529] mmc0: Test case 7. Power of two block writes...
[ 11.498788] mmc0: Result: UNSUPPORTED (by card)
[ 11.577591] mmc0: Tests completed.
8-th test: 읽기버퍼의 크기를 변경해 가면서 Read한다. 버퍼크기는 1, 2, 4, 8, ... 256
[ 12.592197] testcase=8.
[ 12.595716] mmc0: Starting tests of card mmc0:b368...
[ 12.600977] mmc0: Test case 8. Power of two block reads...
[ 12.679051] mmc0: Result: UNSUPPORTED (by card)
[ 12.756165] mmc0: Tests completed.
9-th test: 쓰기버퍼의 크기를 변경해 가면서 Write한다. 버퍼크기는 3, 10, 17, 24, ...
[ 13.770706] testcase=9.
[ 13.774230] mmc0: Starting tests of card mmc0:b368...
[ 13.781032] mmc0: Test case 9. Weird sized block writes...
[ 13.874877] mmc0: Result: UNSUPPORTED (by card)
[ 13.952907] mmc0: Tests completed.
10-th test: 읽기버퍼의 크기를 변경해 가면서 Read한다. 버퍼크기는 3, 10, 17, 24, ...
[ 14.966668] testcase=10.
[ 14.970483] mmc0: Starting tests of card mmc0:b368...
[ 14.975540] mmc0: Test case 10. Weird sized block reads...
[ 15.053995] mmc0: Result: UNSUPPORTED (by card)
[ 15.131516] mmc0: Tests completed.
11-th test: 쓰기버퍼가 4-byte에 align되지 않은 경우의 1-sector Write를 수행한다.
[ 16.145393] testcase=11.
[ 16.149185] mmc0: Starting tests of card mmc0:b368...
[ 16.154270] mmc0: Test case 11. Badly aligned write...
[ 16.243811] mmc0: Result: OK
[ 16.321088] mmc0: Tests completed.
12-th test: 읽기버퍼가 4-byte에 align되지 않은 경우의 1-sector Read를 수행한다.
[ 17.335293] testcase=12.
[ 17.339084] mmc0: Starting tests of card mmc0:b368...
[ 17.344141] mmc0: Test case 12. Badly aligned read...
[ 17.422745] mmc0: Result: OK
[ 17.498300] mmc0: Tests completed.
13-th test: 쓰기버퍼가 4-byte에 align되지 않은 경우의 multi-sectors Write를 수행한다.
[ 18.512885] testcase=13.
[ 18.516613] mmc0: Starting tests of card mmc0:b368...
[ 18.521848] mmc0: Test case 13. Badly aligned multi-block write...
[ 18.648296] mmc0: Result: OK
[ 18.727276] mmc0: Tests completed.
14-th test: 읽기버퍼가 4-byte에 align되지 않은 경우의 multi-sectors Read를 수행한다.
[ 19.741896] testcase=14.
[ 19.745591] mmc0: Starting tests of card mmc0:b368...
[ 19.750849] mmc0: Test case 14. Badly aligned multi-block read...
[ 19.833515] mmc0: Result: OK
[ 19.910688] mmc0: Tests completed.