一、ALSA架构
ALSA是Linux系统中为声卡提供驱动的内核组件。它提供了专门的库函数来简化相应应用程序的编写。

ALSA系统包括7个主要部分:
驱动包:alsa-driver
开发包:alsa-libs
开发包插件:alsa-libplugins
设置管理工具:alsa-utils
OSS接口兼容工具:alsa-oss
特殊音频固件支持:alsa-firmware
- 其他声音相关处理小程序包alsa-tools
二、移植ALSA库及工具
移植ALSA主要是要移植alsa-driver(现在通常指的是内核中的sound子系统)、alsa-lib和alsa-utils这三个部分。
alsa-lib:这是一个用户空间的函数库,它封装了底层驱动提供的功能,通过libasound.so这个文件提供API给应用程序使用。
alsa-utils:这是一套实用工具集合,比如播放音频的aplay、录音用的arecord等工具。这些工具都是基于alsa-lib来实现其功能的。
简单来说,alsa-utils就像是用来测试音频设备是否正常工作的软件;而alsa-lib则是位于应用层与硬件驱动之间的一个中间层,它提供了访问音频硬件所需的接口。当你运行alsa-utils里的程序时,实际上是通过调用alsa-lib提供的API来控制音频编解码芯片的。由于alsa-lib本身还需要依赖于底层的驱动程序才能工作,所以在移植过程中,正确的步骤应该是先移植驱动程序,然后是alsa-lib,最后才是alsa-utils。
2.1、ALSA库下载
ALSA首先需要在ALSA的官网上下载官网``http://www.alsa-project.org``下载alsa-lib和alsa-utils。

如上图所示我们下载的版本为:
alsa-lib-1.2.2.tar.bz2
alsa-utils-1.2.2.tar.bz2
2.2、ALSA Lib编译
ALSA Lib移植不需要修改源码,只需要重新编译库代码以支持自己的平台。
tar -xvf alsa-lib-1.0.27.2.tar.bz2
cd alsa-lib-1.0.27.2
CC=arm-none-linux-gnueabi-gcc
./configure --host=arm-linux --prefix=/home/m/3rd/alsa/install/
make
make install2
3
4
5
6
在上述命令中./configure配置的几个重要的配置选项解释如下:
host指定编译器,这里指定为交叉编译器,运行本配置命令前务必保证编译器已经可以在Shell下可以直接执行了。prefix指定编译后文件的安装路径,这样安装命令就还会指定的这个目录中创建lib和include两个目录。
2.3、ALSA Util编译
tar -xvf alsa-utils-1.0.27.2.tar.bz2
cd alsa-utils-1.0.27.2
CC=arm-none-linux-gnueabi-gcc
./configure --prefix=/home/m/3rd/alsa/install/ --host=arm-linux --with-alsa-inc-prefix=/home/m/3rd/alsa/install/include --with-alsa-prefix=/home/m/3rd/alsa/install/lib --disable-alsamixer --disable-xmlto --disable-nls
make2
3
4
5
2.4、ALSA库和工具移植入嵌入式平台
ALSA库和测试工具的移植就是将相应库文件和可执行文件放在目标板上,以下文件 必须被拷贝至对应位置 :
ALSA Lib文件,放在/lib/中。
So --- /lib
- 配置文件放在
/usr/local/share中,与编译时指定的目录相同。
Etc --- /usr/local/share
- 测试应用文件,
ALSA Util能产生aplay、amixer、arecord,我们可以把这些可执行文件放在/usr/sbin中。
Bin --- /usr/sbin

- 内核目录中保证有
/dev/snd/目录,这个目录下存放controlC0,pcmC0D0,/usr/sbintimer,timer这些设备文件,如果这些设备文件已经在/dev目录下,可手动拷贝到/snd目录中。