2017-09-25 12 views
0

私は、amlogicデバイスでサウンドシステムをデバッグしようとしています。 amixerとalsamixerは期待どおりに動作せず、amixerはシステムをクラッシュさせる可能性があります。私が苦労しているのは、ドライバがALSAウェブサイトにALSAドライバを書き込むので説明されているように、snd_kcontrolオブジェクトを構築することによってドライバがハードウェアレジスタにアクセスするためのメソッドを渡すということです。しかし、amixer csetは、snd_ctl_tオブジェクト内のelement_writeを参照するcontrol.cからsnd_ctl_elem_writeを呼び出します。alsaドライバの理解に役立つ

定義済みのsnd_kcontrolオブジェクトとsnd_ctl_tオブジェクトの間にリンクがないため、どのようにamixerがハードウェアに書き込むのか分かりません。それはどのようにして正常に行われますか?

+0

このリンクは 'cnd_ctl_add()'によって確立されます。 –

+0

ありがとう、afaict snd_ctl_add()は、snd_cardとsnd_kcontrol構造体しか取ることができません。 snd_ctl_tとは何も関係ありません。もし私が厚いなら、申し訳ありません。 – graham

答えて

0

ユーザ空間では、制御デバイスはsnd_ctl_tで表され、デバイスノードのファイルハンドルが含まれます。 element_writesnd_ctl_hw_elem_write()を指し、システムコールを発行します。

カーネルでは、開かれたデバイスファイルは、にリンクされているstruct snd_ctl_fileで表されます。

+0

もう一度ありがとうございます。私は混乱していますが、カードごとにsnd_ctl_tが1つしかないのに対し、snd_kcontrolsは多数ある可能性があるため、実際には別々のエンティティであり、レジスタへの異なるルートです。 – graham

関連する問題