Bonjour,
petit résumé du contexte. J'ai une nouvelle carte son USB, et pour changer sa fréquence d'chantillonage je dois passer un paramétre au chargement du module.
Je vais faire classique:
- créer un fichier dans /etc/modprobe.d/
- y mettre une ligne: options snd-usb-audio device_setup=2
Rien de bien compliqué.
Sauf que j'ai 2 carte son en usb, donc qui utilisent le même module.
comment faire pour que ce paramètre ne soit passé qu'a une des cartes ?
passer un paramétre à un module kernel , version avancée Le sujet est résolu
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Code : Tout sélectionner
modinfo -p snd-usb-audio
Par contre je ne sais pas comment faire pour appliquer telle valeur à tel adaptateur, peut-être en combinant avec les paramètres vid et pid rapportés par lsusb (préfixés par 0x en notation hexadécimale) s'ils sont différents pour les deux.adaptateurs.
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
j'ai fouillé dans pas mal de recoins de l'internet, mais impossible de trouver comment ajouter une condition au changement de parametre dans modprobe.conf.
Ca doit pourtant bien exister!
Ca doit pourtant bien exister!
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
J'ai finalement demandé à chatGPT
Il me dit de modifier la ligne en :
Je n'ai pas de quoi faire le test ce soir, je vous tiens au courant!

Il me dit de modifier la ligne en :
Code : Tout sélectionner
options snd-usb-audio device_setup=1 idVendor=194f, idProduct=010c serial=<serial_number>
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Qu'est-ce que tu veux dire ?piratebab a écrit : 18 janv. 2023, 18:53 comment ajouter une condition au changement de parametre dans modprobe.conf.
C'est grosso modo ce que je suggérais. Par contre il ne faut pas de virgule entre les paramètres, seulement entre les valeurs d'un paramètre de type tableau, a priori il faut préfixer les valeurs hexadécimales par 0x et je ne vois pas de paramètre "serial" pour ce module dans le noyau 5.10 de bullseye.piratebab a écrit : 18 janv. 2023, 22:07 options snd-usb-audio device_setup=1 idVendor=194f, idProduct=010c serial=<serial_number>
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Bonjour Pascal, je ne cherche pas à modifier plusieurs paramètre s, mais un seul: device_setup
Par contre, je ne veux pas qu'il soit changé à chaque fois que le module est chargé, mais uniquement si il est chargé suite à la connection de la carte ayant les caractéristiques idVendor=194f, idProduct=010c, serial=XXX
Si une autre interface son USB est connectée, et que le module snd-usb-audioest chargé, le paramètre device_setup ne doit pas être changé
Par contre, je ne veux pas qu'il soit changé à chaque fois que le module est chargé, mais uniquement si il est chargé suite à la connection de la carte ayant les caractéristiques idVendor=194f, idProduct=010c, serial=XXX
Si une autre interface son USB est connectée, et que le module snd-usb-audioest chargé, le paramètre device_setup ne doit pas être changé
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Le module est chargé par udev une seule fois lors de la détection de la première interface, et pas pour chaque interface. Et les paramètres ne sont pas modifiables une fois le module chargé car tous les pseudo-fichiers dans /sys/module/snd_usb_audio/parameters sont en lecture seule. Je pense que les valeurs doivent être définies pour toutes les interfaces lors du chargement du module, du moins pour celles qui doivent avoir des valeurs spécifiques qui ne sont pas par défaut.
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Merci Pascal, je comprends mieux pour j'ai trouvé des solutions via systemctl, qui lance le module en fonction de la carte connectée.
Pour si on veut connecter simultanément plusieurs cartes différentes, cela va poser problème si le même paramètre doit avoir des valeurs différentes suivant le type de carte.
Jusqu'a présent c'était un cas très hypothétique car JACK ne savait gérer qu'une carte à la fois (on pouvait contourner en agrégeant 2 cartes, mais c'est compliqué), mais avec l'arrivée de pipewire, on peut gérer simultanément plusieurs cartes
Pour si on veut connecter simultanément plusieurs cartes différentes, cela va poser problème si le même paramètre doit avoir des valeurs différentes suivant le type de carte.
Jusqu'a présent c'était un cas très hypothétique car JACK ne savait gérer qu'une carte à la fois (on pouvait contourner en agrégeant 2 cartes, mais c'est compliqué), mais avec l'arrivée de pipewire, on peut gérer simultanément plusieurs cartes
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Peux-tu préciser de quoi il s'agit ?piratebab a écrit : 20 janv. 2023, 11:03 j'ai trouvé des solutions via systemctl, qui lance le module en fonction de la carte connectée.
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Bonsoir pascal,
tout d'abord un tuto redhat, je ne sais pas si ça marchera sous debian
https://access.redhat.com/documentation ... le_loading
Diverses propositions pour influer le chargement d'un module via systemd
https://unix.stackexchange.com/question ... -boot-time
Comment systemd charge un module
https://www.freedesktop.org/software/sy ... oad.d.html
https://wiki.archlinux.org/title/Kernel ... e_handling
Je n'ai pas encore compris comment ça s'organise entre systemd et udev, mais j'ai compris que modalias était impliqué.
Pour revenir sur ta proposition initiale, on peut effectivement passer un tableau de valeurs au paramètre device-setup qui seront passé successivement aux diverses instances du module (une pour chaque carte son).
Malheureusement, l'ordre des paramètres est lié à l'ordre de cartes son (hw0, hw1 ..), qui lui même va dépendre de l'ordre dans lequel on connecte les cartes.
tout d'abord un tuto redhat, je ne sais pas si ça marchera sous debian
https://access.redhat.com/documentation ... le_loading
Diverses propositions pour influer le chargement d'un module via systemd
https://unix.stackexchange.com/question ... -boot-time
Comment systemd charge un module
https://www.freedesktop.org/software/sy ... oad.d.html
https://wiki.archlinux.org/title/Kernel ... e_handling
Je n'ai pas encore compris comment ça s'organise entre systemd et udev, mais j'ai compris que modalias était impliqué.
Pour revenir sur ta proposition initiale, on peut effectivement passer un tableau de valeurs au paramètre device-setup qui seront passé successivement aux diverses instances du module (une pour chaque carte son).
Malheureusement, l'ordre des paramètres est lié à l'ordre de cartes son (hw0, hw1 ..), qui lui même va dépendre de l'ordre dans lequel on connecte les cartes.
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Non, /etc/sysconfig n'existe pas dans Debian, c'est spécifique à RedHat et dérivées. De toute façon ça ne fait que charger des modules au démarrage. Un équivalent approximatif traditionnel dans Debian est /etc/modules, qui est maintenant un lien symbolique pointant dans /etc/modules-load.d/ géré par systemd.
Tout ça est connu et ne répond pas spécifiquement à ta problématique de carte son USB multiple.piratebab a écrit : 20 janv. 2023, 20:20 Diverses propositions pour influer le chargement d'un module via systemd
Partie statique : au démarrage, systemd lance le service systemd-modules-load qui charge les modules listés dans /etc/modules-load.d/*.conf, /run/modules-load.d/*.confpiratebab a écrit : 20 janv. 2023, 20:20 Je n'ai pas encore compris comment ça s'organise entre systemd et udev
et /usr/lib/modules-load.d/*.conf avec les paramètres éventuels spécifiés.
Partie dynamique: le noyau notifie udev lors de l'ajout d'un périphérique. udev lance modprobe avec l'alias hotplug du périphérique (construit à partir de ses identifiants PCI, USB...). modprobe charge le ou les modules correspondant à cet alias. Si le module est déjà chargé, cela ne fait rien.
Erreur conceptuelle : il n'y a qu'une seule instance du module qui gère toutes les instances de périphériques correspondants.piratebab a écrit : 20 janv. 2023, 20:20 on peut effectivement passer un tableau de valeurs au paramètre device-setup qui seront passé successivement aux diverses instances du module (une pour chaque carte son).
Je n'en suis pas si sûr. Si c'était le cas, à quoi serviraient les paramètres pid et vid ? Ce ne sont manifestement pas des valeurs qu'on peut affecter à un périphérique mais des caractéristiques intrinsèques d'un périphérique qui ne peuvent à mon avis servir que de critère de sélection pour appliquer les valeurs de même rang dans les autres paramètres de type tableau. Mais ce n'est pas clair.piratebab a écrit : 20 janv. 2023, 20:20 Malheureusement, l'ordre des paramètres est lié à l'ordre de cartes son (hw0, hw1 ..), qui lui même va dépendre de l'ordre dans lequel on connecte les cartes.
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Concernant l'ordre des paramètres et des cartes son, c'est l'info que m'a donnée par le concepteur du driver pour la carte studio 1810c.
j'ai fait un test:
- j'ai mis uniquement un paramétre (device_setup=1)
- je connecte la studio 1810C, puis la focusrite (elle se retrouvent numérotées dans cet ordre), le paramètre est bien passé à la presonus Presonus Studio 1810c, device_setup: 1
- je connecte la focusrite, puis la studio 1810c, le paramètre n'est pas passé à la studio 1810c
j'ai fait un test:
- j'ai mis uniquement un paramétre (device_setup=1)
- je connecte la studio 1810C, puis la focusrite (elle se retrouvent numérotées dans cet ordre), le paramètre est bien passé à la presonus Presonus Studio 1810c, device_setup: 1
- je connecte la focusrite, puis la studio 1810c, le paramètre n'est pas passé à la studio 1810c
Je suis d'accord avec toi qu'il doit étre possible d'utiliser les valeurs de pid et vid, pour passer un paramètre de façon conditionnelle , mais je n'arrive pas à trouver des infos la dessus.[ 1015.707720] usb 1-2: Presonus Studio 1810c, device_setup: 0
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Tu veux device_setup=1 ou 2 ? Dans ton message initial c'était 2, ensuite c'est devenu 1.
Si tu veux appliquer device_setup=1 au périphérique qui a les identifiants 194f:010c, as-tu essayé les paramètres suivants ?
Pour tester sans t'embêter avec la configuration de modprobe ou la ligne de commande du noyau dans un premier temps :
Si tu veux appliquer device_setup=1 au périphérique qui a les identifiants 194f:010c, as-tu essayé les paramètres suivants ?
Code : Tout sélectionner
device_setup=1 idVendor=0x194f idProduct=0x010c
Code : Tout sélectionner
modprobe -r snd-usb-audio
modprobe snd-usb-audio device_setup=1 idVendor=0x194f idProduct=0x010c
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Je vais tester ça.
La valeur de device_setup pour cette carte son définie la fréquence d'échantillonage et le nombre d'entrées sorties utilisables
La valeur de device_setup pour cette carte son définie la fréquence d'échantillonage et le nombre d'entrées sorties utilisables
je suis généralement en 48kHz, mais pas toujours.default: 8out/14in @ 96kHz
#1 : 8out/18in @ 48kHz
#2 : 6out/8in @ 192kHz
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Petit test
Je connecte la carte studio 1810c, le paramètre est pris en compte.
Mais si je connecte la focusrite, puis la studio 1810c, j'ai une erreur et le paramètre n'est pas pris en compte par la 1810c (je suis en valeur par défaut à 96 kħz au lieu de 48 kħz)
Je connecte la carte studio 1810c, le paramètre est pris en compte.
Code : Tout sélectionner
new high-speed USB device number 7 using xhci_hcd
[ 677.242717] usb 1-2: New USB device found, idVendor=194f, idProduct=010c, bcdDevice= 2.51
[ 677.242719] usb 1-2: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[ 677.242720] usb 1-2: Product: Studio 1810c
[ 677.242721] usb 1-2: Manufacturer: PreSonus
[ 677.242722] usb 1-2: SerialNumber: SC8E19060141
[ 677.400660] usb 1-2: Presonus Studio 1810c, device_setup: 1
[ 677.400662] usb 1-2:[b] (8out/18in @ 48kHz[/b])
ew high-speed USB device number 5 using xhci_hcd
[ 602.623538] usb 1-9: New USB device found, idVendor=1235, idProduct=800c, bcdDevice= 2.7a
[ 602.623541] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 602.623542] usb 1-9: Product: Scarlett 18i20 USB
[ 602.623543] usb 1-9: Manufacturer: Focusrite
[ 602.739529] snd_usb_audio: unknown parameter 'idVendor' ignored
[ 602.739532] snd_usb_audio: unknown parameter 'idProduct' ignored
[ 605.181009] usbcore: registered new interface driver snd-usb-audio
[ 614.435096] usb 1-2: new high-speed USB device number 6 using xhci_hcd
[ 614.583797] usb 1-2: New USB device found, idVendor=194f, idProduct=010c, bcdDevice= 2.51
[ 614.583799] usb 1-2: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[ 614.583800] usb 1-2: Product: Studio 1810c
[ 614.583801] usb 1-2: Manufacturer: PreSonus
[ 614.583801] usb 1-2: SerialNumber: SC8E19060141
[ 614.746572] usb 1-2: Presonus Studio 1810c, device_setup: 0
[ 614.746574] usb 1-2: (8out/14in @ 96kHz)
-
- Contributeur
- Messages : 930
- Inscription : 05 août 2016, 20:25
- Status : Hors-ligne
Je devrais me relire avant et après avoir posté... Les noms des paramètres sont incorrects, j'ai bêtement recopié la sortie de dmesg pour récupérer les identifiant. Il fallait lire
Accessoirement, as-tu vérifié si device_setup=1 (ou 2, selon ton besoin) avait un effet indésirable sur l'autre carte son ? S'il n'y en a pas, tu pourrais simplement mettre device_setup=1,1 (ou 2,2) pour appliquer la valeur aux deux cartes son.
Code : Tout sélectionner
modprobe -r snd-usb-audio
modprobe snd-usb-audio device_setup=1 vid=0x194f pid=0x010c
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
J'ai effectivement regardé rapidement l'impact, je n'en ai pas vu. Mais la focusrite est une carte complexe, je n'ai pas tout vérifié.
Je referai des tests et je te tiens au courant
Je referai des tests et je te tiens au courant
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
J'étais moi aussi passé à coté du mauvais nom de paramètre.
impossible de décharger le module en cours d'utilisation
J'ai donc modifier le fichier de configuration dans modprobe.d et redémarrer (j'aurais pu simplement débrancher/rebrancher les câble USB, mais la machine est dans une piéce non chauffée :) je suis donc en ssh)
Je n'ai pas d'erreur dans la sortie de dmesg, et le papamétre est pris en compte;
Je vais tester d'autresconfiguration de carte au boot (sur cet essai, le 2 étaient branchées au boot)
impossible de décharger le module en cours d'utilisation
Code : Tout sélectionner
modprobe: FATAL: Module snd_usb_audio is in use
Je n'ai pas d'erreur dans la sortie de dmesg, et le papamétre est pris en compte;
Je vais tester d'autresconfiguration de carte au boot (sur cet essai, le 2 étaient branchées au boot)
- piratebab
- Site Admin
- Messages : 5860
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : En ligne
Un dev alsa vient de me répondre, il me dit que pour plusieurs cartes il faut mettre
mais je ne comprends pas comment assigner des valeurs différentes a device_setup pour différentes cartes connectées
Code : Tout sélectionner
options snd-usb-audio vid=0xXXXX,0xXXXX pid=0xXXXX,0xXXXX device_setup=1,0