2017-02-13 4 views
3

Bonjour Je travaille sur le système Debian installé sur le système embarqué. Le PC a 3 ports usb appelons-le A, B, C. Je veux exécuter un script différent basé sur le port USB. Comment puis-je atteindre cet objectif?Linux exécuter le script basé sur le port USB

J'ai trouvé beaucoup d'articles sur les règles udev et j'ai la règle ci-dessous qui fonctionne si je connecte un usb. Comment puis-je étendre cette règle pour fonctionner uniquement si je connecte un périphérique, disons à usb A?

+0

Ce Q est ne semble pas être sur la programmation tel que défini pour StackOverflow. Il ** peut être plus approprié sur http://unix.stackexchange.com (Unix et Linux) OU http://superuser.com. Utilisez le lien 'flag' au bas de votre Q et demandez au modérateur de le déplacer. Merci de ne pas poster le même Q sur 2 sites différents. Veuillez lire http://stackoverflow.com/help/how-to-ask http: // stackoverflow.com/help/ne demande pas et http://stackoverflow.com/help/mcve avant de poster plus de Qs ici. Bonne chance. – shellter

Répondre

0

lsusb sort le bus USB et les ports USB auxquels les périphériques sont connectés. dans la sortie, certains concentrateurs USB sont des concentrateurs USB internes auxquels sont également connectés bluetooth et webcam, voir https://unix.stackexchange.com/questions/144029/command-to-determine-ports-of-a-device-like-dev-tty-usb0

Vous devez déterminer sur quel bus USB vos ports externes sont reliés. Pour cela, vérifiez la sortie de lsusb -t, puis connectez un périphérique USB et vérifiez à nouveau la sortie de lsusb -t sur mon ordinateur.alors vous savez ce qui Adresses de vos trois ports USB externes ont dans vos périphériques arborescence USB interne:

ports USB internes:

/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/5p, 12M 
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/5p, 12M 
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/5p, 480M 
    |__ Port 1: Dev 64, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M 
    |__ Port 1: Dev 64, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M 

ports USB externes:

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/5p, 480M 
    |__ Port 3: Dev 116, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=rndis_host, 480M 
    |__ Port 3: Dev 116, If 1, Class=data, Driver=rndis_host, 480M 

clé USB connecté vers le port externe # 2

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/5p, 480M 
    |__ Port 2: Dev 119, If 0, Class=stor., Driver=usb-storage, 480M 
    |__ Port 3: Dev 116, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=rndis_host, 480M 
    |__ Port 3: Dev 116, If 1, Class=data, Driver=rndis_host, 480M 

après cette procédure, vous les 'adresses' de votre ports USB externes

dans dmesg un périphérique USB connecté apparaît toujours avec une ligne qui contient le bus USB et le numéro de port:

[186067.360139] usb 1-1: new high-speed USB device number 123 using ehci_hcd est le port bus 001 001

[186067.360139] usb 1-2: new high-speed USB device number 123 using ehci_hcd est de port de bus 001 002

[186067.360139] usb 1-3: new high-speed USB device number 123 using ehci_hcd est le bus 001 port 003

dans votre script vous grep cette ligne en utilisant la commande dmesg | grep "usb 1" | tail -1 (la queue -1 greps la dernière occurence, voir http://www.stackoverflow.com/questions/24014194/how-to-grep-the-last-occurence-of-the-line-pattern)

vous pouvez obtenir le numéro de port en utilisant directement la commande

dmesg | grep -o -P 'usb 1.{0,3}' | tail -1 | head -c 7 | tail -c 1 (si tous vos ports externes sur Bus 001)

(Grep characters before and after match?, http://www.unix.com/unix-for-dummies-questions-and-answers/28542-how-do-i-get-nth-character-string.html)

donc avec cela, vous obtenez le numéro de port USB à que le dernier périphérique USB (votre appareil) a été joint et cela vous pouvez utiliser dans votre udev script (if ...)


vous pouvez également trouver la structure arborescente de bus USB dans le fichier /dev/bus/usb/ sytem dire Bus 01 Port 1 est /dev/bus/usb/001/001

voir http://www.linuxnix.com/find-usb-device-details-in-linuxunix-using-lsusb-command/

0

il y a une meilleure solution. vous pouvez attribuer un nœud de périphérique /dev/x spécifique basé sur vendorID et productID de votre bâton à l'aide udev, voir https://askubuntu.com/questions/127695/force-specific-letter-for-usb-drive-in-dev-sd (x est un nom arbitraire)

avec ce noeud de périphérique fixe, vous pouvez utiliser udevadm pour interroger le port USB auquel le dispositif est attaché

udevadm info --query=all --attribute-walk --name/dev/x

et grep le numéro de port USB (voir autre réponse ...)