2/15/2016

Audio-ALSA Framework

1. ALSA의 기본구조 

ALSA(Advanced Linux Sound Architecture)로 요즘 거의 AP/SoC들은 ALSA의 기반에 맞추어 각 Driver들을 만들어 이곳에 등록하여 동작하도록 구성한다.
그래서 ALSA Format? 이 존재하고 각 AP/SoC 업체들은 각 자신들의 BSP Driver를 이 Format에 맞추어 동작가능하도록 하고 호환성을 높인다. 

1.1 OSS와 ALSA 

OSS (Open Sound System) 약어로 Linux 2.4에서 공식적으로 사용을 했다고 한다.이때도 Audio Driver 수정했지만, 모르고 수정했다.
ALSA(Advanced Linux Sound Architecture)로 Linux에서만 사용이 되며, Kernel version 2.5에서 부터 추가가 되었다고 한다. 
ALSA라는 이름 부각되는 것은 Linux Kernel 이 2.4 -> 2.5로 변경되면서 Driver 전체구조자체가 Platform 구조로 변경되었기 때문인 것 같다. 

사실 Audio 관련 Driver는 Kernel 2.4 때 주로 많이 직접 Audio Driver를 만들었지만, 그때는  OSS라는 이름을 잘 못들은 것 같다.  
Kernel 2.4 Audio Driver 의 경우는 좀 제 각각인데다가, 필요에따라 확장하고 그랬다. 
또한 각 Audio Chip Vendor에 따라 구조역시 조금씩 다르다. 

OSS 관련내용
  https://en.wikipedia.org/wiki/Open_Sound_System
  http://www.opensound.com/pguide/oss.pdf


1.2 TI 사의 ALSA 전체구조

ALSA의 기본 전체구조는 아래와 같으며, 다른 SOC 플랫폼도 유사하다.
아래 구조는 TI사의 Sitara의 구조에서 가져왔다.
자세한 내용은 아래의 페이지 참조

TI사의 ALSA 전체구조 




관련내용참조  
  https://en.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture
  http://processors.wiki.ti.com/index.php/Sitara_Linux_Audio_Driver_Overview

Linux의 Audio Driver의 기본구조는 ALSA Framework이며, 이에 관련된 Project는 다음과 같으며, 위와 같다.

ALSA 관련문서 
  http://www.alsa-project.org/main/index.php/Documentation
  http://www.alsa-project.org/main/index.php/Download


2. ALSA의 전체구조 

ALSA의 구조를 간단히 2단계로 나누면 간단하다, KERNEL과 APP이다.
하지만 세부화로 나누게되면, KERNEL도 COMMON한 부분이 있고, 포팅을 해야하는 부분이 있기에 이를 또 나누게 된다.
그리고, 이를 USER에게 기능을 제공을 하면, Alsa User Lib가 이를 가지고 사용을 한다.


2.1 ALSA SOC CORE (KERNEL)

  • Codec Driver  :  AIC31x, AIC3100  Audio Codec Driver를 말하며, I2C로 Driver이다. 
  • Platform Driver: TI인 경우 주로 McBSP or McASP Audio Driver이며, DMA기능을 포함한다.
  • Machine Driver: Codec과 Platform Driver를 연결시켜주는 Driver이며, Machine에 대한 설정 담당한다. 

Embeded Linux에서는 해당 Chip마다 각 ALSA Soc Driver를 제공하며,Framework이 SOC마다 약간 상이하며, Version에 따라 다를 수 있다.
ALSA Library와 직접적으로 통신을 하며, 기능을 제공을 한다.
  http://www.alsa-project.org/main/index.php/ASoC


2.2 ALSA Library   (USER)

  • ALSA PCM 기본설명
  http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
  http://www.alsa-project.org/alsa-doc/alsa-lib/
  http://www.alsa-project.org/main/index.php/ALSA_Library_API


2.3 ALSA Application (USER)

  • ALSA를 이용한 다양한 Application Program들
ex) gstremer, sndlib 등 native version에 따라 지원되는 app이 다르다.
  http://www.alsa-project.org/main/index.php/Applications
Android로 가면, Hal이 될수도 있다.

  • ALSA Test (alsa-utils)
ALSA Test program (aplay, arecord, amixer )
  http://alsa.opensrc.org/Alsa-utils
  ftp://ftp.alsa-project.org/pub/utils/