2017-05-30 1 views
1

Linux newbie question.Comment Linux détermine-t-il une classe de périphérique?

Vous vous demandez simplement comment Linux détermine la classe de périphérique d'un périphérique? Plus précisément, lorsque je branche un scanner de codes-barres, comment sait-il qu'il s'agit d'un appareil ttyACM? J'ai un scanner qui fonctionne avec mon système d'exploitation Linux, mais le nouveau modèle n'est pas reconnu, je me demande si je peux modifier un fichier quelque part dans le système qui lui demande de reconnaître le scanner comme ttyACM0 et d'utiliser les pilotes existants.

Répondre

1

périphériques USB (je suppose que votre scanner est USB) sont identifiés par vendorId et productId (deux entiers de 16 bits), chaque conducteur remplir un tableau avec la liste des fournisseurs pris en charge/prods id (la création d'un fournisseur de relation: prod-> driver), je suppose qu'au moment de la compilation tous les identifiants du tableau sont fusionnés dans une liste qui est ensuite utilisée pour une recherche de recherche lorsqu'un périphérique est branché.

Habituellement, vous pouvez voir l'identifiant du fournisseur et celui du produit. du périphérique connecté avec la commande dmesg juste après le branchement du périphérique (ou avec lsusb).

Pour voir ttyACMacm_ids[] dans drivers/usb/class/cdc-acm.c

Attention jouer avec les pilotes de périphériques, étant même ttyACM une interface terminale uniquement si l'interface tty-> matériel est exécuté mal une commande peut casser le matériel.

Peut-être que cette question devrait être Unix & Linux stackexchange

+0

Les deux scanners de codes à barres en question d'identifier apparemment le même PID et VID selon le fabricant, mais un numéro de série différent. Ils ont dit que le nouveau scanner a un MCU différent qui contrôle l'interface USB. Il semble donc que le numéro de série est également utilisé pour déterminer la classe de périphérique. –

+0

@LukeAllison, voir [drivers/usb/core/driver.c:] (https://github.com/torvalds/linux/blob/v4.10/drivers/usb/core/driver.c#L615), il sont des drapeaux pour correspondre à d'autres critères, si vous regardez la fin de 'acm_ids []' la macro 'USB_INTERFACE_INFO' correspond à * class * * sous-classe * et * proto * – Alex