前面一節的內容我們提到,ASoC被分為Machine、Platform和Codec三大部分,其中的Machine驅動負責Platform和 Codec之間的耦合以及部分和設備或板子特定的程式碼,再次引用上一節的內容:Machine驅動負責處理機器特有的一些控制項和音訊事件(例如,當播放音 頻時,需要先行打開一個放大器);單獨的Platform和Codec驅動是不能工作的,它必須由Machine驅動把它們結合在一起才能完成整個設備的 音訊處理工作。

ASoC的一切都從Machine驅動開始,包括音效卡的註冊,綁定Platform和Codec驅動等等,下面就讓我們從Machine驅動開始討論吧。

立你斯 發表在 痞客邦 留言(0) 人氣()

1.  ASoC的由來

ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援嵌入式處理器和移動設備中的音訊Codec的一套軟體體系。在ASoc出現之前,核心對於SoC中的音訊已經有部分的支援,不過會有一些局限性:

  •    Codec驅動與SoC CPU的底層耦合過於緊密,這種不理想會導致程式碼的重複,例如,僅是wm8731的驅動,當時Linux中有分別針對4個平臺的驅動程式碼。
  •    音訊事件沒有標準的方法來通知使用者,例如耳機、麥克風的插拔和檢測,這些事件在移動設備中是非常普通的,而且通常都需要特定於機器的程式碼進行重新對音訊路徑進行配置。
  •   當進行播放或錄音時,驅動會讓整個codec處於上電狀態,這對於PC沒問題,但對於移動設備來說,這意味著浪費大量的電量。同時也不支援通過改變過取樣頻率和偏置電流來達到省電的目的。

ASoC正是為瞭解決上述種種問題而提出的,目前已經被整合至核心的程式碼樹中:sound/soc。ASoC不能單獨存在,他只是建立在標準ALSA驅動上的一個它必須和標準的ALSA驅動框架相結合才能工作。

立你斯 發表在 痞客邦 留言(0) 人氣()

Control介面


Control介面主要讓使用者空間的應用程式(alsa-lib)可以訪問和控制音訊codec晶片中的多路開關,滑動控制項等。對於Mixer(混音)來說,Control介面顯得尤為重要,從ALSA 0.9.x版本開始,所有的mixer工作都是通過control介面的API來實現的。

 

ALSA已經為AC97定義了完整的控制介面模型,如果你的Codec晶片只支援AC97介面,你可以不用關心本節的內容。

立你斯 發表在 痞客邦 留言(0) 人氣()

1. PCM是什麼

文章標籤

立你斯 發表在 痞客邦 留言(0) 人氣()


1. struct snd_card

 

1.1. snd_card是什麼

立你斯 發表在 痞客邦 留言(0) 人氣()

 

一.  概述

    ALSA是Advanced Linux Sound Architecture 的縮寫,目前已經成為了linux的主流音訊體系結構,想瞭解更多的關於ALSA的這一開源專案的資訊和知識,請查看以下網址:http://www.alsa-project.org/

    在內核設備驅動層,ALSA提供了alsa-driver,同時在應用層,ALSA為我們提供了alsa-lib,應用程式只要調用alsa-lib提供的API,即可以完成對底層音訊硬體的控制。

立你斯 發表在 痞客邦 留言(0) 人氣()

1.  Platform驅動在ASoC中的作用

 

面幾章內容已經說過,ASoC被分為MachinePlatformCodec三大部件,Platform驅動的主要作用是完成音訊資料的管理,最終通過CPU的數位音訊介面(DAI)把音訊資料傳送給Codec進行處理,最終由Codec輸出驅動耳機或者是喇叭的音信信號。在具體實現上,ASoCPlatform驅動分為兩個部分:snd_soc_platform_driversnd_soc_dai_driver。其中,platform_driver負責管理音訊資料,把音訊資料通過dma或其他操作傳送至cpu dai中,dai_driver則主要完成cpu一側的dai的參數配置,同時也會通過一定的途徑把必要的dma等參數與 snd_soc_platform_driver進行交互。

立你斯 發表在 痞客邦 留言(0) 人氣()

http://www.360doc.com/content/09/1213/13/79031_11011473.shtml


立你斯 發表在 痞客邦 留言(0) 人氣()

kernel 2.6.35 及之前的版本中struct file_operations 一共有3ioctl


ioctl,unlocked_ioctlcompat_ioctl

立你斯 發表在 痞客邦 留言(0) 人氣()

執行更新時排除 Kernel 更新:讓系統對 Kernel 更新視而不見


* 方法1:執行命令「yum --exclude=kernel update 」# 僅本次更新排除

立你斯 發表在 痞客邦 留言(0) 人氣()