bucchiさんが改造されたSDHC対応のドライバーをテストしてみました(1)
bucchi さんが改造されたSDHC 対応のドライバー(4GB限定)をテストしてみました。
最初に Panasonic と Lexar の 4GB SDHC メモリーカードでテストを開始、ZBench v2.2 でベンチマークテストも取ったりして順調だったんですが、ちょっと欲を出して、手持ちの SD メモリーカードをすべてテストして見ようとということで、左の写真の12種類の SD/SDHC メモリーカードについてテストを始めたところ、ハマッてしまいました。以下で報告するように Panasonic製 の SD メモリーカードでことごとく認識に失敗します。
SD メモリーカードが認識しない不具合のまとめ(結論)
まずは、今回の SD メモリーカードの認識不具合に関するテスト結果から得られた結論から。
■今回の動作テストで正常に認識できなかった SD メモリーカード
正常に認識できない SD メモリーカードたち |
---|
上の写真が今回のテストした12種類の SD/SDHC メモリーカードの中で正常に認識できなかった SD メモリーカードです。下表に一覧にしましたが、ほとんどが Panasonic の製品です。
表1 今回の動作テストで正常に認識できなかった SD メモリーカード一覧
No. | メーカー | 容量 | 種別 | 型名 | テスト時の初期化(フォーマッティング)状態 |
---|---|---|---|---|---|
1 | Panasonic | 256MB | SD | RP-SDH256N1A | 3種類の初期化(フォーマッティング)方法でテスト 「表3」参照 |
2 | Panasonic | 256MB | mini SD | RP-SS256BJ1K | 工場出荷時のまま |
3 | Panasonic | 512MB | SD | RP-SDH512N1A | 工場出荷時のまま |
4 | Panasonic | 1GB | SD | RP-SDQ01GJ1A | 工場出荷時のまま |
5 | Panasonic | 1GB | SD | RP-SDP01GJ1K | 工場出荷時のまま |
6 | ADATA | 1GB | SD | 不明 | たぶん、工場出荷時のまま |
■認識しない原因の切り分け
- 認識しない不具合は bucchi さんが改造された SDHC 対応のドライバーに起因するもので、SD メモリーカード側の問題ではないようです
bucchi さんが改造された SDHC 対応のドライバーで認識しない SD メモリーカードについて、SHARP 純正のドライバー(SL-C1000)および tetsu さんが配布されているドライバーでテストすると正常に認識します。このため、SD メモリーカード側の問題ではなく bucchi さんが改造された SDHC 対応のドライバーに問題があるようです。
表2 bucchi さんが改造された SDHC 対応のドライバーで認識しない SD メモリーカードの他のドライバー(「SHARP 純正」、「tetsu さん配布版」)での認識状況について
(○:正常に認識、×:認識せず)
SD メモリーカード名 | bucchi さん改造版 | SHARP 純正 (SL-C1000) |
tetsu さん配布版 |
---|---|---|---|
Panasonic 256MB SD RP-SDH256N1A | × | ○ | ○ |
Panasonic 256MB mini SD RP-SS256BJ1K | × | ○ | ○ |
Panasonic 512MB SD RP-SDH512N1A | × | ○ | ○ |
Panasonic 1GB SD RP-SDQ01GJ1A | × | ○ | ○ |
Panasonic 1GB SD RP-SDP01GJ1K | × | ○ | ○ |
ADATA 1GB SD | × | ○ | ○ |
■初期化(フォーマッティング)方法の違いによる影響について
- SD メモリーカードの初期化(フォーマッティング)方法の問題ではないようです
SD メモリーカードの初期化(フォーマッティング)方法の影響についても切り分けるため、認識しない Panasonic の 256MB SD メモリーカード RP-SDH256N1A についてつぎの3種類の方法で、また正常に認識する Transcend の 1GB の SD メモリーカード TS1GSDC について、つぎの3種類の方法でテストしたところいずれも、認識状況に変化はありませんでした。このため、初期化(フォーマッティング)方法の問題では無いようです。
表3 bucchi さんが改造された SDHC 対応のドライバーで認識しない SD メモリーカード(Panasonic 256MB SD RP-SDH256N1A)を初期化(フォーマッティング)方法を変更して認識状況をテストした結果
(○:正常に認識、×:認識せず)
初期化(フォーマッティング)方法 | 認識状況 |
---|---|
Panasonic SD フォーマッター Ver2.0 (2.0.0.3) | × |
SHARP ポータブルAVプレーヤー MT-AV1 | × |
Panasonic デジカメ DMC-FX33 | × |
表4 bucchi さんが改造された SDHC 対応のドライバーで正常に認識する SD メモリーカード(Transcend 1GB SD TS1GSDC)を初期化(フォーマッティング)方法を変更して認識状況をテストした結果
(○:正常に認識、×:認識せず)
初期化(フォーマッティング)方法 | 認識状況 |
---|---|
工場出荷状態 | ○ |
Panasonic SD フォーマッター Ver2.0 (2.0.0.3) | ○ |
Panasonic デジカメ DMC-FX33 | ○ |
■取得したログから分析した不具合の状況のまとめ
- bucchi さんの改造されたドライバーでは dmesg の「[SD]-clustsize」が正常に認識する SHRAP 純正ドライバーの値と異なる
ドライバーの種別 | dmesg [SD]-clustsize の値 | 備考 |
---|---|---|
SHRAP 純正ドライバー | 4000 | "4000" はクラスタサイズ16kByte? |
bucchi さん改造のドライバー | 2000 | "2000" はクラスタサイズ8kByte? |
- dmesg の結果の値("block_count" と "total_size" の値)が明らかにおかしい
Panasonic 1GB SD RP-SDQ01GJ1A × 認識に不具合有り |
Transcend 1GB SD TS1GSDC ○ 正常に認識 |
---|---|
block_size: 512 | block_size: 512 |
write_block_size: 512 | write_block_size: 512 |
block_count: 33554432 | block_count: 1995776 |
total_size: 0 | total_size: 1021837312 |
テスト結果(SDメモリーカードテスト専用のシェルスクリプト sd_info.sh で取得したログ)
■bucchi さん改造のドライバーで認識できなかった6種類の SD メモリーカードのログ
■bucchi さん改造のドライバーで認識できなかった SD メモリーカード(Panasonic 256MB SD RP-SDH256N1A)でドライバーを変更して正常に認識したログ
テスト環境とテスト方法について
今回のテストに利用したテスト環境とテスト方法は以下の通りです。
■テスト環境
機種名 | SL-C1000 |
---|---|
ROM Version | 1.02 |
Kernel Version | Special Kernel v18i |
CCCR値 | 0x02000210(デフォルト値) |
VCORE値 | 0x1A(デフォルト値) |
bash-2.05$ cat /proc/deviceinfo/product SL-C1000 bash-2.05$ cat /proc/deviceinfo/revision 1.02 bash-2.05$ cat /proc/version Linux version 2.4.20 (v18i@tetsu.homelinux.org) (gcc version 2.95.2 19991024 (release)) #4 Sun, 12 Aug 2007 23:47:25 +0900 bash-2.05$ cat /proc/zaurus/CCCR 0x02000210 bash-2.05$ cat /proc/zaurus/VCORE 0x1A
■不具合の原因をつきとめるためのテスト方法について
- 不具合の原因をつきとめるために必要と思われる、私が考えつく以下の情報を取得しました。なお、テスト作業を簡単にするために、下記の専用のシェルスクリプト(sd_info.sh)を作成しました。
- なお、テストに当たっては他の影響を排除するため、テスト条件を変更するたびに『再起動』を実施しました。また、SD メモリーカードテスト専用のシェルスクリプト(sd_info.sh)によるログの取得も『再起動直後』に実施しました。
取得項目 | 取得コマンド |
---|---|
ドライバーの情報 | シェルスクリプトで判定して表示 |
SD メモリーカードの情報 /proc/driver/mmcsd/00/* |
cat /proc/driver/mmcsd/00/detect cat /proc/driver/mmcsd/00/manufacture cat /proc/driver/mmcsd/00/product cat /proc/driver/mmcsd/00/type |
システムログ dmesg | dmesg |
パーティション情報 | fdisk -l または fdisk -l -u |
マウント状況 | mount|grep /dev/mmcda1 |
容量の情報 | df /dev/mmcda1 |
■SD メモリーカードテスト専用のシェルスクリプト - sd_info.sh
#!/bin/sh # # get SD/SDHC memory card information. # # file name : sd_info.sh # version : 0.0.2 # create : Jan. 29th, 2010 # update : Jan. 30th, 2010 # author : Fumiyoshi Sasaki # SD_DRIVER_FILE_NEME="/lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o" echo "SD/SDHC driver and memory card information" echo "========================================================" echo -n "PRODUCT : " cat /proc/deviceinfo/product echo SD_DRIVER_FILE_SIZE=`ls -l "$SD_DRIVER_FILE_NEME" | tr -s ' ' | cut -d ' ' -f 5` if [ -L "$SD_DRIVER_FILE_NEME" ] then echo "SD memory card driver : use SHARP pure driver" elif [ "$SD_DRIVER_FILE_SIZE" -eq 67530 ] then echo "SD memory card driver : use tetsu SD memory card driver (same as SHARP SL-C3200 driver)" elif [ "$SD_DRIVER_FILE_SIZE" -eq 75296 ] then echo "SD memory card driver : use bucchi SD/SDHC memory card driver" fi echo "SD memory card driver file size : $SD_DRIVER_FILE_SIZE" echo echo "ls -l /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o result" echo "---------------------------------------------------------" ls -l /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o echo echo "cat /proc/driver/mmcsd/00/* result" echo "---------------------------------------------------------" echo -n " detect : " cat /proc/driver/mmcsd/00/detect echo -n " manufacture : " cat /proc/driver/mmcsd/00/manufacture echo -n " product : " cat /proc/driver/mmcsd/00/product echo -n " type : " cat /proc/driver/mmcsd/00/type echo echo "mount | grep /dev/mmcda1 result" echo "---------------------------------------------------------" mount | grep /dev/mmcda1 echo echo "df /dev/mmcda1 result" echo "---------------------------------------------------------" df /dev/mmcda1 echo echo "fdisk -l result" echo "---------------------------------------------------------" fdisk -l echo echo "dmesg result" echo "---------------------------------------------------------" dmesg exit 0
■SDメモリーカードテスト専用のシェルスクリプトの実行例
bucchi さんの改造されたドライバーで正常に認識されない SD メモリーカード(Panasonic 256MB SD RP-SDH256N1A)の例
SD/SDHC driver and memory card information ======================================================== PRODUCT : SL-C1000 SD memory card driver : use bucchi SD/SDHC memory card driver SD memory card driver file size : 75296 ls -l /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o result --------------------------------------------------------- -rw-r--r-- 1 root qpe 75296 Jan 24 18:22 /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o cat /proc/driver/mmcsd/00/* result --------------------------------------------------------- detect : 1 manufacture : 1 product : S256B type : SD mount | grep /dev/mmcda1 result --------------------------------------------------------- df /dev/mmcda1 result --------------------------------------------------------- Filesystem 1k-blocks Used Available Use% Mounted on fdisk -l result --------------------------------------------------------- dmesg result --------------------------------------------------------- options enabled SharpSL serial driver version 5.05c (2001-07-08) with no serial options enabled ttyS00 at 0xf8100000x (irq = 22) is a 16550A ttyS01 at 0xf8700000x (irq = 20) is a 16550A, using IRDA ttyS02 at 0xf8200000x (irq = 21) is a 16550A rs_init: IRDA H/W initializaion sharpled_init: done. akita remote controller : 途中省略 : SD Driver Initialized. sharp_mmcsd 0.30 13 Oct 2004 pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_id_response: card removed (cmd=00) : 途中省略 : monitor_modinit: finished pxa_sd_wait_response: responce time out (cmd=52 MMC_STAT=0x2142) pxa_sd_wait_response: responce time out (cmd=05 MMC_STAT=0x2142) block_size: 512 write_block_size: 512 block_count: 16777216 total_size: 0 SDHC=0 [SD]-clustsize = 2000 EXT3-fs: Unrecognized mount option quiet EXT2-fs: Unrecognized mount option quiet cramfs: wrong magic MINIX-fs: unable to read superblock MSDOS FS: IO charset utf8 FAT: unable to read boot sector FAT: freeing iocharset=utf8 isofs_read_super: bread failed, dev=3c:01, iso_blknum=16, block=32 NTFS-fs error (device 3c:01): parse_options(): Unrecognized mount option quiet. NTFS-fs warning (device 3c:01): parse_options(): Option iocharset is deprecated. Please use option nls=<charsetname> in the future. jffs2: attempt to mount non-MTD device 3c:01 EXT3-fs: unable to read superblock EXT2-fs: unable to read superblock cramfs: wrong magic MINIX-fs: unable to read superblock FAT: unable to read boot sector isofs_read_super: bread failed, dev=3c:01, iso_blknum=16, block=32 NTFS-fs error (device 3c:01): read_ntfs_boot_sector(): Unable to read primary boot sector. NTFS-fs error (device 3c:01): read_ntfs_boot_sector(): Mount option errors=recover not used. Aborting without trying to recover. NTFS-fs error (device 3c:01): ntfs_read_super(): Not an NTFS volume. jffs2: attempt to mount non-MTD device 3c:01 pxa_sd_wait_response: responce time out (cmd=52 MMC_STAT=0x2142) pxa_sd_wait_response: responce time out (cmd=05 MMC_STAT=0x2142) block_size: 512 write_block_size: 512 <span style="font-weight:bold;color:#FF0000;">block_count: 16777216</span> total_size: 0 SDHC=0 [SD]-clustsize = 2000 EXT3-fs: Unrecognized mount option quiet EXT2-fs: Unrecognized mount option quiet cramfs: wrong magic MINIX-fs: unable to read superblock MSDOS FS: IO charset utf8 FAT: unable to read boot sector FAT: freeing iocharset=utf8 isofs_read_super: bread failed, dev=3c:01, iso_blknum=16, block=32 NTFS-fs error (device 3c:01): parse_options(): Unrecognized mount option quiet. NTFS-fs warning (device 3c:01): parse_options(): Option iocharset is deprecated. Please use option nls=<charsetname> in the future. jffs2: attempt to mount non-MTD device 3c:01 EXT3-fs: unable to read superblock EXT2-fs: unable to read superblock cramfs: wrong magic MINIX-fs: unable to read superblock FAT: unable to read boot sector isofs_read_super: bread failed, dev=3c:01, iso_blknum=16, block=32 NTFS-fs error (device 3c:01): read_ntfs_boot_sector(): Unable to read primary boot sector. NTFS-fs error (device 3c:01): read_ntfs_boot_sector(): Mount option errors=recover not used. Aborting without trying to recover. NTFS-fs error (device 3c:01): ntfs_read_super(): Not an NTFS volume. jffs2: attempt to mount non-MTD device 3c:01
bucchi さんの改造されたドライバーで正常に認識される SD メモリーカード(Transcend 1GB SD TS1GSDC)の例
SD/SDHC driver and memory card information ======================================================== PRODUCT : SL-C1000 SD memory card driver : use bucchi SD/SDHC memory card driver SD memory card driver file size : 75296 ls -l /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o result --------------------------------------------------------- -rw-r--r-- 1 root qpe 75296 Jan 24 18:22 /lib/modules/2.4.20/kernel/drivers/block/sharp_mmcsd_m.o cat /proc/driver/mmcsd/00/* result --------------------------------------------------------- detect : 1 manufacture : 27 product : 00000 type : SD mount | grep /dev/mmcda1 result --------------------------------------------------------- /dev/mmcda1 on /usr/mnt.rom/card type vfat (rw,noatime) df /dev/mmcda1 result --------------------------------------------------------- Filesystem 1k-blocks Used Available Use% Mounted on /dev/mmcda1 997504 185376 812128 19% /usr/mnt.rom/card fdisk -l result --------------------------------------------------------- Disk /dev/mmcda: 1021 MB, 1021837312 bytes 31 heads, 62 sectors/track, 1038 cylinders Units = cylinders of 1922 * 512 = 984064 bytes Device Boot Start End Blocks Id System /dev/mmcda1 1 1039 997764+ 6 FAT16 dmesg result --------------------------------------------------------- Linux version 2.4.20 (v18i@tetsu.homelinux.org) (gcc version 2.95.2 19991024 (release)) #4 Sun, 12 Aug 2007 23:47:25 +0900 CPU: XScale-PXA270 revision 7 Machine: SHARP Akita : 途中省略 : SD Driver Initialized. sharp_mmcsd 0.30 13 Oct 2004 pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_response: card removed (cmd=00) pxa_sd_wait_id_response: card removed (cmd=00) : 途中省略 : monitor_modinit: finished pxa_sd_wait_response: responce time out (cmd=52 MMC_STAT=0x2142) pxa_sd_wait_response: responce time out (cmd=05 MMC_STAT=0x2142) block_size: 512 write_block_size: 512 block_count: 1995776 total_size: 1021837312 SDHC=0 [SD]-clustsize = 4000 Partition check: mmcda: mmcda1 mmcda: mmcda1 EXT3-fs: Unrecognized mount option quiet mmcda: mmcda1 mmcda: mmcda1 EXT2-fs: Unrecognized mount option quiet mmcda: mmcda1 mmcda: mmcda1 cramfs: wrong magic mmcda: mmcda1 mmcda: mmcda1 VFS: Can't find a Minix or Minix V2 filesystem on device 3c:01. mmcda: mmcda1 mmcda: mmcda1 MSDOS FS: IO charset utf8