我正在尝试在 Linux 中编写一个基本的设备驱动程序来在 USB 大容量存储设备上执行 IO。我正在使用 2.6.34 内核。我使用内核附带的 usb-skeleton.c 来了解 USB 内核 API 的正确工作。我编译它,插入它为我的 USB 闪存驱动器生成 /dev/skel0 设备。
http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c?v=2.6.34
我在设备上写了 1 个 1024 字节的数据包,但令我惊讶的是,写入失败并出现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 内核,我相信它会经过严格测试并且完美无缺。我一定是做错了什么,并且是设备驱动程序编程的新手,我无法意识到错误。我将不胜感激在这件事上的任何帮助。
谢谢你。