J'ai initialement posé cette question sur le SU, mais elle est tellement spécifique à Ubuntu que je la déplace ici.
J'ai installé n émetteur-récepteur de 433 Mhz sur mon système Ubuntu (3.8.0-35). Il s’agit d’un type de périphérique USB-à-série reconnu en quelque sorte:
dmesg
sortie:
[ 324.051498] usb 3-1: new full-speed USB device number 2 using xhci_hcd
[ 324.088070] usb 3-1: New USB device found, idVendor=10c4, idProduct=8668
[ 324.088081] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 324.088087] usb 3-1: Product: NETUSB1100 NEWMSG
[ 324.088093] usb 3-1: Manufacturer: HZWB
[ 324.102259] hid-generic 0003:10C4:8668.0002: hiddev0,hidraw1: USB HID v1.01 Device [HZWB NETUSB1100 NEWMSG ] on usb-0000:0e:00.0-1/input0
lsusb
sortie:
Bus 003 Device 002: ID 10c4:8668 Cygnal Integrated Products, Inc.
Je voudrais y accéder (via rfxcmd par exemple) mais je ne peux pas obtenir un chemin /dev
pertinent. Le contenu de /dev
ne change pas lorsque je le branche; il manque donc certainement quelque chose.
Quelles autres étapes devez-vous suivre pour créer un chemin de périphérique /dev/...
, qui peut ensuite être utilisé dans des scripts?
ÉDITE après lekensteyn 's réponse: sortie de tree /sys/bus/usb/drivers/
après un modprobe cp210x
(avec parties non pertinentes retirées). Veuillez noter que suite à un redémarrage, le 3-1
ci-dessus est devenu un 3-2
ci-dessous. J'ai pris cela en compte dans les tests.
/sys/bus/usb/drivers/
├── cp210x
│ ├── bind
│ ├── module -> ../../../../module/usbserial
│ ├── uevent
│ └── unbind
├── hub
│ ├── 1-0:1.0 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-0:1.0
│ ├── 1-1:1.0 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1:1.0
│ ├── 2-0:1.0 -> ../../../../devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0
│ ├── 2-1:1.0 -> ../../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0
│ ├── 3-0:1.0 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb3/3-0:1.0
│ ├── 4-0:1.0 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb4/4-0:1.0
│ ├── bind
│ ├── module -> ../../../../module/usbcore
│ ├── new_id
│ ├── remove_id
│ ├── uevent
│ └── unbind
├── usb
│ ├── 1-1 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1
│ ├── 1-1.2 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2
│ ├── 1-1.3 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3
│ ├── 1-1.4 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4
│ ├── 1-1.6 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6
│ ├── 2-1 -> ../../../../devices/pci0000:00/0000:00:1d.0/usb2/2-1
│ ├── 3-2 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb3/3-2
│ ├── bind
│ ├── uevent
│ ├── unbind
│ ├── usb1 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1
│ ├── usb2 -> ../../../../devices/pci0000:00/0000:00:1d.0/usb2
│ ├── usb3 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb3
│ └── usb4 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb4
├── usbhid
│ ├── 1-1.2:1.0 -> ../../../../devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0
│ ├── 3-2:1.0 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0e:00.0/usb3/3-2/3-2:1.0
│ ├── bind
│ ├── module -> ../../../../module/usbhid
│ ├── new_id
│ ├── remove_id
│ ├── uevent
│ └── unbind
├── usbserial
│ ├── bind
│ ├── module -> ../../../../module/usbserial
│ ├── uevent
│ └── unbind
├── usbserial_generic
│ ├── bind
│ ├── module -> ../../../../module/usbserial
│ ├── uevent
│ └── unbind
EDIT: ajout de dmesg
après la recompilation et le redémarrage de cp210x.ko (avec le nouveau cp210x.ko)
[ 1.352918] usb 3-2: new full-speed USB device number 2 using xhci_hcd
[ 1.389854] usb 3-2: New USB device found, idVendor=10c4, idProduct=8668
[ 1.389865] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1.389871] usb 3-2: Product: NETUSB1100 NEWMSG
[ 1.389877] usb 3-2: Manufacturer: HZWB
[ 1.399869] usbcore: registered new interface driver usbhid
[ 1.399872] usbhid: USB HID core driver
[ 1.406870] hid-generic 0003:10C4:8668.0001: hiddev0,hidraw0: USB HID v1.01 Device [HZWB NETUSB1100 NEWMSG ] on usb-0000:0e:00.0-2/input0
après un modprobe cp210x
manuel, les lignes supplémentaires dans dmesg
.
[ 1313.312593] usbcore: registered new interface driver usbserial
[ 1313.312642] usbcore: registered new interface driver usbserial_generic
[ 1313.312674] usbserial: USB Serial support registered for generic
[ 1313.329536] usbcore: registered new interface driver cp210x
[ 1313.329575] usbserial: USB Serial support registered for cp210x
(end of file)
Lorsque les pilotes HID génériques possèdent un périphérique, il est clair qu'un pilote plus spécifique est manquant pour le périphérique. J'ai attrapé l'arbre du noyau (3.13) pour votre périphérique (10[Cc]4
et 8668
), mais je n'ai pas trouvé de pilote pour cela. Le plus proche que j'ai trouvé était le module cp210x
, mais il n'a pas d'entrée pour votre périphérique 8668
.
Vous pouvez essayer de lier manuellement le périphérique au pilote cp210x
(Remplacez 3-1
par les adresses répertoriées dans dmesg
):
Sudo modprobe cp210x
Sudo tee /sys/bus/usb/drivers/usbhid/unbind <<<3-1
Sudo tee /sys/bus/usb/drivers/cp210x/bind <<<3.1
Essayez d’éditer le module cp210x et ajoutez votre ID de produit à la liste:
apt-get source linux-headers-$(uname -r)
cd linux-lts-*/drivers/usb/serial
wget https://Gist.github.com/Lekensteyn/8544581/raw/cp210x-10c4-8668.patch
patch < cp210x-10c4-8668.patch
Si vous ne voulez pas extraire 124 Mo de sources, vous avez uniquement besoin des fichiers Makefile et cp210x.c. Voir https://Gist.github.com/Lekensteyn/8544581 pour les versions déjà corrigées basées sur 3.8.0-35-generic.
Puis construisez le module (installez le paquetage build-essential
en utilisant apt-get
si vous ne l’avez pas déjà fait):
make -C /usr/src/linux-headers-$(uname -r) M=$PWD cp210x.ko
Ensuite, déchargez l'ancien module (le cas échéant) et chargez le module nouvellement créé (vous devez désactiver Secure Boot s'il est activé):
Sudo rmmod cp210x
Sudo insmod cp210x.ko
J'utilise des scripts Shell pour gérer l'identification du nœud de périphérique et utiliser le pilote personnalisé cp210x. Ils fournissent également les règles et scripts udev appropriés pour exécuter de manière dynamique un script lorsqu'un périphérique CP210X est branché à chaud.
github.com/RishiGupta12/serial-communication-manager/tree/master/drivers/cp210x-silicon-labs