R16开发板tina音频系统测试及tinyalsa移植
2018-01-19 18:19
495 查看
一、硬件
上面红框是耳机插口,下面红框是Speaker插口。
首先,接上Speaker后,在Android 4.4上,耳机和Speaker都可以正常工作;但是,烧录R16开发板tina系统LCD调试编译的最新Tina系统,不工作。
二、调试
表面上,执行命令:
但是,进一步发现这些差别只集中在\sound\soc目录下。这样我们可以直接替换soc代码,即把Android内核的soc目录copy覆盖Tina对应的目录,这时通过“aplay /www/ring.wav”可以正常播放,说明音频这部分OK了。
至于原因,等以后研究Linux的ALSA音频子系统后再细数。
三、tinyasla移植
Linux音频子系统框架:
图片来源:http://www.cnblogs.com/Ph-one/p/6293353.html
OSS音频架构已经depressed,所以系统是ALSA架构,“在ALSA音频架构下,App是通过ALSA提供的alsa-lib库访问底层硬件”,Android没有使用alsa-lib库,而是自己实现了一套API即tinyalsa,代码路径:external/tinyalsa。
我们看下tinyalsa的构成:
2、tinyplay,播放
3、tinycap,录制
4、tinymix,控制声卡
5、tinypcminfo,查看声卡信息
为简单起见,移植过程中没有编译生成libtinyalsa库,而是作为源码编译,文件列表:
源码:https://github.com/RockyChing/tinyalsa.git
四、简单测试
上面红框是耳机插口,下面红框是Speaker插口。
首先,接上Speaker后,在Android 4.4上,耳机和Speaker都可以正常工作;但是,烧录R16开发板tina系统LCD调试编译的最新Tina系统,不工作。
二、调试
表面上,执行命令:
# cat cards /proc/asound/cards 0 [audiocodec ]: audiocodec - audiocodec audiocodec以上是Android 4.4的显示,在Tina上则是:sndcodec。查看代码发现,前者声卡实现:
linux-3.4\sound\soc\sunxi\audiocodec\sunxi_sndcodec.c static struct snd_soc_card snd_soc_sunxi_sndpcm = { .name = "audiocodec", .owner = THIS_MODULE, .dai_link = &sunxi_sndpcm_dai_link, .num_links = 1, };后者声卡定义:
linux-3.4\sound\soc\sunxi\audiocodec\sun8iw5_machine.c static struct snd_soc_card snd_soc_sunxi_sndpcm = { .name = "sndcodec", .owner = THIS_MODULE, .dai_link = sunxi_sndpcm_dai_link, .num_links = ARRAY_SIZE(sunxi_sndpcm_dai_link), .dapm_widgets = sunxi_ac_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(sunxi_ac_dapm_widgets), .dapm_routes = audio_map, .num_dapm_routes = ARRAY_SIZE(audio_map), .controls = ac_pin_controls, .num_controls = ARRAY_SIZE(ac_pin_controls), .suspend_post = sunxi_suspend, .resume_post = sunxi_resume, };对比两套代码,发现它们差别很大:
但是,进一步发现这些差别只集中在\sound\soc目录下。这样我们可以直接替换soc代码,即把Android内核的soc目录copy覆盖Tina对应的目录,这时通过“aplay /www/ring.wav”可以正常播放,说明音频这部分OK了。
至于原因,等以后研究Linux的ALSA音频子系统后再细数。
三、tinyasla移植
Linux音频子系统框架:
图片来源:http://www.cnblogs.com/Ph-one/p/6293353.html
OSS音频架构已经depressed,所以系统是ALSA架构,“在ALSA音频架构下,App是通过ALSA提供的alsa-lib库访问底层硬件”,Android没有使用alsa-lib库,而是自己实现了一套API即tinyalsa,代码路径:external/tinyalsa。
我们看下tinyalsa的构成:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= external/tinyalsa/include LOCAL_SRC_FILES:= mixer.c pcm.c LOCAL_MODULE := libtinyalsa LOCAL_SHARED_LIBRARIES:= libcutils libutils LOCAL_LDFLAGS += \ $(LOCAL_PATH)/libdrc.a LOCAL_MODULE_TAGS := optional LOCAL_PRELINK_MODULE := false include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= external/tinyalsa/include LOCAL_SRC_FILES:= tinyplay.c LOCAL_MODULE := tinyplay LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= external/tinyalsa/include LOCAL_SRC_FILES:= tinycap.c LOCAL_MODULE := tinycap LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= external/tinyalsa/include LOCAL_SRC_FILES:= tinymix.c LOCAL_MODULE := tinymix LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) LOCAL_C_INCLUDES:= external/tinyalsa/include LOCAL_SRC_FILES:= tinypcminfo.c LOCAL_MODULE := tinypcminfo LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE)1、libtinyalsa库,可见libtinyalsa只有mixer.c pcm.c两个文件构成,这极大地方便了移植(libdrc.a对我们没用)
2、tinyplay,播放
3、tinycap,录制
4、tinymix,控制声卡
5、tinypcminfo,查看声卡信息
为简单起见,移植过程中没有编译生成libtinyalsa库,而是作为源码编译,文件列表:
源码:https://github.com/RockyChing/tinyalsa.git
四、简单测试
# tinymix tinymix Mixer name: 'audiocodec' Number of controls: 58 ctl type num name value 0 INT 1 headphone volume control 62 1 INT 1 earpiece volume control 62 2 INT 1 speaker volume control 62 3 INT 1 MIC1_G boost stage output mixer control 3 4 INT 1 MIC2_G boost stage output mixer control 3 5 INT 1 LINEIN_G boost stage output mixer control 3 6 INT 1 PHONE_G boost stage output mixer control 3 7 INT 1 PHONE_PG boost stage output mixer control 3 8 INT 1 PHONE_NG boost stage output mixer control 3 9 INT 1 MIC1 boost AMP gain control 4 10 INT 1 MIC2 boost AMP gain control 4 11 INT 1 Lineout volume control 62 12 INT 1 PHONEP-PHONEN pre-amp gain control 4 13 INT 1 Phoneout gain control 3 14 INT 1 ADC input gain ctrl 3 15 BOOL 1 Audio phone out Off 16 BOOL 1 Audio phone in Off 17 BOOL 1 Audio earpiece out Off 18 BOOL 1 Audio headphone out Off 19 BOOL 1 Audio speaker out Off 20 BOOL 1 Audio analog main mic Off 21 BOOL 1 Audio analog headsetmic Off 22 BOOL 1 Audio phone voicerecord Off 23 BOOL 1 Audio phone endcall Off 24 BOOL 1 Audio linein record Off 25 BOOL 1 Audio linein in Off 26 ENUM 1 Speaker Function spk 27 BOOL 1 Audio digital main mic Off 28 BOOL 1 Audio digital headset mic Off 29 BOOL 1 Audio digital phone out Off 30 BOOL 1 Audio digital phonein Off 31 BOOL 1 Audio digital clk format status Off 32 BOOL 1 Audio bt clk format status Off 33 BOOL 1 Audio bt out Off 34 BOOL 1 Audio analog bt mic Off 35 BOOL 1 Audio analog bt phonein Off 36 BOOL 1 Audio digital bt mic Off 37 BOOL 1 Audio digital bt phonein Off 38 BOOL 1 Audio bt button voice Off 39 BOOL 1 Audio digital bb bt clk format Off 40 BOOL 1 Audio system bt capture flag Off 41 BOOL 1 Audio analog bb capture mic Off 42 BOOL 1 aif3 loopback Off 43 BOOL 1 aif2 loopback Off 44 BOOL 1 digital_bb_bt Off 45 INT 1 system play_capture set 1 0 46 INT 1 system play_capture set 2 0 47 BOOL 1 AIF1_AD0L_MXR_SRC AIF1DA0Ldata Off 48 BOOL 1 AIF1_AD0L_MXR_SRC AIF2DACLdata Off 49 BOOL 1 AIF1_AD0L_MXR_SRC ADCLdata Off 50 BOOL 1 AIF1_AD0L_MXR_SRC AIF2DACRdata Off 51 BOOL 1 AIF1_AD0R_MXR_SRC AIF1DA0Rdata Off 52 BOOL 1 AIF1_AD0R_MXR_SRC AIF2DACRdata Off 53 BOOL 1 AIF1_AD0R_MXR_SRC ADCRdata Off 54 BOOL 1 AIF1_AD0R_MXR_SRC AIF2DACLdata Off 55 BOOL 1 Analog cap test disable phonein Off 56 BOOL 1 Analog cap test disable mic1 Off 57 BOOL 1 Analog cap test disable mic2 Off设置Speaker音量(对应Number为2):
tinymix 2 24设置Speaker音量为24。
26 ENUM 1 Speaker Function spk说明当前用Speaker做外放,下面设置用耳机播放:
tinymix 26 headset tinyplay xxx.wav
相关文章推荐
- Android下音频的测试程序tinyalsa(录音,放音,查看声卡信息)
- R16开发板tina系统LCD调试
- ALSA音频的移植,编译与测试
- ALSA音频的移植,编译与测试
- ALSA音频的移植,编译与测试(仍在研究中)
- linux_sound_alsa_Android+alsa音频系统中的几个问题
- linux-2.6.32在mini2440开发板上移植 ---移植UDA1341 音频驱动
- x210v3开发板u-boot-2012.10移植之六---系统时钟初始化
- 基于itop4412在Linux最小系统下的 ffmpeg 的移植和测试
- 移植ubuntu14.04根文件系统至beaglebone开发板探索
- iMX6开发板移植Linux系统之LVDS显示屏驱动程序分析之LVDS参数的匹配过程分析
- Android6.0.1 移植:显示系统(一)--测试framebuffer
- Linux ALSA 音频系统:逻辑设备篇
- 嵌入式Linux下ALSA音频架构ALSA-lib移植与编译
- android系统开发(九)-Audio部分准备工作alsa移植
- Android平台上的Aplay与TinyAlsa移植使用
- 基于tiny210v2开发板下搭建网络文件系统
- linux-2.6.32在mini2440开发板上移植(19)之yaffs2文件系统移植
- linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一
- FS_S5PC100平台上WM9714 ALSA音频移植