专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
Linux设备驱动之udal341声卡驱动与madplay播放器移植
2019-07-12 18:53
发布
生成海报
站内文章
/
嵌入式Linux
16431
0
1060
===================================================
主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 (
可通过命令
/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v
查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
===================================================================
一. S3C2440 与 UDA1341 接口硬件描述
下图为FL2440开发板 IIS Interface原理图, S3C2440 处理器内置了 IIS 总线接口,S3C2440 的 IIS 总线时钟信号 SCK 与 Philips 公司的 UDA1341 的 BCK 连接,字段选择连接于 WS 引脚。UDA1341 提供两个音频通道,分别用于输入和输出,对应的引脚连接:IIS 总线的音频输出 IISSDO 对应于 UDA1341 的音频输入,IIS 总线的音频输入 IISSDI 对应于UDA1341 的音频输出。
UDA1341 的 L3 接口相当于一个混音器控制接口,可以用来控制输入/输出音频信号的音量大小、低音等。L3 接口的引脚 L3MODE、L3DATA、L3CLOCK 分别连接到 S3C2440 的 3 个 GPIO 来控制。
ALSA (Advanced Linux Sound Architecture) 是在 Linux 下进行音频编程时一种可供选择的声卡驱动体系结构。它 支持多种声卡设备, 具有更加友好的编程接口,并且完全兼容于 OSS。
OSS
(
Open Sound System
)是Linux
平台上一个统一的音频接口
,
即只要音频处理应用程序按照
OSS
的
API
来编写,那么在移植到另外一个平台时,只需要重新编译即可。值得注意的是
OSS
只是部分开源。
无论是选择
ALSA
还是
OSS
都是为了一个目的:将声卡抽象为一个统一的设备供
linux
程序员使用。我们测试选用的
OSS
系列。
二.修改
配置文件
Linux-3.0 已经完美的支持UDA1341音频芯片的驱动, 我们只要在arch/arm/mach-s3c2440/mach-smdk2440.c 文件中注册UDA1341 平台设备的控制端口就可以了
。
(1)添加头文件
(2)添加相关设备结构体
(3)将设备结构体加入主设备结构体
注意
:上述添加的各类结构体均要放在添加设备的devices[ ]结构体数组之前,否则会出现未定义,以及定义了没使用等错误。因为编译器是按顺序编译,所以声明必须放在结构体或者函数之前。
三.make menuconfig选项
Device Drivers --->
<*> Sound card support --->
[*] Preclaim OSS device numbers
<*> Advanced Linux Sound Architecture --->
--- Advanced Linux Sound Architecture
| | < > Sequencer support | |
| | <*> OSS Mixer API | |
| | <*> OSS PCM (digital audio) API | |
| | [*] OSS PCM (digital audio) API - Include plugin system | |
| | [*] Dynamic device file minor numbers | |
| | [ ] Support old ALSA API | |
| | [*] Verbose procfs contents | |
| | [ ] Verbose printk | |
| | [ ] Debug | |
| | [ ] Generic sound devices ---> | |
| | [ ] ARM sound devices ---> | |
| | [ ] SPI sound devices ---> | |
| | [*] USB sound devices --->
<*> ALSA for SoC audio support --->
| --- ALSA for SoC audio support | |
| | [ ] Support LZO compression for register caches | |
| | <*> ASoC support for Samsung | |
| | < > SoC AC97 Audio support for LN2440SBC - ALC650 | |
| | <*> SoC I2S Audio support UDA134X wired to a S3C24XX | |
| | < > SoC I2S Audio support for TLV320AIC23 on Simtec boards | |
| | < > SoC I2S Audio support for Simtec Hermes board | |
| | < > Build all ASoC CODEC drivers | |
| |
重新编译,烧录开发板,启动过程中打印如下信息则表示添加驱动成功
四.mdplay移植和播放MP3音乐
移植第三方程序的主要步骤分别为:解压缩、配置(./configure)、编译(make)、安装(make install)
1.下载源码包
madplay-0.15.2b.tar.gz //播放程序的压缩包,MP3播放器的源码,下载地址 https://sourceforge.NET/projects/mad/files/
libmad-0.15.1b.tar.gz //madplay的库文件 ,下载地址 https://sourceforge.Net/projects/mad/files/libmad/0.15.1b/libmad-0.15.1b.tar.gz/download?use_mirror=jaist
libid3tag-0.15.1b.tar.gz //mp3的解码库,下载地址http://download.csdn.net/detail/qin1174586290/6364763
zlib-1.1.4.tar.gz //用于文件的压缩与解压,下载地址http://zlib.net/fossils/
[weiming@Huangweiming 3rdparty]$ cd
[weiming@Huangweiming ~]$ cd fl2440/3rdparty/
[weiming@Huangweiming 3rdparty]$ mkdir uda1341
[weiming@Huangweiming 3rdparty]$ cd uda1341/
[weiming@Huangweiming uda1341]$ mkdir install
将上述源码包下载到uda1341文件夹下,用tar -xzf 指令解压(由于是.tar.gz格式)
一般源码包解压缩之后,若已经存在Makefile则可以直接make编译;但大多数情况下需要使用源码包目录下的./configure脚本来配置源码包生成Makefile文件;
以下几个配置参数:
--host: 用于指定平台;如: --host==arm-linux
--prefix: 用于指定文件的安装路径; 如:--prefix=/home/weiming/fl2440/3rdparty/uda1341/install
-I : 指定头文件的路径; 如:-I
/home/weiming/fl2440/3rdparty/uda1341/install
/include
-L : 指定库文件的路径;如:-L
/
home/weiming/fl2440/3rdparty/uda1341/install
/lib--disable-shared 使用静态库编译
LDFLAGS:告诉链接器从哪里寻找库文件
CPPFLAGS 是编译选项,同自己用的编译器有关 可以 用于 C 和 C++ 两者预编处理
如果是要编译到arm板子上跑则在make的时候还需要加上AR(将.o文件打包生成.a的静态库文件)= LD(所链接)= CC(交叉编译器)= RANLIB(随机库创建器) AS(汇编器)= NM(库查看工具)
2.配置,编译
注:
四次编译存在依赖关系,顺序不能乱。并且每次都应用sudo权限。
(一)zlib-1.1.4:
(1)配置configure文件,生成Makefile
[weiming@Huangweiming uda1341]$ cd zlib-1.1.4
[weiming@Huangweiming zlib-1.1.4]$ sudo ./configure --prefix=/home/weiming/fl2440/3rdparty/uda1341/install
(2)修改Makefile:
[weiming@Huangweiming zlib-1.1.4]$vim Makefile
(3)
编译
make
[weiming@Huangweiming zlib-1.1.4]$sudo make
(4)
安装
make install
[weiming@Huangweiming zlib-1.1.4]$sudo make install
(二)libid3tag-0.15.1b
[weiming@Huangweiming uda1341]$ cd libid3tag-0.15.1b
[weiming@Huangweiming libid3tag-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib
[weiming@Huangweiming libid3tag-0.15.1b]$sudo make
[weiming@Huangweiming libid3tag-0.15.1b]$sudo make install
(三)libmad-0.15.1b:
[weiming@Huangweiming uda1341]$ cd libmad-0.15.1b
[weiming@Huangweiming libmad-0.15.1b]$
sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib
[weiming@Huangweiming libmad-0.15.1b]$sudo make
如出现以下错误:
解决方法:找到libmad configure之后的Makefile,
删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
删除后再执行一次sudo make
[weiming@Huangweiming libmad-0.15.1b]$sudo make
[weiming@Huangweiming libmad-0.15.1b]$sudo make install
(四)madplay-0.15.2b
[weiming@Huangweiming uda1341]$ cd madplay-0.15.2b
[weiming@Huangweiming madplay-0.15.2b]$
sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/weiming/fl2440/3rdparty/uda1341/install CPPFLAGS=-I/home/weiming/fl2440/3rdparty/uda1341/install/include/ LDFLAGS=-L/home/weiming/fl2440/3rdparty/uda1341/install/lib
[weiming@Huangweiming madplay-0.15.2b]$
sudo make
make成功生成madplay可执行程序.因为自己使用的静态编译(--disable-shared),可不用再make install
make以后我们会发现生成了可执行文件madplay,这就是我们要下载到开发板上的文件:
五.开发板测试
插上耳机就能听到音乐了,通过按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止。
到此,声卡驱动和播放器移植成功完成了。
Ta的文章
更多
>>
Linux设备驱动之udal341声卡驱动与madplay播放器移植
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮