Linux で基本的なデバイス ドライバーを作成して、USB 大容量ストレージ デバイスで IO を実行しようとしています。同じために2.6.34カーネルを使用しています。USB コアの API の正しい動作を理解するために、カーネルに付属の usb-skeleton.c を使用しました。私はそれをコンパイルし、生成された /dev/skel0 デバイスを USB フラッシュ ドライブに挿入しました。
http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c?v=2.6.34
デバイスに 1024 バイトのパケットを 1 つ書き込みましたが、驚いたことに、書き込みはInput/Output errorで失敗しました。
# insmod usb-skeleton.ko
# ls /dev/skel0
/dev/skel0
# dd if=/dev/urandom of=/dev/skel0 bs=1024 count=1
dd closing output file `/dev/ask0': Input/Output error
データを書き込むと、スケルトン ドライバーの書き込み関数と書き込みコールバックが呼び出されますが、それでも IO は失敗します。
usb-skeleton.c は Linux カーネルに付属しているため、厳密にテストされ、完璧であると確信しています。私は何か間違ったことをしているに違いなく、デバイスドライバープログラミングの初心者であるため、間違いに気付くことができません。この件で何か助けていただければ幸いです。
ありがとうございました。