一、alsa-lib移植

alsa-utils工具通过调用到alsa-lib库来对ALSA框架下的声卡进行操作。

1. 下载源码

下载地址:​​http://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.7.1.tar.bz2​

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa

2. 移植

(1)创建alsa-lib存放的目录

需要在开发板和ubunut中创建一个路径和名字一样的目录,为/usr/share/arm-alsa。

在ubuntu中创建:

sudo mkdir

在开发板根文件系统中创建:

mkdir

(2)解压alsa-lib源码

tar

(3)配置编译

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_02

mkdir alsa-lib-1.2.7.1-build
cd alsa-lib-1.2.7.1
./configure --host=arm-linux-gnueabihf --prefix=/home/mculover666/develop/alsa/alsa-lib-1.2.7.1-build --with-configdir=/usr/share/arm-alsa CC=arm-linux-gnueabihf-gcc

其中​​--prefix​​​用来设置install的路径,​​--with-configdir​​​用于设置alsa-lib编译出来的配置文件存放位置,​​CC​​用来设置交叉编译器。

(4)编译

make

(5)安装

sudo su
source

确保root用户能找到编译器,再继续:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_03

make install

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_04

切换回普通用户:

su mculover666

查看编译目录:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_开发板_05


查看安装目录:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_根文件系统_06


(6)拷贝lib文件

将编译目录下的lib目录中的所有文件都拷贝到开发板根文件系统的/usr/lib目录下

cd ../alsa-lib-1.2.7.1-build 
sudo cp

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_07


查看拷贝结果:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_根文件系统_08


(7)拷贝配置文件

cd /usr/share/arm-alsa
sudo cp

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_开发板_09

二、alsa-utils移植

alsa-utils是ALSA的一些小工具集合,可以通过这些小工具测试声卡。

1. 下载源码

axel http://www.alsa-project.org/files/pub/utils/alsa-utils-1.2.7.tar.bz2

2. 移植

(1)解压源码

tar

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_10


(2)编译配置

创建编译文件夹:

mkdir

编译配置:

cd alsa-utils-1.2.7
./configure --host=arm-linux-gnueabihf --prefix=/home/mculover666/develop/alsa/alsa-utils-1.2.7-build --with-alsa-inc-prefix=/home/mculover666/develop/alsa/alsa-lib-1.2.7.1-build/include/ --with-alsa-prefix=/home/mculover666/develop/alsa/alsa-lib-1.2.7.1-build/lib/ --disable-alsamixer --disable-xmlto CC=arm-linux-gnueabihf-gcc

(3)编译

make

遇到问题:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_11


i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_12


解决方法:创建两个空文件。

touch alsaconf/po/t-ja.gmo
touch

再次make,可以编译成功。

(4)安装

sudo make install

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_13


安装完可以看到安装文件夹下的文件:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_14


看看alsa-utils提供的工具:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_15


一定要使用file检查一下可执行文件的类型,看看是不是交叉编译的。

(5)复制到开发板根文件系统

cd alsa-utils-1.2.7-build
sudo cp -rfa bin/* ~/develop/imx6ull/rootfs-busybox-imx6ull/source_busybox/bin
sudo cp -rfa sbin/* ~/develop/imx6ull/rootfs-busybox-imx6ull/source_busybox/sbin
sudo cp

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_16


(6)设置配置文件路径

进入开发板根文件系统,编辑文件:

vim

添加以下内容:

export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf

至此,移植完成,看一下根文件系统大小:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_根文件系统_17


打包根文件系统:

tar

烧录进去之后测试。

三、声卡设置与测试

1. amixer使用方法

(1)查看帮助信息

amixer --help

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_18


(2)查看设置项

amixer scontrols

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_19


(3)查看设置值

amixer scontents

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_根文件系统_20

2. 播放音乐

(1)设置声卡

设置耳机双声道的音量:

amixer sset Headphone 100,100

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_alsa_21

设置扬声器双声道的音量:

amixer sset Speaker 120,120

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_22


查看左右声道PCM格式混合是否开启:

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_linux_23


开启:

amixer sset 'Right Output Mixer PCM' on
amixer sset 'Left Output Mixer PCM'

i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)_根文件系统_24


(2)播放音乐

aplay test.wav

此时开发板插耳机会从耳机播放,拔出耳机会从扬声器播放。

参考资料

源码与镜像

根文件系统源文件:​​https://git.code.tencent.com/mculover666/rootfs-busybox-imx6ull​​。

制作出的rootfs镜像存档:netdisk / atk-imx6ull / rootfs / rootfs_minimal_v1_1.tar.bz2(不对外开放)。