2017-09-25 4 views
0

J'essaie de déboguer le système audio sur un appareil amlogic. amixer et alsamixer ne fonctionnent pas comme prévu et amixer peut planter le système. Ce que je lutte avec, c'est que les pilotes passent des méthodes pour accéder aux registres de matériel en construisant un objet snd_kcontrol tout comme décrit dans Écrire un pilote ALSA sur le site Web ALSA. Mais amixer cset appelle snd_ctl_elem_write de control.c qui fait référence à element_write dans un objet snd_ctl_t.Besoin d'aide pour comprendre les pilotes alsa

Je ne vois aucun lien entre les objets snd_kcontrol définis et les objets snd_ctl_t, donc je ne vois pas comment amixer est supposé écrire sur le matériel. Comment cela se fait-il normalement?

+0

Ce lien est établi par 'cnd_ctl_add()'. –

+0

Merci, mais afaict snd_ctl_add() ne prend qu'une structure snd_card et snd_kcontrol. Rien à voir avec snd_ctl_t. Désolé si je suis épais. – graham

Répondre

0

dans l'espace utilisateur, un dispositif de commande est représenté par snd_ctl_t, qui contient le descripteur de fichier du noeud périphérique. element_write indique snd_ctl_hw_elem_write(), qui émet un appel système. Dans le noyau, un fichier de périphérique ouvert est représenté par un struct snd_ctl_file, qui est lié au struct snd_card.

+0

Merci encore. Ce qui me confus est qu'il n'y a qu'un seul snd_ctl_t par carte alors il peut y avoir beaucoup snd_kcontrols, donc ils sont des entités très distinctes et différentes voies dans les registres. – graham