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