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.