Linux聲卡驅動移植和測試

一、分析驅動程序,根據開發板修改代碼

代碼太長,就不貼了,幾個注意點:

1、 查看開發板原理圖和S3C2410的datasheet,UDA1341的L3MODE、L3DATA、L3CLOCK分別與S3C2410的GPB2、GPB3、GPB4相連,IISLRCK=GPE0, IISSCLK=GPE1, CDCLK=GPE2,IISSDI=GPE3, IISSDO=GPE4,部分代碼如下:


2、 兩個重要結構體:audio_buf_t和audio_stream_t,其中audio_stream_t 爲音頻流數據組成了一個環形緩衝區;


3、 file_operations結構體,open()、write()、read()、ioctl()、release()等函數的底層實現;



4、 DMA的原理;

5、 驅動加載和卸載等;

二、向內核中添加聲卡驅動

1、  配置內核中的聲卡選項;

注意:UDA1341的驅動程序s3c2410-oss.c在linux/sound/oss/目錄下(內核版本:Linux-2.6.8.1)。

在內核樹目錄下輸入make menuconfig,會跳出內核配置界面:


然後按鍵盤的向下導航鍵,下拉至Sound選項:


按回車,進入Sound選項界面:


選中“Open Sound System”選項,回車進入OSS選項界面:


分別選中“Open Sound System(DEPRECATED)”和“S3C2410 audio support”兩項,按空格,直到選項前面<>內變成*,然後按Tab鍵退出,保存配置信息:


ps*表示將驅動程序編譯進內核,空表示不編譯驅動程序,M表示將驅動程序編譯成模塊。

2、  編譯內核,生成內核鏡像zImage;

在內核樹目錄下,輸入命令make zImage,編譯成功後會在linux/arch/arm/boot/目錄下生成zImage文件。

3、  打開Samba服務器,將內核鏡像zImage共享到windows平臺下,再通過DNW軟件將zImage下載到開發板上;

經過以上步驟,就成功地將聲卡驅動程序添加進內核。

三、測試聲卡

1、啓動開發板,查看聲卡設備;


從顯示結果可以看出,驅動程序已經成功地在內核中註冊了兩個字符設備:dsp和mixer,dsp的主設備號是14,次設備號是3;mixer的主設備號也是14,次設備號是0。

2、查看聲卡能否正常錄音和播放;


創建臨時文件夾audio,使用命令實現錄音,生成音頻文件audio.wav,使用命令實現放音,通過測試,發現聲卡工作正常。


遇到的問題:

測試聲卡時,出現錯誤“cat :Read  error:Illegal  seek”。

解決辦法:

修改聲卡驅動程序,將驅動程序裏的smdk2410_audio_read函數中的部分代碼註釋了,如下圖紅色圈出部分。


注意:修改驅動程序後,需要重新編譯內核,生成zImage文件並下載到開發板上。

2014年6月13日星期五16:23

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章