#1 Le 04/09/2008, à 11:33
- esox
[résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bonjour,
Voilà le problème que j'ai à résoudre :
J'utilise un module son semi pro connecté sur le port firewire (une MOTU 828 mkII pour info). Pour cela j'utilise le driver ffado et jack. Le soucis est que le port firewire partage son irq avec une des ports usb, d'où des pertes de synchro par moments (xruns). Ça serait simple si c'était toujours avec le même port usb que se partage se faisait, mais j'ai six ports usb sur le portable... Alors parfois il s'agit d'un partage d'irq 20 et parfois 21 (le plus souvent, c'est 21).
Pour faire cela je lance dans un terminal :
cat /proc/interrupt
Ce qui me retourne quelque chose du genre :
...
21: 320 311 IO-APIC-fasteoi uhci_hcd:usb3, ehci_hcd:usb7, ohci1394
...
En suite je lance ce script en sudo pour augmenter la priorité de l'irq 21 :
chrt -f -p 82 `pidof "IRQ-21"`
chrt -f -p 98 `pidof "IRQ-8"`
Ca marche mais je dois faire la manip à chaque boot...
Je pourrais mettre mon script dans rc.local, mais comme l'irq partagé peut varier...
Donc ce que je voudrais faire c'est lancer dans rc.local un script qui récupère la valeur d'irq de ohci1394 et intègre cette valeur dans la ligne de mon script :
chrt -f -p 82 `pidof "IRQ-21"`
...
bref que cela adapte la valeur d'irq de "pidof" selon le résultat renvoyé par cat /proc/interrupt
Je sais que ça peut se faire mais je ne sais pas comment...:|
Dernière modification par esox (Le 08/09/2008, à 13:25)
Hors ligne
#2 Le 04/09/2008, à 14:22
- pipou24
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Salut,
Juste quelques pistes car je ne sait pas coder :
tu devrais ne recuperer qu'une ligne avec cat /proc/interrupt | grep ohci1394
ensuite utiliser sed pour récuperer le chiffre du debut de la ligne.
Ensuite, dans rc.local il te faut lancer les commandes avec leur chemin complet. Pour l'obtenir, il te faut utiliser which :
which chrt
Enfin, je demande a déplacer ton sujet dans "developpement programmation", tu y trouvera plus d'aide
Non geek et fier de l'être. ㋡
Hors ligne
#3 Le 04/09/2008, à 14:45
- Totor
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Salut,
Voici une solution :
#récupération du pid
mon_pid=$(cat /proc/interrupt | grep ohci1394|cut -d: -f1)
# augmentation priorité
chrt -f -p 82 `pidof "IRQ-${mon_pid}"`
-- Lucid Lynx --
Hors ligne
#4 Le 04/09/2008, à 16:08
- esox
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Merci les gars, je vais essayer cela dèque que j'ai un moment, et vais en profiter pour comprendre ces "cut", which, et autres -d: -f1.
Ca me rappelle le batch du DOS en plus fin.
Hors ligne
#5 Le 07/09/2008, à 11:15
- esox
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bon, bé ça marche pas, j'ai l'erreur suivante en lançant mon script (que j'ai appelé priority):
jean-martin@jm:~$ sudo Desktop/scripts/priority
sched_getscheduler: No such process
failed to get pid 82's policy
jean-martin@jm:~$
la variable mon_pid renvoit bien l'irq de ieee1394, mais
chrt -f -p 82 `pidof "IRQ-${mon_pid}"`
renvoit une erreur. Pas d'erreur si je remplace ${mon_pid} par sa valeur (20 sur ce coup là)
Il y avait aussi une petite erreur : il manquait un "s" à interrupts...
Hors ligne
#6 Le 07/09/2008, à 18:23
- Totor
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bonsoir,
Que donne ceci ?
#récupération du pid
mon_irq=$(cat /proc/interrupt | grep ohci1394|cut -d: -f1)
# augmentation priorité
echo "PID=$(pidof "IRQ-${mon_irq}")"
#chrt -f -p 82 `pidof "IRQ-${mon_pid}"`
Note : j'ai changé le nom de la variable pour être plus cohérent avec sa signification.
Par ailleurs, que donne :
ps -ef|grep '^IRQ-'
Chez moi, ça ne retourne rien... As-tu réellement des processus ayant pour nom 'IRQ-<numero>' ???
-- Lucid Lynx --
Hors ligne
#7 Le 07/09/2008, à 23:50
- esox
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bonsoir Totor
#récupération du pid
mon_irq=$(cat /proc/interrupt | grep ohci1394|cut -d: -f1)
# augmentation priorité
echo "PID=$(pidof "IRQ-${mon_irq}")"
#chrt -f -p 82 `pidof "IRQ-${mon_pid}"`
renvoit :
PID=
ps -ef|grep '^IRQ-'
ne renvoit rien du tout...
et pourtant,
echo $mon_irq
renvoit bien une valeur : 21
Dernière modification par esox (Le 07/09/2008, à 23:53)
Hors ligne
#8 Le 08/09/2008, à 08:23
- Totor
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Les résultats que tu m'indiques me confortent dans mes suppositions :
Tu n'as pas de processus dont le nom comme par 'IRQ-'
Il est donc étonnant que cela ait fonctionné lorsque tu le faisais manuellement....
-- Lucid Lynx --
Hors ligne
#9 Le 08/09/2008, à 08:56
- Alain.g
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bonjour
Sauf que grep '^IRQ-' ne retiendra que les lignes qui commencent par "IRQ". Ça ne risque donc pas de marcher, puisqu'avec ps -ef, toutes les lignes commencent par l'UID.
En faisant cat /proc/interrupts, je remarque que la plupart des lignes commencent par un espace (pour obtenir un effet d'alignement à droite). Je suppose que le problème vient de là, "$mon_irq" contient cet ou ces espaces. On a donc IRQ- 21 au lieu de IRQ-21
D'ailleurs dans ce cas, echo $mon_irq et echo "$mon_irq" ne renverront pas la même chose. L'espace ne sera conservé que dans le second cas.
Dernière modification par Alain.g (Le 08/09/2008, à 08:57)
Xubuntu Karmic !
Hors ligne
#10 Le 08/09/2008, à 09:06
- Totor
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Bien vu !
-- Lucid Lynx --
Hors ligne
#11 Le 08/09/2008, à 11:28
- esox
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Alors que pensez-vous de cela :
chrt -f -p 98 `pidof "IRQ-8"`
mon_irq=$(cat /proc/interrupts | grep ohci1394 | cut -c 2-3)
chrt -f -p 82 `pidof "IRQ-${mon_irq}"`
Maintenant si vous connaissiez une commande pour vérifier que la rtprio des irq-8 et celui de ohci1394 ont bien été changées...
Hors ligne
#12 Le 08/09/2008, à 11:57
- Totor
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Pour connaître le rtprio d'un processus :
ps -o rtprio --pid <numpid>|tail -1
Tu le fais avant, après...et tu compares !
EDIT : je viens de découvrir l'option --no-headers de la commande ps . Donc, tu peux remplacer l'instruction donnée par :
ps -o rtprio --pid <numpid> --no-headers
Dernière modification par Totor (Le 08/09/2008, à 13:09)
-- Lucid Lynx --
Hors ligne
#13 Le 08/09/2008, à 13:24
- esox
Re : [résolu] Récupérer l'irq de ieee1394 et l'utiliser dans un script
Ben ça marche, merci a vous tous !
Hors ligne