linux驅動編寫(音效卡驅動之asoc移植)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Linux下面的音效卡驅動很複雜,根本不是一篇部落格能夠說清楚的。所以,本片文章的目的就是讓同學門快速入門。或者,換句話說,它可以幫助大家在基本瞭解linux音效卡框架的條件下完成音效卡移植工作。
1、linux音效卡驅動在哪個目錄
sound/
2、oss、alsa、asoc是什麼關係
oss是最老的音效卡驅動框架,alsa是最新的音效卡驅動框架,asoc是適配soc結構、且滿足alsa框架的子框架,也是和硬體打交道的底層程式碼。
3、alsa和asoc最重要的框架程式碼在哪裡
alsa的框架程式碼位於sound/core
asoc的框架程式碼位於sound/soc/soc-*.c
4、如何適配asoc框架
asoc一般包括platform、codec、machine這三個結構。
platform指具體的soc晶片,codec指具體的解碼晶片或模組,machine負責將platform和codec關聯在一起。
5、音效卡移植好了,怎麼測試
一般再移植madplayer軟體來測試
6、如何用真實的程式碼來說明asoc的三個模組如何關聯的
a,以三星系列晶片為例,檢視sound/soc/samsung/Kconfig,
config SND_SOC_SAMSUNG_S3C24XX_UDA134X tristate "SoC I2S Audio support UDA134X wired to a S3C24XX" depends on ARCH_S3C24XX select SND_S3C24XX_I2S select SND_SOC_L3 select SND_SOC_UDA134X
b,除了SND_SOC_L3這個不太熟悉的macro之外,Kconfig已經清楚地說明了各模組的關係
SND_SOC_SAMSUNG_S3C24XX_UDA134X,此為machine模組
SND_S3C24XX_I2S,此為platform模組
SND_SOC_UDA134X,此為codec模組
c,根據makefile,可以找到各個macro對應的c檔案
SND_S3C24XX_I2S對應s3c24xx-i2s.c檔案
SND_SOC_SAMSUNG_S3C24XX_UDA134X對應s3c24xx-uda134x.c檔案
d,codec檔案一般單獨放在sound/soc/codecs目錄下
SND_SOC_UDA134X對應sound/soc/codecs下的uda134x.c檔案
e,platform和codec複用資料結構,但是兩者側重點不同
f,對於soc來說,弄懂了asoc基本上就可以移植soc的音效卡了
如果需要深究,還需要進一步閱讀sound/core和sound/soc/下的基礎流程程式碼才行。當然只要編寫好了介面,上層的音效卡、pcm、dsp就會全部建立好,只是細節部分還需要自己一步一步去研究才行。