any linux kernel people out there
- December 12th, 2011
- Posted in diy . recording gear . studio
- Write comment
ARE YOU OR DO YOU KNOW A SERIOUSLY HARDCORE LINUX PERSON?
If so, I need their help. Please forward this around, I have a problem and I’d really like a workaround or fix.
THIS IS INTENSELY GEEKY. You have been warned.
I have a shiny new USB 2.0 Audio-compatible device, a TASCAM US-800. It validates as a generic USB 2.0 Audio device under OSX, and all the I/O ports are available. With drivers, it works also under Windows XP, to which my studio system can dual-boot. (Motherboard: Gigabyte GA-G31M-ES2L MB, BIOS version FI 2010/08/12.)
I plug it into my studio system when booted to Ubuntu (10.04 LTS (Lucid Lynx), 2.6.32-35-generic, all patches applied) and the Ubuntu machine falls over dead right after acknowledging the USB device. If I’m in Gnome the whole thing dies almost immediately; if I’m in a text console I have more time. The task queue fills because CPU0 soft-hangs.
Again, the exact same machine in exact same configuration, booted to Windows XP, works fine.
What appears to happen is some sort of interrupt fuckery (“ata3: lost interrupt (Status 0x58)”) and the USB hub controller loses an interrupt and doesn’t realise it, or, looking at the call stack and audio.c, maybe has an extra interrupt mapped to it somehow? With predictably hilarious, by which I mean disastrous, results.
Here is a syslog dump from a boot-through-dying session. It’s pretty typical. The adventures start at 15:41:29. Note the call stack. Note also “BUG: soft lockup – CPU#0 stuck for 61s! [khubd:29].”
This appears to be the most closely-related kernel bug report. It’s acknowledged as a bug but hasn’t been touched in a year. 🙁 I am not convinced it’s identical, in part because the workaround described down at the bottom (booting with noacpi) does not work for me.
I really, really, really want to be able to use this hardware on my Linux DAW. I can, yes, use it with my MacBook and Garage Band, or CUBASE on the same hardware as the Linux DAW, and shuffle files over. But both of those options kinda suck.
Anybody have a workaround? Or a dev machine that can analyse this? Pretty-please?
13 comments on Livejournal, 2 comments on Dreamwidth; resolution in comments below.
Sorry, I got nothin’ and couldn’t even tell you who to talk to. The only things I can think of to try are messing around in the BIOS – turning off the third hard drive (ata3) or maybe there’s a USB setting you can tweak.
It almost sounds like the good old days where you had two items fighting over who got to use a particular interrupt (like for instance if you had a printer that wanted IRQ7 but you had your sound card set to use that interrupt too) so the computer locked up because it didn’t know which one “really” wanted to use that interrupt. But that’s just a guess, and anyway PnP is supposed to take care of that sort of thing automatically, right?
Have you tried it on a different machine? How about trying it on a system that’s running off of a live CD? They might give you an indication that it’s something about your setup rather than the device itself, which would suck.
Don’t mind me, I’m just throwing things out here. Good luck.
OKAY! I got it to work! o/ criacow on Twitter showed me how to do out-of-order kernel upgrades easily! 😀
So that this can be found in google: US-800 US800 TASCAM LINUX UBUNTU
HOWTO:
Plug the US-800 into an OSX machine, and run the included software right off CD-ROM (you don’t have to install it and there are no drivers) to reset the device to factory. You can also do this on a Windows machine, but that involves installing drivers, so borrow a Macbook or something.
Even after that, plugging it in will crash many variants of the 2.6 kernel. HOWEVER! You can upgrade Linux kernels without upgrading the entire GNU/Linux OS. Directions for Ubuntu are here: https://wiki.ubuntu.com/Kernel/MainlineBuilds Upgrade to version 3.1.5-generic, and restart the machine.
Plug the US-800 into an open USB port. There will be MANY complaints in syslog. That’s… marginally okay. Better than crashing, anyway. We’ll fix it below.
Launch JackAudio. Go into settings panel, create a new config, based on current actual configuration. THE RESULT WILL BE WRONG, but we’ll fix it.
On the lower right there will be dropdowns for numbers of inputs and outputs. It will probably default to either 2/2 or automatic/automatic. This is wrong. Set those manually to 8/2.
Save those changes, then stop and restart JackAudio. This is ALSO important because I think we’re either working around an ALSA device scanner bug where it gets the numbers of inputs wrong, or the hardware is buggy and Windows and OSX patch around it. One of those.
Go back into Jack settings, and on the lower right, near the number-of-inputs selectors, there will be physical device selectors for both input and output. Do NOT pick plughw, even tho’ that should totally work. Click on the little down wedge icon that brings up the physical device names, and select “us800” for both inputs and outputs.
Save changes, stop and restart the server. You should now have at least all six analogue inputs, and both outputs, at least in things that talk to JackAudio. I can’t validate the digital inputs because I lack the hardware.
Once you’ve done all this, from a cold start, just plug in the device after booting, wait for the end of the first round of syslog spew (as the USB handler flails at it and gets it wrong), then start JackD with your previously-saved configuration file, and it’ll come right up.
I haven’t tested multiple bitrates and other changes yet. But I had it working at 44.1Khz and the selector at least shows the other bitrate options and lets me pick them. 😀I have now tested other bitrates! And all is good. Sample bit width seems stuck at 16, but that’s ok, that’s how you ship anyway.