Cannot read using USB Skeleton Driver

Greg KH greg at
Fri Sep 16 03:01:57 EDT 2011

On Thu, Sep 15, 2011 at 07:02:59PM +0530, Felix Varghese wrote:
> Hi,
> I have been trying to communicate with a custom usb device from a
> SAM9G20-EK board using the usb-skeleton.c driver example in the linux
> source. I modified the driver to add my device's vendor and product
> id. The USB device enumerates with two bulk endpoints - one IN and one
> OUT. The (modified) skel driver successfully detects my device and I
> get a minor number allocated. After creating a device file with that
> minor number, I am able to write into the device by typing 'echo "HI"
> > /dev/mydevice'. I verified that this data arrives at my device
> intact. Next, I started sending data back from the device and tried to
> read it back using 'cat /dev/mydevice'. The problem is that read not
> only doesn't work, but also makes the app get totally stuck. Ctrl-C
> doesn't work and I have to reboot the board.
> Some debugging using printk's led me to the following snippet which
> seems to be causing the hang. If I change the wait to a
> wait_for_completion_interruptible, Ctrl-C starts working, but still no
> data is received.
> if (!dev->processed_urb) {
> 		/*
> 		 * the URB hasn't been processed
> 		 * do it now
> 		 */
> 		wait_for_completion(&dev->bulk_in_completion);
> 		dev->bulk_in_copied = 0;
> 		dev->processed_urb = 1;
> 	}
> Oh, btw I am using linux kernel Any Ideas anyone??

Odds are you need to send the proper command to your device in order to
get it to send data to you.  You are hanging, waiting for device to be
sent from the device to userspace, and if no data is sent, then it will
continue to wait.

So, please read the documentation on how to talk to your device and send
the proper USB commands to it and all should be fine.

But note, the usb-skeleton driver really isn't a good framework for a
"real" USB device in that it doesn't expose the proper userspace
interface for it.

What type of device is this you are wishing to write a driver for?  That
will determine the type of interface you need to use, odds are it is not
going to be a simple char device.

greg k-h

More information about the Kernelnewbies mailing list