【瑞芯微】【rk3128】【03.编写音频测试程序】
一、目标
需要编写一个 测试音频的代码。
1. 创建包目录结构
cd buildroot/package/
mkdir -p audio-capture-test
2. 创建 Config.in 文件
在 buildroot/package/audio-capture-test/Config.in 中写入:
config BR2_PACKAGE_AUDIO_CAPTURE_TESTbool "audio-capture-test"depends on BR2_PACKAGE_ALSA_LIBselect BR2_PACKAGE_ALSA_LIBhelpAudio capture test program using ALSA library.This demonstrates how to link with external libraries in Buildroot.https://example.com
3. 创建 audio-capture-test.mk 文件
在 buildroot/package/audio-capture-test/audio-capture-test.mk 中写入:
################################################################################
#
# audio-capture-test
#
################################################################################AUDIO_CAPTURE_TEST_VERSION = 1.0
AUDIO_CAPTURE_TEST_SITE = ./package/audio-capture-test/src
AUDIO_CAPTURE_TEST_SITE_METHOD = local
AUDIO_CAPTURE_TEST_LICENSE = MIT
AUDIO_CAPTURE_TEST_LICENSE_FILES = LICENSE# 依赖 alsa-lib
AUDIO_CAPTURE_TEST_DEPENDENCIES = alsa-lib# 定义如何构建
define AUDIO_CAPTURE_TEST_BUILD_CMDS$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -o $(@D)/audio_capture_test \$(@D)/audio_capture_test.c -lasound
endef# 定义如何安装
define AUDIO_CAPTURE_TEST_INSTALL_TARGET_CMDS$(INSTALL) -D -m 0755 $(@D)/audio_capture_test $(TARGET_DIR)/usr/bin/audio_capture_test
endef$(eval $(generic-package))
4. 创建源代码目录和文件
mkdir -p buildroot/package/audio-capture-test/src
在 buildroot/package/audio-capture-test/src/ 目录中创建以下文件:
audio_capture_test.
#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>int main(int argc, char *argv[])
{int err;snd_pcm_t *capture_handle;snd_pcm_hw_params_t *hw_params;printf("Audio Capture Test Program\n");printf("ALSA library version: %s\n", SND_LIB_VERSION_STR);// 尝试打开默认PCM设备进行捕获err = snd_pcm_open(&capture_handle, "default", SND_PCM_STREAM_CAPTURE, 0);if (err < 0) {printf("Unable to open PCM device: %s\n", snd_strerror(err));return 1;}printf("PCM device opened successfully\n");// 分配硬件参数结构体snd_pcm_hw_params_alloca(&hw_params);// 初始化硬件参数err = snd_pcm_hw_params_any(capture_handle, hw_params);if (err < 0) {printf("Cannot initialize hardware parameter structure: %s\n", snd_strerror(err));snd_pcm_close(capture_handle);return 1;}printf("Hardware parameters initialized\n");// 设置访问类型err = snd_pcm_hw_params_set_access(capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);if (err < 0) {printf("Cannot set access type: %s\n", snd_strerror(err));snd_pcm_close(capture_handle);return 1;}printf("Access type set to interleaved\n");// 关闭PCM设备snd_pcm_close(capture_handle);printf("Audio capture test completed successfully!\n");printf("ALSA library is working correctly.\n");return 0;
}
Makefile
# Makefile for audio-capture-test
CC ?= gcc
CFLAGS ?= -Wall -O2
LDFLAGS ?= -lasound.PHONY: all cleanall: audio_capture_testaudio_capture_test: audio_capture_test.c$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)clean:rm -f audio_capture_test
LICENSE
MIT LicenseCopyright (c) 2024 audio-capture-testPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
5. 更新上级包的配置
在 buildroot/package/Config.in 文件中找到合适的位置,添加:
source "package/audio-capture-test/Config.in"
6. 配置和编译
RK3128/buildroot$ vim configs/rockchip_rk312x_defconfig# 增加
BR2_PACKAGE_AUDIO_CAPTURE_TEST=y
./build.sh
7. 运行
[root@rk312x:/]# audio_capture_test
Audio Capture Test Program
ALSA library version: 1.1.5
PCM device opened successfully
Hardware parameters initialized
Access type set to interleaved
Audio capture test completed successfully!
ALSA library is working correctly.
8. 关键点说明
-
依赖管理:使用
AUDIO_CAPTURE_TEST_DEPENDENCIES = alsa-lib确保 alsa-lib 先被编译 -
链接库:在构建命令中添加
-lasound链接 ALSA 库 -
头文件:ALSA 头文件路径会自动包含,因为 alsa-lib 是依赖项
-
交叉编译:Buildroot 自动设置正确的工具链和 sysroot
9. 其他库的链接方式
对于其他库,方法类似:
-
链接数学库:
-lm -
链接线程库:
-lpthread -
链接多个库:
-lfoo -lbar -lbaz
这样就可以在 Buildroot 中成功编译和链接需要外部库的程序了
