交叉编译alsa-lib库,amixer和aplay工具

1. 导出alsa安装目录
export gliethttp_alsa_lib=/usr/local/alsa
mkdir $gliethttp_alsa_lib
sudo chown luther:luther $gliethttp_alsa_lib -R
2. 编译alsa-lib库
./configure --build=i386 --host=arm-linux --disable-python --prefix=$gliethttp_alsa_lib
make;make install
3. 编译alsa-utils
./configure --build=i386 --host=arm-linux --with-curses=ncurses --disable-xmlto --with-alsa-inc-prefix=$gliethttp_alsa_lib/include --with-alsa-prefix=$gliethttp_alsa_lib/lib --prefix=$gliethttp_alsa_lib
make;make install

首先我们可以直接将$gliethttp_alsa_lib下的bin,sbin,lib使用cp -a拷贝到嵌入式root根/文件系统,
但是我们不能直接拷贝$gliethttp_alsa_lib到嵌入式根文件系统/根目录下,因为alsa lib中保存了库的
绝对路径信息,amixer或者aplay使用lib库时,lib库会使用绝对地址来访问share共享文件中的配置文件,所以必须
在嵌入式开发板上建立同名的安装时share绝对路径,这样才能正常使用,否则就会提示:
# amixer
ALSA lib conf.c:3601:(snd_config_update_r) Cannot access file /usr/local/alsa/share/alsa/alsa.conf
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL default
amixer: Mixer attach default error: No such file or directory
随后即便我们设置了ALSA_CONFIG_PATH路径,也不管用了,同样会提示下面的错误log
# export ALSA_CONFIG_PATH=/usr/local/alsa/share/alsa/alsa.conf
# amixer
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL default
amixer: Mixer attach default error: No such file or directory
# strulpi_dat3_int_set(),dev:c040bbe0
于是我们只能在嵌入式文件系统的根目录下建立同名的$gliethttp_alsa_lib目录,然后将alsa配置文件内容拷贝过去
mkdir -p /vobs/initramfs/$gliethttp_alsa_lib
cp -a $gliethttp_alsa_lib/* /vobs/initramfs/$gliethttp_alsa_lib/
好了一切搞定,alsa lib库安装应该注意的地方也就这么多了[luther.gliethttp]

4. 创建alsa控制节点
mknod /dev/snd/controlC0 c 116 0
5. 创建alsa对应pcm通道节点
a. 查看当前声卡个数
cat /proc/asound/cards
b. 查看该声卡对应的pcm信息
ls /proc/asound/card0
比如输出如下信息:id pcm0c pcm0p pcm1c pcm1p
c. 建立节点
mknod /dev/snd/hwC0D0 c 116 4
mknod /dev/snd/pcmC0D0p c 116 16
mknod /dev/snd/pcmC0D1p c 116 17
mknod /dev/snd/pcmC0D0c c 116 24
mknod /dev/snd/pcmC0D1c c 116 25
mknod /dev/snd/seq c 116 1
mknod /dev/snd/timer c 116 33

程序库下载地址: http://www.alsa-project.org/main/index.php/Download

你可能感兴趣的:(交叉编译alsa-lib库,amixer和aplay工具)