3

I'm running Jessie Lite on a RPi2. When I connect my USB to Serial device it does show up, however the driver is not assigned.

lsusb -t

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
        |__ Port 3: Dev 13, If 0, Class=Vendor Specific Class, Driver=, 12M

The CP210x driver from Silicon Labs seems to be installed:

lsmod

Module                  Size  Used by
cp210x                  9419  0 
usbserial              29964  1 cp210x

Now I did try manual binding without success:

echo -n "1-1.3:1.0" > /sys/bus/usb/drivers/cp210x/bind

write error: No such device

Since I'm fairly new to Linux and I need that thing running, I'd be grateful for suggestions. Side note: I have a little Python script running on a Windows machine that is able to talk to the very device just fine...

The device is there, I can't figure out why it's not been found:

tree /sys/bus/usb/devices/

├── 1-1.3 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3
├── 1-1.3:1.0 -> ../../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.3/1-1.3:1.0

Might the additional information from usb-devices help finding the problem?

T:  Bus=01 Lev=02 Prnt=02 Port=04 Cnt=02 Dev#=  6 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=18ef ProdID=e030 Rev=01.00
S:  Manufacturer=Silicon Labs
S:  Product=ALC 8500 Expert
S:  SerialNumber=3ENAEFJAVJCO9AQQ
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
14
  • What is the directory listing under /sys/bus/usb/drivers/cp210x ? Is there a new_id file?
    – jc__
    Aug 1, 2016 at 18:24
  • There's just bind, module, uevent and unbind. The same goes for usbserial. Aug 2, 2016 at 19:48
  • Double check the id for your device and try to rebind. (1-1:1.3).
    – jc__
    Aug 2, 2016 at 20:39
  • Just passing through today... Here is a help page in my notes: (lwn.net/Articles/143397)
    – jc__
    Aug 2, 2016 at 20:44
  • Are you working from a root shell? Remember that sudo echo... will not work.
    – jc__
    Aug 3, 2016 at 18:34

1 Answer 1

2

Add a rule to udev that will automatically load a driver for an USB device.

Information needed:

  • USB device PID / VID numbers. lsusb output. Does not show in tree mode. lsusb -t
  • Device driver modprobe command. /sbin/modprobe usb-storage

Create a udev rule.

Add your own rule file under /etc/udev/rules.d

sudo vi /etc/udev/rules.d/80-serialToUsb_VID-PID.rules

When you add the rule for udev. This will allow udev to automatically load the driver, upon USB insertion, for any device with the vid/pid listed.

  • Replace #VID# with the VID of your device.
  • Replace #PID# with the PID of your device.
  • Replace #DRIVER# with the command to load the module.
  • Replace #SYS# with the location of the driver's new_id file under the /sys directory.

ACTION=="add", ATTRS{idVendor}=="#VID#", ATTRS{idProduct}=="#PID#", RUN+="#DRIVER#" RUN+="/bin/sh -c 'echo #VID# #PID# > #SYS#'"

Restart udev

sudo /etc/init.d/udev restart

Attach the device and use dmesg to verify


Here is an example I used for a custom mp3 player.

ACTION=="add", ATTRS{idVendor}=="a000", ATTRS{idProduct}=="a000", RUN+="/sbin/modprobe usb-storage" RUN+="/bin/sh -c 'echo a000 a000 > /sys/bus/usb/drivers/usb-storage/new_id'"

And an example for a custom Silicon Labs serial to usb device:

ACTION=="add", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="84a0", RUN+="/usr/sbin/modprobe cp210x" RUN+="/bin/sh -c 'echo 10c4 84a0 > /sys/bus/usb-serial/drivers/cp210x/new_id'"

This works on Debian 8, and Ubuntu 14.

You are using Debian lite. So, I'm am not 100% sure this will work for you.

I have a Freescale embedded device, mx23, that uses mdev instead of udev and the procedure is a bit different.

13
  • For most drivers I have the subdir new_id (like for usb-storage or smc95xx). Also I'm not permitted to make it, nor will it be created automatically when I write the rule like you described?! The PI uses udev though. Aug 2, 2016 at 20:25
  • new_id is supplied by the driver, not you. Also you may need to sudo su to have permission to echo to bind or new_id.
    – jc__
    Aug 2, 2016 at 20:41
  • Replace the ...new_id line with the ...bind command you use.
    – jc__
    Aug 2, 2016 at 20:45
  • I tried all of the above - still nothing. Does the added output from the edited question help verify the problem? Aug 2, 2016 at 21:55
  • Is this supposed to show up as a ttyUSB or other tty?
    – jc__
    Aug 3, 2016 at 18:18

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .