日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得

發(fā)布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

***************************************************************************************************************************

作者:EasyWave ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時間:2014.10.25

類別:Linux應(yīng)用-ALSA音頻架構(gòu)ALSA-lib的移植于編譯 ? ? ?聲明:轉(zhuǎn)載,請保留鏈接

注意:如有錯誤,歡迎指正。這些是我學(xué)習(xí)的日志文章......

***************************************************************************************************************************

一:ALSA音頻架構(gòu)簡介

ALSA是Advanced Linux Sound Architecture,高級Linux聲音架構(gòu)的簡稱,它在Linux操作系統(tǒng)上提供了音頻和MIDI(Musical Instrument Digital Interface,音樂設(shè)備數(shù)字化接口)的支持。在2.6系列內(nèi)核中,ALSA已經(jīng)成為默認(rèn)的聲音子系統(tǒng),用來替換2.4系列內(nèi)核中的OSS(Open Sound System,開放聲音系統(tǒng))。ALSA的主要特性包括:高效地支持從消費(fèi)類入門級聲卡到專業(yè)級音頻設(shè)備所有類型的音頻接口,完全模塊化的設(shè)計(jì),

支持對稱多處理(SMP)和線程安全,對OSS的向后兼容,以及提供了用戶空間的alsa-lib庫來簡化應(yīng)用程序的開發(fā)。

ALSA是一個完全開放源代碼的音頻驅(qū)動程序集,除了像OSS那樣提供了一組內(nèi)核驅(qū)動程序模塊之外,ALSA還專門為簡化應(yīng)用程序的編寫提供了相應(yīng)的函數(shù)庫,與OSS提供的基于ioctl的原始編程接口相比,ALSA函數(shù)庫使用起來要更加方便一些。利用該函數(shù)庫,開發(fā)人員可以方便快捷的開發(fā)出自己的應(yīng)用程序,細(xì)節(jié)則留給函數(shù)庫內(nèi)部處理。當(dāng)然 ALSA也提供了類似于OSS的系統(tǒng)接口,不過ALSA的開發(fā)者建議應(yīng)用程序開發(fā)者使用音頻函數(shù)庫而不是驅(qū)動程序的API。

二:ALSA官方網(wǎng)站

我這里下載的不是最新版本的alsa-lib-1.0.28,而是alsa-lib-1.0.26,其主要原因當(dāng)然是為了版本的穩(wěn)定性才選擇低一點(diǎn)版本。而ALSA-lib的文件架構(gòu)如下所示:

三:ALSA移植和編譯

在ALSA-lib的移植當(dāng)中,還是出現(xiàn)過很多奇怪的問題,當(dāng)然這個跟我當(dāng)前所有的uClibc的版本有關(guān),對于低于uClibc-0.9.23的版本地uClibc,需要對ALSA的庫源碼進(jìn)行更新,否則會出現(xiàn)編譯失敗的問題,這個我一一道來。

1):‘versionsort‘ undeclared的錯誤

‘versionsort‘ undeclared錯誤的提示信息如下所示:

這個是由于uClibc如果低于0.9.23的話,就會出現(xiàn)這個問題,因?yàn)樵趗Clibc-0.9.32以下的版本沒有versionsort函數(shù)導(dǎo)致的,這個可以在uClibc的源碼中看到的,在uClibc-0.9.32的版本里就有versionsort函數(shù),如下所示:

低于這個版本uClibc的就沒有這個函數(shù)和文件的,那么就需要下載一個補(bǔ)丁包,并且將其移植到ALSA-lib中去。如果你的uClibc本身的版本就比這個高的話,可以跳過這個部分。其補(bǔ)丁包文件如下所示:

將這個補(bǔ)丁打上,采用如下命令,如下所示:

這個只是第一步,如果只是這樣打下補(bǔ)丁,還是會出現(xiàn)‘versionsort‘ undeclared錯誤的提示,不過不是在parse.c文件中,而是在conf.c文件中,如下所示:

這樣就不能采用上面的方法再來打補(bǔ)丁的方式來解決,否則會出現(xiàn)versionsort重復(fù)定義的錯誤,怎么辦呢,那就只能將versionsort移植到alsa-lib庫中去。首先從alsa-lib/src/ucm/parse.c中復(fù)制出versionsort的那部分函數(shù)代碼,重新新建一個versionsort.c文件在alsa-lib/src/下,如下所示:

同時修改上圖中的Makefile.am文件,加上這個文件,如下所示:

還需要在alsa-lib/include/local.h文件中加入一行代碼,如下所示:

重新修改編譯腳本build.sh文件,加上一行代碼:autoreconf -ivf,如下所示:

重新編譯整個alsa-lib庫。

2):‘?atomic_add‘之類的重復(fù)定義的錯誤

如果在編譯中遇到這個問題的話,就需要修改configure和configure.ac文件,如果沒有這類錯誤就不需要修改。如下所示:

就需要將-D__arm__拿掉,之后重新編譯整個alsa-lib庫...

3):--with-versioned的問題

這個問題是最難找的問題,不過不加--with-versioned=no的話,會出現(xiàn)靜態(tài)庫調(diào)用snd_pcm_hw_params_get_buffer_size(x,x)可以正確的返回buffer_size的大小,而動態(tài)庫卻無法正確返回,總是返回0。這個地方我整整查了兩天,才找到是這里導(dǎo)致的問題。

四:ALSAlib庫移植總結(jié)

在移植過程中出現(xiàn)過很多狀況,不過這也是一個學(xué)習(xí)的機(jī)會,不過好在問題都全部找到并解決啦。

原文:http://blog.csdn.net/wavemcu/article/details/40453235

總結(jié)

以上是生活随笔為你收集整理的嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。