Linux 音频驱动

2023-05-16

Linux 音频驱动

硬件介绍

WM8960与IMX6ULL之间有两个通信接口:I2C和I2S
其中I2C用于配置WM8960
I2S用于音频数据传输

修改设备树文件

编写I2C子节点设备树

codec: wm8960@1a { 
	compatible = "wlf,wm8960";
	reg = <0x1a>;
	clocks = <&clks IMX6UL_CLK_SAI2>;
	clock-names = "mclk"; 6 wlf,shared-lrclk; 
};

编写I2S子节点设备树

sai2: sai@0202c000 { 
	compatible = "fsl,imx6ul-sai", 
	"fsl,imx6sx-sai"; 
	reg = <0x0202c000 0x4000>;
	interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
	clocks = <&clks IMX6UL_CLK_SAI2_IPG>,
	<&clks IMX6UL_CLK_DUMMY>,
	<&clks IMX6UL_CLK_SAI2>,
	<&clks 0>, <&clks 0>;
	clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
	dma-names = "rx", "tx";
	dmas = <&sdma 37 24 0>, <&sdma 38 24 0>;
	status = "disabled";
};

&sai2 { 
	pinctrl-names = "default"; 
	pinctrl-0 = <&pinctrl_sai2
	&pinctrl_sai2_hp_det_b>;
	assigned-clocks = <&clks IMX6UL_CLK_SAI2_SEL>,
	<&clks IMX6UL_CLK_SAI2>;
	assigned-clock-parents = <&clks IMX6UL_CLK_PLL4_AUDIO_DIV>;
	assigned-clock-rates = <0>, <12288000>;
	status = "okay";
};

pinctrl_sai2: sai2grp { 
	fsl,pins = < 
		MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK 0x17088
		MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC 0x17088
		MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA 0x11088
		MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA 0x11088
		MX6UL_PAD_JTAG_TMS__SAI2_MCLK 0x17088
	>;
};

pinctrl_sai2_hp_det_b: sai2_hp_det_grp {
	fsl,pins = <
		MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059
	>;
};

sound { 
	compatible = "fsl,imx6ul-evk-wm8960", 
		"fsl,imx-audio-wm8960"; 
	model = "wm8960-audio"; 
	cpu-dai = <&sai2>;
	audio-codec = <&codec>;
	asrc-controller = <&asrc>;
	codec-master; 
	gpr = <&gpr 4 0x100000 0x100000>;
	/*
	* hp-det = <hp-det-pin hp-det-polarity>;
	* hp-det-pin: JD1 JD2 or JD3
	* hp-det-polarity = 0: hp detect high for headphone
	* hp-det-polarity = 1: hp detect high for speaker
	*/
	hp-det = <3 0>;
	/*hp-det-gpios = <&gpio5 4 0>;
	mic-det-gpios = <&gpio5 4 0>;*/
	audio-routing =
		"Headphone Jack", "HP_L",
		"Headphone Jack", "HP_R",
		"Ext Spk", "SPK_LP",
		"Ext Spk", "SPK_LN",
		"Ext Spk", "SPK_RP",
		"Ext Spk", "SPK_RN",
		"LINPUT2", "Mic Jack",
		"LINPUT3", "Mic Jack",
		"RINPUT1", "Main MIC",
		"RINPUT2", "Main MIC",
		"Mic Jack", "MICB",
		"Main MIC", "MICB",
		"CPU-Playback", "ASRC-Playback",
		"Playback", "CPU-Playback",
		"ASRC-Capture", "CPU-Capture",
		"CPU-Capture", "Capture";
};

配置Linux图形化文件

取消ALSA模拟OSS API

-> Device Drivers 
	-> Sound card support (SOUND [=y]) 
		-> Advanced Linux Sound Architecture (SND [=y]) 
			-> <> OSS Mixer API //不选择
			-> <> OSS PCM (digital audio) API //不选择

使能WM8960驱动

-> Device Drivers 
	-> Sound card support (SOUND [=y]) 
		-> Advanced Linux Sound Architecture (SND [=y]) 
			-> ALSA for SoC audio support (SND_SOC [=y]) 
				-> SoC Audio for Freescale CPUs
					-> <*> Asynchronous Sample Rate Converter (ASRC) module support //选中
					-> <*> SoC Audio support for i.MX boards with wm8960 //选中

移植alsa-lib和alsa-utils文件

1.获取源文件

alsa-lib-1.2.2.tar.bz2 
alsa-utils-1.2.2.tar.bz2

2.解压文件

tar -vxjf alsa-lib-1.2.2.tar.bz2
tar -vxjf alsa-utils-1.2.2.tar.bz2

3.配置文件

//进入 alsa-lib 源码目录
cd alsa-lib-1.2.2/ 
./configure 
--host=arm-linux-gnueabihf 
--prefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib 
--with-configdir=/usr/share/arm-alsa

//进入 alsa-utils源码目录
cd alsa-utils-1.2.2/ 
./configure 
--host=arm-linux-gnueabihf 
--prefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-utils 
--with-alsa-inc-prefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/include/ 
--with-alsaprefix=/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/lib/ 
--disable-alsamixer 
--disable-xmlto

4.编译文件

make

5.安装文件

sudo make install

6.移植文件

移植alsa-lib文件
cd alsa-lib //进入 alsa-lib
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
cd /usr/share/arm-alsa //进入 arm-alsa 目录,拷贝配置文件
sudo cp * /home/zuozhongkai/linux/nfs/rootfs/usr/share/arm-alsa/ -raf

移植alsa-utils文件
cd alsa-utils
sudo cp bin/* /home/zuozhongkai/linux/nfs/rootfs/bin/ -rfa
sudo cp sbin/* /home/zuozhongkai/linux/nfs/rootfs/sbin/ -rfa
sudo cp share/* /home/zuozhongkai/linux/nfs/rootfs/usr/share/ -rfa
在开发板根目录/etc/profile添加内容
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf

移植zlib库和mplayer

1.获取源文件

zlib-1.2.11.tar.gz
MPlayer-1.4.tar.gz

2.解压文件

tar -vxzf zlib-1.2.11.tar.gz
tar -vxzf MPlayer-1.4.tar.gz

3.配置文件

cd zlib-1.2.11/ //进去 zlib 源码
CC=arm-linux-gnueabihf-gcc 
LD=arm-linux-gnueabihf-ld 
AD=arm-linux-gnueabihf-as 
./configure 
--prefix=/home/zuozhongkai/linux/IMX6ULL/tool/zlib

cd MPlayer-1.4/ //进去 mplayer 源码
./configure 
--cc=arm-linux-gnueabihf-gcc 
--host-cc=gcc 
--target=arm-linux-gnueabihf 
--disable-ossaudio 
--enable-alsa 
--prefix=/home/zuozhongkai/linux/IMX6ULL/tool/mplayer 
--extra-cflags=
"-I /home/zuozhongkai/linux/IMX6ULL/tool/zlib/include -I /home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/include"
 --extra-ldflags=
 "-L/home/zuozhongkai/linux/IMX6ULL/tool/zlib/lib -Iz -L/home/zuozhongkai/linux/IMX6ULL/tool/alsa-lib/lib -lasound" 
 --enable-fbdev 
 --disable-mencoder

4.编译文件

make //编译

5.安装文件

make install

6.移植文件

将可执行文件拷贝到跟文件系统/bin目录下
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/lib/ -rfa
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 音频驱动 的相关文章

随机推荐

  • Django中select_related的作用和用法

    在数据库有外键的时候 xff0c 使用 select related 和 prefetch related 可以很好的减少数据库请求的次数 xff0c 从而提高性能 本文通过一个简单的例子详解这两个函数的作用 虽然QuerySet的文档中已
  • 由浅入深掌握Python多线程原理与编程步骤

    由浅入深掌握Python多线程编程 一 Python多线程编程原理1 什么是线程2 线程工作原理3 Python全局锁与线程关系4 Python 支持多线程的模块 二 由简单的示例初步了解多线程编程步骤三 标准库 threading 模块介
  • element-ui如何在表格中插入图片

    第一种 xff1a span class token operator lt span el span class token operator span table span class token operator span colum
  • Cannot find module node-sass解决

    过假期想着在家跑下项目 xff0c 写下代码 xff0c 结果把代码拉下来之后 xff0c 就死活跑不起来了 xff0c 以为是自己电脑node版本的原因 xff0c 结果卸载了node安装了最新版本的 xff0c 结果npm run de
  • element-ui表格中复选框只能选中一个

    代码 xff1a span class token operator lt span el span class token operator span table ref span class token operator 61 span
  • python操作鼠标进行点击

    python中的pyautogui库可以操作鼠标 安装 xff1a pip install pyautogui span class token keyword import span time span class token keywo
  • go中的bcrypt加密

    1 bcrypt是不可逆的加密算法 xff0c 无法通过解密密文得到明文 2 bcrypt和其他对称或非对称加密方式不同的是 xff0c 不是直接解密得到明文 xff0c 也不是二次加密比较密文 xff0c 而是把明文和存储的密文一块运算得
  • go gRPC 服务端推送给客户端流demo

    具体文件目录看上一篇的grpc xff0c 这个demo演示的是服务端以流的形式推送给客户端 pb hello proto syntax span class token operator 61 span span class token
  • docker常用命令

    打包镜像 docker build span class token operator span t demo v1 span class token punctuation span 运行镜像 docker run span class
  • docker镜像加载原理

    docker的镜像实际上是由一层一层的文件系统组成 xff0c 这种层级的文件系统叫做UnionFS bootfs boot file system 主要包含bootloade和kernel xff0c bootloader主要是引导加载k
  • docker网络

    docker network常见的四种模式 桥接模式 bridge xff1a 为每一个容器分配 设置ip等 xff0c 并将容器连接到一个叫做docker0的虚拟网桥 xff0c docker网络默认为该模式 xff0c 使用 netwo
  • 玩客云刷armbian更新源报错The repository ‘http://apt.armbian.com stretch Release‘ does not have a Release file

    玩客云刷armbian系统更新源报错的解决方法 xff08 E The repository 39 http apt armbian com stretch Release 39 does not have a Release file x
  • GPT-4工具是软件工程师工作效率的倍增器

    1 xff0c 你现在正在哪个领域学习或工作呢 xff1f 你用过哪些AI智能工具 xff1f 主要从事AI算法数据集处理 xff0c 模型部署工具开发 xff0c 以及低代码工具开发 使用 Github的 Copilot 编程伴侣超过1个
  • HDFS Java API操作(IDEA版)

    目标 通过Java API来操作HDFS xff0c 完成的操作有 xff1a 文件上传 文件下载 新建文件夹 查看文件 删除文件 前提条件 1 Windows下安装好jdk1 8 2 Windows下安装好maven xff0c 这里使用
  • Ubuntu20.04 安装 CUDA10.1 和 CUDNN7.6.5

    说明 xff1a 本人的实验环境为 xff1a ubuntu20 04 xff0c 显卡 xff1a GTX1060 xff0c 已安装Nvidia驱动 查看你的NVIDIA显卡驱动是否支持cuda10 1版本 查看显卡驱动命令 xff1a
  • C++ 20 新特性 ranges 精讲

    C 43 43 20 新特性 ranges 精讲 C 43 43 20 中的 ranges 库使得使用 STL 更加舒适和强大 ranges 库中的算法是惰性的 xff0c 可以直接在容器上工作 xff0c 并且可以很容易地组合 简而言之
  • C语言学习篇(概念题)

    关键字static的作用是什么 1 xff09 在模块内 xff08 在函数内 xff09 xff0c 则此静态变量只能在该函数内使用 超出范围不能使用 但是它还占用内存 还存在 2 xff09 在模块内 xff08 但在函数体外 xff0
  • DMA控制器

    DMA控制器 DMA 简介 直接存储器访问 DMA 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传 输 可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据 这样节省的 CPU 资源可 供其它操作使用 DMA 控制器基
  • STM32 软硬件调试

    调试IO口占用 JTMS SWDIO PA13 JTCK SWCLK PA14 JTDI PA15 JTDO PB3 JNTRST PB4 STM32 软硬件调试 硬件调试 硬件调试通常是通过JTAT或者SWD调试下载器来进行调试 首先需要
  • Linux 音频驱动

    Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口 xff1a I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 codec span class t