I'm having problem with several embeded machines using USB2.0 Whenever I try to "stream" bulk URBs (that is, resubmit the URB immedaitely from inside the irq handler), the kernel oopses somewhere in keventd.
I'm trying to record from my USB2.0 DVB-T receiver on an embeded device. The receiver is TerraTec Cinergy T2 and is well supported under Linux. The drivers work well on the desktop. The device uses one bulk endpoint for contron and another bulk endpoint for transfer of high speed data stream (~2MB/s, mpeg transport stream)
The embeded devices are LinkSys NSLU2 (ARM based machine with NEC EHCI)
and Asus WL500gx (MIPS based, VIA EHCI, If I recall correctly).
Both embeded devices work perfectly for usb storage with transfer rates 5-8MB/s
from a USB2.0 HDD. NSLU2 uses patched 2.4.22 kernel, 500gx uses patched 2.4.25
and I even tried 2.4.25 with host controller drivers "backported" from 2.4.29
When I try using DVB applications on them (properly compiled for target
platform, with correct drivers, ...), everything goes well until I try to start reading
the stream data from the device (that is, I can tune the DVB channel, read the status,
use the IR remote bundled with the T2). Once I start streaming, their kernels oopses
in different ways (I have some logs) but always in keventd.
I've also tried writing a special custom driver for the device that does absolute minimum
to test the transfer and had partial success with it:
The initial version of the driver did just discrete usb_bulk_msg for each read() request
and it worked to that extent that the data obtained from it were mostly OK, but there
were some missing block because of the lack of queuing (the driver couldn't keep up
with incomming data even on my desktop machine).
The next version of the driver used circular buffer, usb_submit_urb, sleeping reader
and urb resubmit + wq notification from the irq handler, but this version of the driver
oopses the kernel again (At least on NSLU2, I don't have 500gx handy at the moment).
Of course I have developed and tested the driver on my desktop first and it worked perfectly
on the first run (no suprpise, I was mostly copying bolierplate USB code).
I can't run 2.6.x kernel on these devices as their kernels are customized for the embeded platform
by the manufacturer and there is no 2.6 based patch available.
Does anybody have an idea what can be wrong or what to check to get a bit further
making this combination work? I can post the drivers and log messages if it could help.
Nenik
------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ [email protected] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-users
