Linux中用ALSA驅動音效卡流程詳解

來源:互聯網
上載者:User

一、什麼是ALSA ;

Advanced Linux Sound Architecture 的簡稱為 ALSA ,譯成中文的意思是 Linux 進階聲音體系(這是我直譯的,可能譯的不對);一談到體系就有點範圍就太大了,所以ALSA不僅僅是包括對音效卡的支援和驅動;

ALSA具有如下特徵:

代碼:

1、對所有音頻介面的高效支援,從普通使用者的音效卡到專業層級多路音訊裝置;

2、音效卡驅動完全模組化設計;

3、SMP and thread-safe design.

4、開發庫(alsa-lib) 為程式設計提供了簡單、方便,並且擁有有進階的效果和功能;

5、支援舊版本的OSS API 結口,能為大多數的OSS應用程式提供相容;OSS是一個商業性的驅動,OSS有一個簡裝本的代碼已經移入核心和ALSA,其中alsa-oss就是;OSS公司據說目前已經並不存在了;我們沒有必要用OS小型股份有限公司提供的商業版本;用ALSA和OSS簡裝版足夠;

二、關於硬體驅動驅動的必備基礎 ;

1、如何查看硬體晶片;

在Linux作業系統中,所有的硬體都是以晶片集來區分的,品牌並不是最重要的;硬體最重要的標識是晶片集;所以您在討論區求助的時候,只說硬體品牌,而不提供晶片集,大家是協助不了您的,切記;

我們查看硬體的晶片集是的命令是 lspci -v 或者是dmesg,由於dmesg輸出的資訊不太多,不夠直觀;所以經常用的還是lspci -v ;也可以用lshal 擷取;最方便的還是lspci -v;初學者還是用 lspci -v 更好一點;

代碼:

[root@localhost beinan]# lspci -v

我們運行lspci -v 後,如果查看音效卡晶片集,發會現有類似下面的一段;

  [root@localhost beinan]# lspci -v
Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
AC'97 Audio Controller (rev 03)
 Subsystem: Hewlett-Packard Company: Unknown device 3080
     Flags: bus master, medium devsel, latency 0, IRQ 5
     I/O ports at 1c00 size=256
     I/O ports at 18c0 size=64
     Memory at e0100c00 (32-bit, non-prefetchable) size=512
     Memory at e0100800 (32-bit, non-prefetchable) size=256
     Capabilities: [50] Power Management version 2

2、系統核心版本;

[root@localhost beinan]# uname -r -m -p -i

2.6.11-1.1369_FC4 i686 i686 i386

上面的表示的是系統的核心版本,處理器架構等;

提示:如果您自己編譯核心,還要安裝kernel-devel (或 kernel-source), 這個是在系統光碟片或者映像檔案中有帶;如果您想自己用 kernel.org 下載核心,自己編譯,然後再來驅動音效卡,也可以到 kernel.org 上下載最新的核心源碼;

一般情況下,如果系統預設的核心不能驅動音效卡,大多得更換核心,我們建議您先從發行版所提供的升級包來升級核心及源碼;比如Fedora 的擴充項目軟體封裝更新速度極快,我們能通過apt和yum進行kernel的升級;在啟用新核心時,我們不建議您刪除老核心;因為現在Fedora / Redhat 引入apt和yum 更新工具,系統的完整性極為重要;如果系統被破壞,用更新工具變得極為困難;

比如Fedora 的apt和yum升級源升級的核心也解決不了您的問題,我們可能需要自己通過 kernel.org 下載核心來編譯;但也不能刪除以前的核心包及源碼包;一是為了安全,畢竟我們自己編譯核心不是百分之百的成功;另外系統內建的核心及源碼包被系統很多軟體依賴;apt和yum 每次更新軟體包的時候都要檢查系統的完整性;

對於有些發行版,可以直接從從 kernel.org 下載最新的核心;如果從系統提供的核心源碼(kernel-devel或kernel-source)編譯,可能解決不了您的問題;

3、modprobe.conf的內容;

在Fedora Core 4.0 中,核心模組的添加或定義別名是在 /etc/modprobe.conf 檔案;在其它版本可能是 modules.conf ;如果您的系統中存在modprobe.conf ,我們就以這個檔案為準;不同發行版有不同的定義檔案,比如 slackware 是定義在/etc/modules.conf 中,但也要在 /etc/rc.d/rc.modules 開啟相關驅動模組;

modprobe.conf 或者module.conf就是對系統已經載入的模組進行相應的配置,比如設定別名等;這些一般都是自通過工具自動產生的,我們也可以通過查看硬體的文檔和網站,也可以自己添加。為什麼這樣添加,而不是那樣的呢?我也不懂了,因為人家文檔那樣說的,我不會開發,如果懂的開發的,可能會明白;請理解理解我;

比如我用的是855的主板,系統驅動用的是 snd-intel8x0,在/etc/modprobe.conf的配置是如下的內容; 下面這段內容是通過 alsaconf 組態工具自動產生的;

alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
options snd-intel8x0 index=0
remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.