小白自制Linux开发板 八. Linux音频驱动配置
不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅。
对于F1C200s是自带了多媒体处理功能的,所以我们这里可以很轻松的使用这些功能。
1. 硬件原理图#
对于F1C200s,音频接口如下:HPCOM(HPCOM\HPCOM_FB)、HPL、HPR,HPVCC(3.3v供电)
如果对音质要求不高,可以使用如下的处理进行接线处理,注意耳机左右声道配置。
2. 替换驱动代码#
接下来在Linux内核目录中替换下面补丁包中的代码,本补丁包在Linux5.7.1下测试成功,其他版本请备份源码后尝试,这里的代码是通过改造sun4i-codec解码方案而来。
配置文件
如果有必要可以使用比对工具进行替换。
3. 修改设备树#
修改suniv-f1c100s.dtsi设备树文件
首先添加sun41-a10.h引用。
#include <dt-bindings/dma/sun4i-a10.h> //添加头文件
然后在soc节点下,添加如下代码
dma: dma-controller@1c02000 { compatible = "allwinner,suniv-f1c100s-dma"; reg = <0x01c02000 0x1000>; interrupts = <18>; clocks = <&ccu CLK_BUS_DMA>; resets = <&ccu RST_BUS_DMA>; #dma-cells = <2>; }; codec: codec@1c23c00 { compatible = "allwinner,suniv-f1c100s-codec"; reg = <0x01c23c00 0x400>; interrupts = <21>; clocks = <&ccu CLK_BUS_CODEC>, <&ccu CLK_CODEC>; clock-names = "apb", "codec"; resets = <&ccu RST_BUS_CODEC>; dmas = <&dma SUN4I_DMA_NORMAL 0x0c>, <&dma SUN4I_DMA_NORMAL 0x0c>; dma-names = "rx", "tx"; status = "disabled"; };
修改suniv-f1c100s-licheepi-nano.dts设备树,使解码方式工作。
&codec { allwinner,audio-routing = "Headphone", "HP", "Headphone", "HPCOM", "MIC", "Mic"; status = "okay"; };
4. 配置MENUCONFIG#
配置codec
Device Drivers <*> Sound card support <*> Advanced Linux Sound Architecture <*> ALSA for SoC audio support -> Allwinner SoC Audio support
配置dma
Device Drivers
<*> DMA Engine support
接下来编译内核,生成zimage 和dtb文件,如果有必要,请务必先清理一下工程
make clean
然后在重新进行编译
make
5. 配置默认声卡#
启动小板,就可以看到F1c100s Audio Codec 的声卡配置
5.1 检查声卡#
cat /proc/asound/cards
5.2 安装alsa-utils#
因为我们已经有wifi了,所以连接网络通过apt-get 方式直接安装,如果没有可以通过buildroot工具中选择安装。
5.3 设置默认声卡#
vi /etc/asound.conf
添加如下内容
defaults.ctl.card 1 defaults.pcm.card 1 defaults.timer.card 1
接下来就可以使用 aplay或mplayer 来播放使用或音频了:
安装mplayer
sudo apt-get mplayer
播放视频
mplayer 1.mp4 -vo fbdev -framedrop
播放音频
mplayer 1.mp3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!