news 2026/6/23 19:41:46

alsa软件移植

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
alsa软件移植

一、介绍

一、什么是ALSA?

ALSA(Advanced Linux Sound Architecture)是Linux 系统中主流的音频架构,用于管理音频设备的驱动、接口和应用开发。

它取代了早期的 OSS(Open Sound System),以更灵活、模块化的设计成为现代 Linux 音频的标准解决方案。

二、ALSA 的核心组件与架构

ALSA的架构采用分层设计,从底层硬件到上层应用可分为以下关键部分:

1. 驱动层(Device Drivers)

内核驱动:直接与音频硬件(如声卡)交互,实现硬件初始化、数据传输等功能。

示例: snd_hda_intel (Intel HD Audio驱动)、 snd_usb_audio (USB音频设备驱动)。

硬件抽象:通过 alsa-lib 提供统一接口,屏蔽不同硬件的差异。

2. 接口层(ALSA Libraries)

alsa-lib:提供用户空间API,允许应用程序访问音频设备,支持播放、录制、混音等功能。核心库文件: libasound.so ,包含 asound_open 、 snd_pcm_writei 等关键函数。

插件系统:通过 /.asoundrc 或配置文件支持音效处理(如混响、均衡器)、多设备聚合等扩展功能。

3. 工具与应用层

alsa-utils 是ALSA系统的核心工具包,包含了aplay 、 arecord 、 alsamixer等命令行工具

命令行工具:

arecord / aplay :音频录制与播放(如 arecord -D hw:0,0 -f S16_LE out.wav )。

alsamixer :图形化音量控制工具。

amixer :命令行调节音频参数(如 amixer set Master 50% )。

三、移植ALSA主要是移植alsa-lib和alsa-utils

alsa-utils是纯应用层的软件,相当于ALSA设备的测试程序,alsa-lib则是支持应用API的中间层程序alsautils中的应用程序中会调用到alsa-lib中的接口来操作到我们的音频编解码芯片的寄存器,而lib中接口就是依赖于最底层驱动代码, 因此移植ALSA程序的顺序就是先后移植Driver,Lib,Utils。

二、buildroot配置及编译

一、下载buildroot

Buildroot - Making Embedded Linux Easy

二、使能alsa-lib

进入buildroot目录

使用命令进入buildroot菜单进行配置

make ARCH=arm menuconfig

Target packages ----> Libraries -----> Audio/Sound ------> -*- alsa-lib ---> 此配置项下的文件全部选中

三、使能 alsa-utils

Target packages-----> ---------> Audio and video applications ------> alsa-utils 此配置项下的文件全部选中

三、设备树修改

NXP官方已经写好了WM8960驱动,因此我们直接配置内核使能WM8960驱动即可,按照如下所示步骤使能WM8960驱动。

WM8960与I.MX6ULL之间有两个通信接口:I2C 和SAI,因此设备树中会涉及到I2C和SAI两个设备节点。其中I2C用于配置WM8960, SAI接口用于音频数据传输,我们依次来配置一下这两个接口

一、wm8960 i2c 接口设备树

根据原理图我们知道V2.4以前版本底板WM8960连接到了I.MX6ULL的I2C2接口上,因此在设备树中的“i2c2”节点下需要添加wm8960信息。 V2.4及以后版本 WM8960 连接到了I2C1上。

&i2c1 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1>; status = "okay"; mag3110@0e { compatible = "fsl,mag3110"; reg = <0x0e>; position = <2>; }; fxls8471@1e { compatible = "fsl,fxls8471"; reg = <0x1e>; position = <0>; interrupt-parent = <&gpio5>; interrupts = <0 8>; }; codec: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; clocks = <&clks IMX6UL_CLK_SAI2>; clock-names = "mclk"; wlf,shared-lrclk; }; }; &i2c2 { clock-frequency = <100000>; // 修正原拼写错误:clock_frequency → clock-frequency pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c2>; status = "okay"; /* 注释掉的WM8960声卡节点(备用) */ /* codec: wm8960@1a { compatible = "wlf,wm8960"; reg = <0x1a>; clocks = <&clks IMX6UL_CLK_SAI2>; clock-names = "mclk"; wlf,shared-lrclk; }; */ ov5640: ov5640@3c { compatible = "ovti,ov5640"; reg = <0x3c>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_csi1>; clocks = <&clks IMX6UL_CLK_CSI>; clock-names = "csi_mclk"; pwn-gpios = <&gpio_spi 6 1>; rst-gpios = <&gpio_spi 5 0>; csi_id = <0>; mclk = <24000000>; mclk_source = <0>; status = "okay"; port { ov5640_ep: endpoint { remote-endpoint = <&csi1_ep>; }; }; }; /*触摸屏节点 */ goodix_ts@5d { compatible = "goodix,gt9xx", "goodix,gt1151"; reg = <0x14>; // 注:地址0x14与节点名@5d(0x5d)不匹配,需确认硬件实际地址 status = "okay"; interrupt-parent = <&gpio1>; interrupts = <9 0>; pinctrl-0 = <&ts_int_pin &ts_reset_pin>; // 合并换行的引脚配置 goodix,rst-gpio = <&gpio5 9 GPIO_ACTIVE_LOW>; goodix,irq-gpio = <&gpio1 9 GPIO_ACTIVE_LOW>; }; };

二、I.MX6ULL SAI 音频接口设备树

对于正点原子的ALPHA开发板, SAI部分的设备树信息不需要做任何修改,直接使用 NXP官方写好的即可。

三、I.MX6ULL sound节点

NXP官方已经针对EVK开发板编写了sound节点,我们可以在此基础上针对我们所使用的平台来修改出对应的sound节点,这里不用修改,直接放在设备树根节点下

四、使能内核的WM8960驱动

取消ALSA模拟OSS API

Device Drivers ---> <*> Sound card support ---> <*> Advanced Linux Sound Architecture ---> < > OSS Mixer API < > OSS PCM (digital audio) API

五、设置USB

六、查看配置文件

# # HD-Audio # CONFIG_SND_ARM=y CONFIG_SND_SPI=y CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y CONFIG_SND_SOC=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y

四、测试

查看

可以看到内核已经加载进去了

检测

在调试I2C器件时,使用i2cdetect工具来确认芯片是否有应答


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 18:19:15

AutoGPT镜像适用于科研场景吗?高校团队已投入使用

AutoGPT镜像在科研中的落地实践&#xff1a;高校团队如何用它加速研究 在人工智能技术快速迭代的今天&#xff0c;一场静悄悄的变革正在实验室和学术办公室中发生。越来越多的高校研究团队不再满足于将大模型当作问答工具&#xff0c;而是开始尝试让AI真正“动起来”——自主完…

作者头像 李华
网站建设 2026/6/22 22:41:20

GitHub热门项目推荐:基于Qwen3-14B开发的企业级AI助手

基于Qwen3-14B构建企业级AI助手&#xff1a;性能与落地的完美平衡 在当前企业智能化转型的浪潮中&#xff0c;一个现实问题反复浮现&#xff1a;我们是否真的需要动辄千亿参数的大模型来处理日常业务&#xff1f;对于大多数中小企业而言&#xff0c;部署超大规模语言模型不仅成…

作者头像 李华
网站建设 2026/6/23 18:19:58

从零到网络安全专家:一张全景路线图(2025版)

本文适用于&#xff1a;在校大学生&#xff08;计算机/非计算机专业&#xff09;想转行网络安全的职场人士网络安全爱好者想系统提升的安全从业者&#x1f4ca; 网络安全人才市场现状&#xff08;数据说话&#xff09;维度数据解读人才缺口​2024年缺口超327万供需比1:10&#…

作者头像 李华
网站建设 2026/6/23 15:27:18

LeetCode 46/51 排列型回溯题笔记-全排列 / N 皇后

目录 一、题目 1&#xff1a;全排列&#xff08;LeetCode 46&#xff09; 题目描述 核心思路 重难点 & 易错点 Java 实现&#xff08;标准版&#xff09; 回溯过程演示&#xff08;以nums[1,2]为例&#xff09; 二、题目 2&#xff1a;N 皇后&#xff08;LeetCode 5…

作者头像 李华
网站建设 2026/6/23 18:20:06

一周回顾:勒索飙升、AI上阵、人形机器人被盯上

一周回顾&#xff1a;勒索飙升、AI上阵、人形机器人被盯上 本周全球网络安全态势呈现显著的“多线高压”&#xff1a;勒索软件赎金在过去三年累计突破 21 亿美元&#xff0c;显示产业化、专业化趋势持续加速&#xff1b;AI 被进一步武器化&#xff0c;日本出现高中生借助 Chat…

作者头像 李华
网站建设 2026/6/23 18:35:59

嵌入式FOTA进阶:文件系统直接升级+串口分段传输深度指南!

随着嵌入式设备对FOTA升级效率与稳定性的要求提升&#xff0c;文件系统直写与串口分段传输已成为核心进阶技术。前者通过精简数据写入路径&#xff0c;降低存储开销与升级耗时&#xff1b;后者利用串口的稳定通道&#xff0c;以分段方式保障升级包传输的可靠性。本文将系统拆解…

作者头像 李华