s3c2440 uda1341声卡驱动与madplay播放器移植
来源:互联网 发布:python的print不换行 编辑:程序博客网 时间:2024/05/17 00:58
———————————————————————————————————————
主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4
开发板平台: FL2440
Linux内核版本: linux-3.0
开发模块: s3c2440 uda1341声卡驱动与madplay播放器移植
邮箱:leiyuxing205@gmail.com
———————————————————————————————————————
一、在初始化文件中加入UDA1341 设备结构
下图为FL2440开发板原理图uda1341ts部分,确认管脚。
Linux-3.0 已经完美的支持UDA1341 音频芯片的驱动。 UDA1341音频芯片,走的标准的IIS总线,Linux中对IIS及UDA1341的支持已经非常完善了,我们只需要将相应的IIS管脚设置为我们开发板的原理图设计的管脚就可以了。我们只要在/arch/arm/mach-s3c2440/mach-smdk2440.c文件中注册UDA1341 平台设备的控制端口就可以了,端口如上图所示,打开mach-smdk2440.c,添加如下内容:
[leiyuxing@centos6 linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
--- mach-smdk2440_o.c 2016-08-12 17:39:20.492017397 +0800+++ mach-smdk2440.c 2016-08-12 18:26:01.457015793 +0800@@ -60,6 +60,7 @@ 58 #include <linux/delay.h> 59 60+ #include <sound/s3c24xx_uda134x.h> 61 //#include <mach/gpio-nrs.h> 62 #include <plat/common-smdk.h> 63 64 #include <linux/dm9000.h> 65 66 /* add DM9000 ethernet drivers ,whitch is bodify by liuchengdeng */@@ -206,8 +206,32 @@ 206207+ static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {208 +.l3_clk = S3C2410_GPB(4),209 +.l3_data = S3C2410_GPB(3),210 +.l3_mode = S3C2410_GPB(2),211 +.model = UDA134X_UDA1341,212 +};213214 +static struct platform_device s3c24xx_uda134x = {215 +.name = "s3c24xx_uda134x",216 +.dev = {217 +.platform_data = &s3c24xx_uda134x_data,218 +}219 +};220221 +static struct platform_device uda1340_codec = {222 +.name = "uda134x-codec",223 +.id = -1,224 +};225226 static struct platform_device *smdk2440_devices[] __initdata = {227 &s3c_device_ohci,228 &s3c_device_lcd,229 &s3c_device_wdt,230 &s3c_device_i2c0,231 &s3c_device_iis,232 &s3c_device_dm9000,233 + &uda1340_codec,234 + &s3c24xx_uda134x,235 + &samsung_asoc_dma,236 };
注意:上述添加的各类结构体均要放在添加设备的devices[ ]结构体数组之前,否则会出现未定义,以及定义了没使用等错误。因为编译器是按顺序编译,所以声明必须放在结构体或者函数之前。
[leiyuxing@centos6 linux-3.0]$ make
二、在内核中配置uda1341设备驱动
要注意的是,这里的OSS 接口其实是基于ALSA 接口创建的,因为新的内核中现在都已经改用ALSA 设计,这里是为了和以前的软件兼容才这样做的内核配置如下
[leiyuxing@centos6 linux-3.0]$ make menuconfig
make之后将得到的新内核烧进开发板,若在启动过程打印的内核信息中有以下的声卡信息则表明声卡驱动添加成功
开发板输入>: cat /proc/devices 命令会出现如下信息
。。。。。。
7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
89 i2c
90 mtd
。。。。。。
三、mdplay移植和播放MP3音乐
(一)移植前的准备
所需源码包
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/
创建文件夹用来存放源码包:
[leiyuxing@centos6 linux-3.0]$ cd
[leiyuxing@centos6 ~]$ cd fl2440/3rdparty/
[leiyuxing@centos6 3rdparty]$ mkdir uda1341
[leiyuxing@centos6 3rdparty]$ cd uda1341/
[leiyuxing@centos6 uda1341]$ mkdir mad
将上述源码包下载到uda1341文件夹下,用tar -xzf 指令解压(由于是.tar.gz格式)
[leiyuxing@centos6 uda1341]$ tar -xzf libmad-0.15.1b.tar.gz
[leiyuxing@centos6 uda1341]$ tar -xzf libid3tag-0.15.1b.tar.gz
[leiyuxing@centos6 uda1341]$ tar -xzf madplay-0.15.2b.tar.gz
[leiyuxing@centos6 uda1341]$ tar -xzf zlib-1.1.4.tar.gz
[leiyuxing@centos6 uda1341]$ ls
libid3tag-0.15.1b libmad-0.15.1b.tar.gz madplay-0.15.2b.tar.gz
libid3tag-0.15.1b.tar.gz mad zlib-1.1.4
libmad-0.15.1b madplay-0.15.2b zlib-1.1.4.tar.gz
移植第三方程序的主要步骤分别为:解压缩、配置(./configure)、编译(make)、安装(make install)
一般源码包解压缩之后,若已经存在Makefile则可以直接make编译;但大多数情况下需要使用源码包目录下的./configure脚本来配置源码包生成Makefile文件;
以下几个配置参数:
--host: 用于指定平台;如: --host==arm-linux
--prefix: 用于指定文件的安装路径; 如:--prefix=/home/leiyuxing/fl2440/3rdparty/uda1341/mad
-I : 指定头文件的路径; 如:-I/home/leiyuxing/fl2440/3rdparty/uda1341/mad/include
-L : 指定库文件的路径;如:-L
/home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib--disable-shared 使用静态库编译
LDFLAGS:告诉链接器从哪里寻找库文件
CPPFLAGS 是编译选项,同自己用的编译器有关 可以 用于 C 和 C++ 两者预编处理
如果是要编译到arm板子上跑则在make的时候还需要加上AR(将.o文件打包生成.a的静态库文件)= LD(所链接)= CC(交叉编译器)= RANLIB(随机库创建器) AS(汇编器)= NM(库查看工具)
(二)配置,编译
注意:以下的步骤不能打乱,因为其中有依赖关系;还有每次都需要使用sudo权限,否则可能因权限不够而出错。
1.编译zlib-1.1.4
[leiyuxing@centos6 uda1341]$ cd zlib-1.1.4
(1)配置configure文件,生成Makefile
[leiyuxing@centos6 zlib-1.1.4]$ sudo ./configure --prefix=/home/leiyuxing/fl2440/3rdparty/uda1341/mad
Checking for gcc...
Building static library libz.a version 1.1.4 with gcc.
Checking for unistd.h... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.
(2)修改Makefile文件
[leiyuxing@centos6 zlib-1.1.4]$ vim Makefile
(3)编译make
[leiyuxing@centos6 zlib-1.1.4]$ sudo make
(4)安装make install
[leiyuxing@centos6 zlib-1.1.4]$ sudo make install
cp zlib.h zconf.h /home/leiyuxing/fl2440/3rdparty/uda1341/mad/include
chmod 644 /home/leiyuxing/fl2440/3rdparty/uda1341/mad/include/zlib.h /home/leiyuxing/fl2440/3rdparty/uda1314/mad/include/zconf.h
cp libz.a /home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib
cd /home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib; chmod 755 libz.a
cd /home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib; if test -f libz.so.1.1.4; then \
rm -f libz.so libz.so.1; \
ln -s libz.so.1.1.4 libz.so; \
ln -s libz.so.1.1.4 libz.so.1; \
(ldconfig || true) >/dev/null 2>&1; \
fi
2.编译libid3tag-0.15.1b
[leiyuxing@centos6 uda1341]$ cd libid3tag-0.15.1b
[leiyuxing@centos6 libid3tag-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/leiyuxing/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/leiyuxing/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib
[leiyuxing@centos6 libid3tag-0.15.1b]$ sudo make
[leiyuxing@centos6 libid3tag-0.15.1b]$ sudo make install
3.编译libmad-0.15.1b
[leiyuxing@centos6 libmad-0.15.1b]$ cd libmad-0.15.1b
[leiyuxing@centos6 libid3tag-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/leiyuxing/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/leiyuxing/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib
[leiyuxing@centos6 libmad-0.15.1b]$ sudo make
若出现以下错误:
解决:找到libmad configure之后的Makefile,删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误!
[leiyuxing@centos6 libmad-0.15.1b]$ vim Makefile
删除后再执行一次sudo make
[leiyuxing@centos6 libmad-0.15.1b]$ sudo make install
4.安装madplay
[leiyuxing@centos6 uda1341]$ cd madplay-0.15.2b
[leiyuxing@centos6 madplay-0.15.2b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/leiyuxing/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/leiyuxing/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/leiyuxing/fl2440/3rdparty/uda1341/mad/lib
[leiyuxing@centos6 madplay-0.15.2b]$ sudo make
make成功生成madplay可执行程序.因为自己使用的静态编译(--disable-shared),可不用再make install,直接将 madplay下载到开发板/bin路径下后给予权限即可
[leiyuxing@centos6 madplay-0.15.2b]$ du -h madplay
716K madplay
[leiyuxing@centos6 madplay-0.15.2b]$ file madplay
madplay: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
(三)、上传开发板测试
将madplay传上电脑,接着使用Tftpd32软件和网线实现电脑与开发板互传
在开发板上执行
>: cd bin/
>: tftp -gr madplay 192.168.1.2
>: chmod a+x madplay
>: cd
>: tftp -gr shaletaiduodeleidi.mp3 192.168.1.2
>: madplay shaletaiduodeleidi.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: 贩贩贩?
Artist:贩?
Album:贩贩
Genre: Blues
按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止
OK!!!
遇到的问题:
问题一:
解决方法:
找到libmad configure之后的Makefile,删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误!
问题二:
>: madplay shaletaiduodeleidi.mp3
madplay: can't load library 'libiconv.so.2'
解决方法:
先找到交叉编译下少的库
[leiyuxing@centos6 opt]$ find -iname libiconv.so.2
./buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/sysroot/usr/lib/libiconv.so.2
./buildroot-2012.08/output/target/usr/lib/libiconv.so.2
./buildroot-2012.08/output/build/libiconv-1.14/lib/.libs/libiconv.so.2
[leiyuxing@centos6opt]$ sz ./buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclinueabi/sysroot/usr/lib/libiconv.so.2
再拷到开发板的lib下
>: cd lib/
>: tftp -gr libiconv.so.2 192.168.1.2
libiconv.so.2 100% |*******************************| 930k 0:00:00 ETA
- s3c2440 UDA1341声卡驱动与madplay播放器移植,
- s3c2440 uda1341声卡驱动与madplay播放器移植
- s3c2440 uda1341声卡驱动与madplay播放器移植
- s3c2440 uda1341声卡驱动与madplay播放器移植
- s3c2440之uda1341声卡驱动以及madplay播放器移植
- arm9+linux s3c2440 uda1341声卡驱动与madplay播放器移植
- fl2440 uda1341声卡驱动移植及madplay播放器移植
- UDA1341声卡驱动 madplay 播放
- UDA1341声卡驱动与madplay移植播放mp3(第三方源代码移植步骤)
- S3C2440 UDA1341声卡移植
- Linux设备驱动之udal341声卡驱动与madplay播放器移植
- s3c2440 uda1341声卡驱动分析
- uda1341声卡的linux 2.6.28版本内核驱动在arm s3c2440上的移植。
- uda1341声卡的linux 2.6.29版本内核驱动在arm s3c2440上的移植
- uda1341声卡的linux 2.6.29版本内核驱动在arm s3c2440上的移植
- UDA1341声卡移植
- UDA1341声卡驱动
- UDA1341声卡驱动修改
- douco模板理解
- Maple数据分析 级数与拟合
- Java Script-错误
- iOS开发-UIView之动画效果的实现方法(合集)
- 更改服务器图片尺寸
- s3c2440 uda1341声卡驱动与madplay播放器移植
- Codeforces Round #367 (Div. 2) B. Interesting drink (二分)
- qq邮箱发邮件
- Android进程间通讯之AIDL
- LCS算法
- JQuery(入门一)
- VS2015卸载与系统盘扩展
- httpclient访问https网站失败(peer not authenticated)
- Actor模型的本质