2017-09-25 64 views
0

我試圖在amlogic設備上調試聲音系統。 amixer和alsamixer沒有按預期工作,並且amixer可能會導致系統崩潰。我所苦惱的是,驅動程序通過構建一個snd_kcontrol對象來傳遞訪問硬件寄存器的方法,所有這些都是在ALSA網站上編寫ALSA驅動程序中描述的。但是,amixer cset從control.c調用snd_ctl_elem_write,它指向snd_ctl_t對象中的element_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_write指向snd_ctl_hw_elem_write(),它發出系統調用。

在內核中,打開的設備文件由鏈接到struct snd_cardstruct snd_ctl_file表示。

+0

再次感謝。我感到困惑的是,每張卡只有一個snd_ctl_t,而可能有很多snd_kcontrols,所以它們實際上是分開的實體和到寄存器的不同路由。 – graham