So, I’ve recently signed up for a Virgin Mobile plan that gives me 2GB of data per month for just $35. I know, you’re probably asking how much 2GB can do for you. Well, I had my doubts as well but after nearly 20 days into my 30 day allotment, I’ve hardly used 500 MB. Now, this isn’t my primary connection. I’m using it to supplement my rather limiting connection at my current contract gig (lots of filtering). But at the end of the day, it’s doing what I need and $35 a month is a small price to pay for the freedom to move files back and forth from my server back home or send out the ever-so-critical email using those commonly filtered mail services, GMail and Hotmail.
At the same time, I’ve also moved to LinuxMint 13 (Maya). Sure, I’ve been able to connect to my Sierra Wireless 802S device over it’s built-in WiFi broadcast (it’s a mobile hotspot), but I wanted to see if I could get it to work straight through the USB connection. It simplifies the connection process, speeds things up a little and can also eliminate the need to turn the WiFi broadcast on. This is useful if I only need to connect one device (almost always the case) and would rather not want people trying to crack into my wireless network.
Well, I tried plugging it in a couple of times and almost immediately the OS would crash. No, not just the desktop manager (I’m using KDE) or the network manager, the whole Linux OS became unresponsive. This definitely isn’t a good sign and indicates a low-level kernel mode driver issue. Not pretty and not something I really have a lot of time to deal with. Oddly enough, as fate would have it, things did magically work yesterday afternoon. I had recently applied updates to Mint and figured that was what caused the change. I was really excited about coming in this morning and getting connected through a USB cable instead of a one-to-one WiFi network.
Until I plugged in and Linux froze again. What was going on? Well, luckily again /var/log/syslog contained lots of useful information. Comparing the two logs, I found this difference in the sequence of events.
The Bad Sequence of Events
kernel: [ 37.072075] usb 2-3: new high-speed USB device number 5 using ehci_hcd mtp-probe: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-3" mtp-probe: bus: 2, device: 5 was not an MTP device kernel: [ 37.262305] usbcore: registered new interface driver usbserial kernel: [ 37.262342] USB Serial support registered for generic kernel: [ 37.262796] usbcore: registered new interface driver usbserial_generic kernel: [ 37.262799] usbserial: USB Serial Driver core kernel: [ 37.267187] USB Serial support registered for Sierra USB modem kernel: [ 37.267364] sierra 2-3:1.0: Sierra USB modem converter detected kernel: [ 37.267855] usb 2-3: Sierra USB modem converter now attached to ttyUSB0 kernel: [ 37.269565] sierra 2-3:1.1: Sierra USB modem converter detected kernel: [ 37.269959] usb 2-3: Sierra USB modem converter now attached to ttyUSB1 kernel: [ 37.270131] usbcore: registered new interface driver sierra kernel: [ 37.270135] sierra: v.1.7.16:USB Driver for Sierra Wireless USB modems kernel: [ 37.330024] usbcore: registered new interface driver cdc_ether modem-manager: <info> (ttyUSB1) opening serial port... modem-manager: <info> (ttyUSB0) opening serial port... kernel: [ 37.383446] sierra ttyUSB0: sierra_submit_rx_urbs: submit urb failed: -8
The Good Sequence of Events
kernel: [23840.000102] usb 2-2: new high-speed USB device number 5 using ehci_hcd mtp-probe: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-2" mtp-probe: bus: 2, device: 5 was not an MTP device kernel: [23840.248888] usbcore: registered new interface driver usbserial kernel: [23840.248908] USB Serial support registered for generic kernel: [23840.248961] usbcore: registered new interface driver usbserial_generic kernel: [23840.248964] usbserial: USB Serial Driver core kernel: [23840.275138] cdc_ether 2-2:1.0: eth1: register 'cdc_ether' at usb-0000:00:1d.7-2, CDC Ethernet Device, 00:a0:d5:ff:ff:af kernel: [23840.275503] usbcore: registered new interface driver cdc_ether kernel: [23840.287483] USB Serial support registered for Sierra USB modem kernel: [23840.287535] usbcore: registered new interface driver sierra kernel: [23840.287538] sierra: v.1.7.16:USB Driver for Sierra Wireless USB modems NetworkManager: SCPlugin-Ifupdown: devices added (path: /sys/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/net/eth1, iface: eth1)
As can be seen, the critical difference is in the order that the USB core loads the cdc_ether and sierra drivers. In the bad sequence, sierra gets loaded first and subsequently drops into tty (aka “serial cable emulation”) mode. Things go bad quickly and apparently the whole kernel locks up. (Yes, even the other consoles…F1 through F6…lock up.)
In the good sequence, cdc_ether is loaded first and lays claim to the device. The new eth1 interface is configured and all is well. After doing some research, I decided to give something a go. What if we just disabled the sierra driver? It seemed like this latest Sierra Wireless device didn’t really need that driver as it could communicate via USB CDC. What could it hurt? Nothing, I figured, so I opened up /etc/modeprobe.d/blacklist.conf (don’t forget to invoke vi with sudo!) and went to work. Here’s what I added at the bottom.
# added 2012-12-04 - prevent sierra USB driver from loading blacklist sierra
After a reboot (via “sudo telinit 6″…how else would you do it?), I plugged in my device again. And now I’m finishing up this post on my Sierra Wireless connection via USB in LinuxMint.