본문으로 이동

고급 리눅스 사운드 아키텍처

위키백과, 우리 모두의 백과사전.

ALSA
원저자Jaroslav Kysela
개발자ALSA team[1]
발표일1998
안정화 버전
1.2.13[2] / 2024년 11월 12일 (45일 전)
프로그래밍 언어C[3]
운영 체제리눅스
종류오디오
라이선스GPLLGPL
웹사이트www.alsa-project.org

고급 리눅스 사운드 아키텍처(Advanced Linux Sound Architecture, ALSA)는 리눅스 커널의 구성 요소 중 하나로 사운드 카드장치 드라이버를 위한 API를 제공하는 소프트웨어 프레임워크이다.

ALSA가 초기에 프로젝트로 시작될 당시에 내세워졌던 목적은, 사운드 카드 하드웨어의 자동 구성 및 리눅스 시스템 안에 들어가는 복수개의 사운드 장치의 원활한 제어였다. 자로슬라브 키셀라(Jaroslav Kysela(en))가 주도하는 ALSA 프로젝트는 1998년의 그레비스 울트라사운드 사운드 드라이버용 리눅스 장치 드라이버로 처음 시작하였으며 2002년에 2.5 개발 버전(2.5.4-2.5.5)[4] 이후부터 리눅스 커널로부터 갈라져 나온 뒤에 계속 개발되고 있다. 2.6 버전부터 이전 시스템인 오픈 사운드 시스템(OSS)을 기본으로 대체하고 있다. 펄스 오디오JACK 등의 사운드 서버, OpenAL, SDL Audio 등의 고수준 추상화 API가 ALSA를 바탕으로 작동되어 사운드 카드의 장치 드라이버를 구현한다.

ALSA는 GPLLGPL 라이선스 하에 배포된다.

기능

[편집]

ALSA는 오픈 사운드 시스템(OSS)에서 고안 당시 지원하지 못했던 몇가지 다음 기능들을 포함하여 설계되었다.

ALSA는 OSS에 비해 훨씬 많은 양의 복잡한 API를 제공하고 있어, ALSA를 음향 기술로 사용하여 애플리케이션을 개발하는데는 난이도가 높다. ALSA를 OSS를 에뮬레이션 레이어를 제공하는 식으로 설정이 가능하나, 많은 리눅스 배포판에서는 이것이 빠져있거나 사용 불가능하다. ALSA는 사운드 장치의 드라이버 외에, 사용자 공간 라이브러리를 제공하여, 커널 드라이버와의 직접 연동을 위한 API보다 고수준의 API를 사용하여 드라이버의 기능을 사용 가능하도록 하고 있다. 하드웨어 기능에 직접 반영이 가능한 커널 API와는 달리, ALSA의 사용자 공간 라이브러리는, 서로 다른 하드웨어 사이에서도 가능한 한 같은 수준으로 이용할 수 있도록 추상화된 인터페이스를 제공하고 있으며, 일부는 소프트웨어 플러그인 형태로 구현되어 있다. 한가지 예로, 많은 사운드 카드 및 사운드 칩에는 '마스터 볼륨'이라는 컨트롤을 가지지 않으나, 이들 장치를 위해 사용자 공간 라이브러리에서는 'softvol' 플러그인으로 소프트웨어적으로 볼륨 컨트롤 기능을 제공한다. 이를 사용하는 소프트웨어에서는 구체적인 하드웨어 간의 차이에 대해 인식할 필요가 없게된다.

같이 보기

[편집]

각주

[편집]
  1. alsa-project.org - Alsa Team
  2. “Main Page News”. 2024년 11월 12일. 2024년 11월 13일에 확인함. 
  3. “Analysis Summary – ALSA”. Ohloh. 2013년 12월 20일에 원본 문서에서 보존된 문서. 2010년 10월 28일에 확인함. 
  4. http://www.kernel.org/pub/linux/kernel/v2.5/ChangeLog-2.5.5

외부 링크

[편집]
유저랜드커널 공간 간 리눅스의 다양한 계층
사용자 모드 사용자 애플리케이션 예: bash, 리브레오피스, 김프, 블렌더, 0 A.D., 모질라 파이어폭스 등.
저수준 시스템 구성 요소: 시스템 데몬:
systemd, runit, logind, networkd, PulseAudio, ...
윈도 시스템:
X11, Wayland, SurfaceFlinger (안드로이드)
기타 라이브러리:
GTK+, Qt, EFL, SDL, SFML, FLTK, 그누스텝 등.
그래픽스:
메사, AMD 카탈리스트, ...
C 표준 라이브러리 open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (최대 2000개 함수)
glibcPOSIX/SUS 호환을 목적으로 함, uClibc는 임베디드 시스템을 대상으로 함, bionic안드로이드용으로 개발됨 등.
커널 모드 리눅스 커널 stat, splice, dup, read, open, Ioctl, write, mmap, close, exit 등. (약 380개 시스템 호출)
리눅스 커널 시스템 호출 인터페이스(System Call Interface, SCI는 POSIX/SUS 호환을 목표로 함)
프로세스 스케줄링
하위 시스템
IPC
하위 시스템
메모리 관리
하위 시스템
가상 파일
하위 시스템
네트워크
하위 시스템
기타 구성 요소: ALSA, DRI, evdev, LVM, 장치 매퍼, 리눅스 네트워크 스케줄러, 넷필터
리눅스 보안 모듈: SELinux, TOMOYO, 앱아머, 스맥
하드웨어 (CPU, 주 메모리, 데이터 기억 장치 등)