制作buildroot根文件系统(二):使用tinyalsa播放音频¶
** 本小节的文章为网友投稿,仅供参考 **
主机环境:ubuntu16.04-64bit
硬件版本:野火imx6ull-pro emmc
一、制作根文件系统¶
详细的制作方法请参考:制作buildroot根文件系统(一):根文件系统和Qt5例程
本篇只介绍 buildroot 中关于 tinyalsa 的配置。
1.关于 tinyalsa¶
目前 linux 中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。
但是 ALSA 较为庞大,对于资源有限,可以满足需求的前提下,ALSA 的 简化版 tinyalsa 是个不错的选择。
tinyalsa 编译后会生成四个小工具:
tinypcminfo
用于查看pcm通道的相关信息。
tinymix
用于查看设置各项配置参数。
tinycap
简易的录音软件,用于录音测试。
tinyplay
用于播放测试,只能播放wav原始格式的音乐。
2.配置buildroot¶
进入配置菜单
cd buildroot-2017.08.1/
make menuconfig
关键配置截图
选中 tinyalsa:
使用现成的配置
由于细节无法全面展现,新手可以使用我提供的现成配置。
点这里查看下载:my-imx6u-buildroot2017-v1.0.config
把我的配置文件复制到buildroot目录,并改名为.config。
cd buildroot-2017.08.1/
cp my-imx6u-buildroot2017-v1.0.config .config
4.生成的根文件系统和工具链位置¶
生成根文件系统位置:
buildroot-2017.08.1/output/images/rootfs.tar
制作好的工具链位置:
# arm-gcc
buildroot-2017.08.1/output/host/bin/arm-buildroot-linux-gnueabihf-
# qmake
buildroot-2017.08.1/output/build/qt5base-5.9.1/bin/qmake
有了ARMGCC工具链就可以编译linux,uboot,和你的应用程序等,本篇不涉及这些,不再展开介绍。
二、测试根文件系统¶
开发板用的野火出厂固件,这里只替换根文件系统。
使用NFS挂载buildroot根文件系统来测试,操作方法如下 (里面用到的IP和相关目录,需要改成你的~):
1.解压根文件系统到NFS目录内¶
cd buildroot-2017.08.1/output/images/
sudo tar xvf rootfs.tar -C /nfsroot/imx6ull-nfs/buildroot2017-v1/
sync
2.开发板从NFS启动根文件系统¶
进入uboot命令行设置启动参数:
设置bootargs
setenv bootargs "console=${console},${baudrate} root=/dev/nfs ip=192.168.2.102:192.168.2.119:192.168.2.1:255.255.255.0:imx6ull:eth0:off rootwait rw nfsroot=192.168.2.119:/nfsroot/imx6ull-nfs/buildroot2017-v1 consoleblank=0 init=/sbin/init";saveenv
设置bootcmd,设置后开发板自动从NFS启动
setenv bootcmd "mmc dev 1;mmc dev 1; mmc rescan;fatload mmc 1 0x80800000 zImage;fatload mmc 1 0x83000000 imx6ull-14x14-evk.dtb;bootz 0x80800000 - 0x83000000"
到这里,一切正常的话,系统就启动了!
Welcome to Buildroot
buildroot login: root
# cd /
# ls
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp
#
# tiny
tinycap tinymix tinypcminfo tinyplay
#
三、测试 tinyalsa 播放音频¶
1.使用 tinymix 配置声卡¶
系统启动后,声卡默认是关闭的,需要配置一下通道开关、音量等。
查询声卡参数
首先查询下当前状态,使用命令:
tinymix contents
查询到的结果如下:
# tinymix contents
Number of controls: 57
ctl type num name value
0 INT 2 Capture Volume 39, 39 (range 0->63)
1 INT 2 Capture Volume ZC Switch 0, 0 (range 0->1)
2 BOOL 2 Capture Switch Off, Off
3 INT 1 Right Input Boost Mixer RINPUT3 Volume 0 (range 0->7)
4 INT 1 Right Input Boost Mixer RINPUT2 Volume 0 (range 0->7)
5 INT 1 Left Input Boost Mixer LINPUT3 Volume 0 (range 0->7)
6 INT 1 Left Input Boost Mixer LINPUT2 Volume 0 (range 0->7)
7 INT 1 Right Input Boost Mixer RINPUT1 Volume 0 (range 0->3)
8 INT 1 Left Input Boost Mixer LINPUT1 Volume 0 (range 0->3)
9 INT 2 Playback Volume 255, 255 (range 0->255)
10 INT 2 Headphone Playback Volume 0, 0 (range 0->127)
11 BOOL 2 Headphone Playback ZC Switch Off, Off
12 INT 2 Speaker Playback Volume 0, 0 (range 0->127)
13 BOOL 2 Speaker Playback ZC Switch Off, Off
14 INT 1 Speaker DC Volume 0 (range 0->5)
15 INT 1 Speaker AC Volume 0 (range 0->5)
16 BOOL 1 PCM Playback -6dB Switch Off
17 ENUM 1 ADC Polarity , No InversionLeft InvertedRight InvertedStereo Inversion
18 BOOL 1 ADC High Pass Filter Switch Off
19 ENUM 1 DAC Polarity , No InversionLeft InvertedRight InvertedStereo Inversion
20 BOOL 1 DAC Deemphasis Switch Off
21 ENUM 1 3D Filter Upper Cut-Off 0 (range 0->7)
22 ENUM 1 3D Filter Lower Cut-Off 0 (range 0->7)
23 INT 1 3D Volume 0 (range 0->7)
24 BOOL 1 3D Switch 0 (range 0->7)
25 ENUM 1 ALC Function , OffRightLeftStereo
26 INT 1 ALC Max Gain 7 (range 0->7)
27 INT 1 ALC Target 4 (range 0->15)
28 INT 1 ALC Min Gain 0 (range 0->7)
29 INT 1 ALC Hold Time 0 (range 0->15)
30 ENUM 1 ALC Mode , ALCLimiter
31 INT 1 ALC Decay 3 (range 0->15)
32 INT 1 ALC Attack 2 (range 0->15)
33 INT 1 Noise Gate Threshold 0 (range 0->31)
34 BOOL 1 Noise Gate Switch Off
35 INT 2 ADC PCM Capture Volume 195, 195 (range 0->255)
36 INT 1 Left Output Mixer Boost Bypass Volume 2 (range 0->7)
37 INT 1 Left Output Mixer LINPUT3 Volume 2 (range 0->7)
38 INT 1 Right Output Mixer Boost Bypass Volume 2 (range 0->7)
39 INT 1 Right Output Mixer RINPUT3 Volume 2 (range 0->7)
40 ENUM 1 ADC Data Output Select , Left Data = Left ADC; Right Data = Right ADCLeft Data = Left ADC; Right Data = Left ADCLeft Data = Right ADC; Right Data = Right ADCLeft Data = Right ADC; Right Data = Left ADC
41 BOOL 1 Mono Output Mixer Left Switch Off
42 BOOL 1 Mono Output Mixer Right Switch Off
43 BOOL 1 Right Output Mixer PCM Playback Switch Off
44 BOOL 1 Right Output Mixer RINPUT3 Switch Off
45 BOOL 1 Right Output Mixer Boost Bypass Switch Off
46 BOOL 1 Left Output Mixer PCM Playback Switch Off
47 BOOL 1 Left Output Mixer LINPUT3 Switch Off
48 BOOL 1 Left Output Mixer Boost Bypass Switch Off
49 BOOL 1 Right Input Mixer Boost Switch Off
50 BOOL 1 Left Input Mixer Boost Switch Off
51 BOOL 1 Right Boost Mixer RINPUT2 Switch Off
52 BOOL 1 Right Boost Mixer RINPUT3 Switch Off
53 BOOL 1 Right Boost Mixer RINPUT1 Switch On
54 BOOL 1 Left Boost Mixer LINPUT2 Switch Off
55 BOOL 1 Left Boost Mixer LINPUT3 Switch Off
56 BOOL 1 Left Boost Mixer LINPUT1 Switch On
#
经过测试,至少设置下面三项:
设置耳机音量
tinymix set 10 75
右声道
tinymix set 43 1
左声道
tinymix set 46 1
2.使用 tinyplay 播放 wav 音频¶
准备一段wav格式的音乐,复制到根文件系统。
开始播放:
# ls
bin lib media proc sbin usr
dev lib32 mnt root sys var
etc linuxrc opt run tmp yzxd.wav
# tinymix set 10 75
# tinymix set 43 1
# tinymix set 46 1
# tinyplay yzxd.wav
playing 'yzxd.wav': 2 ch, 48000 hz, 16 bit
#
插上耳机欣赏音乐吧,耳机位置在这里:
本篇完。