开发板:FL2440 内核:linux-3.0
一、在初始化文件中加入UDA1341 设备结构
下图为FL2440开发板原理图uda1341ts部分,确认管脚。
Linux-3.0 已经完美的支持UDA1341 音频芯片的驱动。 UDA1341音频芯片,走的标准的IIS总线,Linux中对IIS及UDA1341的支持已经非常完善了,我们只需要将相应的IIS管脚设置为我们开发板的原理图设计的管脚就可以了。我们只要在/arch/arm/mach-s3c2440/mach-smdk2440.c文件中注册UDA1341 平台设备的控制端口就可以了,端口如上图所示,打开mach-smdk2440.c,添加如下内容:
[zzx@localhost linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
注意:上述添加的各类结构体均要放在添加设备的devices[ ]结构体数组之前,否则会出现未定义,以及定义了没使用等错误。因为编译器是按顺序编译,所以声明必须放在结构体或者函数之前。
****************************************
出现上述未定义错误,就是因为结构体定义放在了添加设备device[]结构体数组之后,应放在其前面
***************************************
二、在内核中配置uda1341设备驱动
要注意的是,这里的OSS 接口其实是基于ALSA 接口创建的,因为新的内核中现在都已经改用ALSA 设计,这里是为了和以前的软件兼容才这样做的内核配置如下
[zzx@localhost 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/
在虚拟上进行操作
[zzx@localhost ~]$ cd fl2440/3rdparty/
[zzx@localhost 3rdparty]$ mkdir uda1341
[zzx@localhost 3rdparty]$ cd uda1341
[zzx@localhost uda1341]$ mkdir mad
将上述源码包下载到uda1341文件夹下,用tar -xzf 指令解压(由于是.tar.gz格式)
[zzx@localhost uda1341]$ tar -xzf libmad-0.15.1b.tar.gz
[zzx@localhost uda1341]$ tar -xzf libid3tag-0.15.1b.tar.gz
[zzx@localhost uda1341]$ tar -xzf madplay-0.15.2b.tar.gz
[zzx@localhost uda1341]$ tar -xzf zlib-1.1.4.tar.gz
[zzx@localhost 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/zzx/fl2440/3rdparty/uda1341/mad
-I : 指定头文件的路径; 如:-I/home/zzx/fl2440/3rdparty/uda1341/mad/include/
-L : 指定库文件的路径;如:-L/home/zzx/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
[zzx@localhost uda1341]$ cd zlib-1.1.4
(1)配置configure文件,生成Makefile
[zzx@localhost zlib-1.1.4]$ sudo ./configure --prefix=/home/zzx/fl2440/3rdparty/uda1341/mad
(2)修改Makefile文件
[zzx@localhost zlib-1.1.4]$ vim Makefile
(3)编译make
[zzx@localhost zlib-1.1.4]$ sudo make
(4)安装make install
[zzx@localhost zlib-1.1.4]$ sudo make install
2.编译libid3tag-0.15.1b
[zzx@localhost uda1341]$ cd libid3tag-0.15.1b
[zzx@localhost libid3tag-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/zzx/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/zzx/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/zzx/fl2440/3rdparty/uda1341/mad/lib
[zzx@localhost libid3tag-0.15.1b]$ sudo make
[zzx@localhost libid3tag-0.15.1b]$ sudo make install
3.编译libmad-0.15.1b
[zzx@localhost uda1341]$ cd libmad-0.15.1b
[zzx@localhost libmad-0.15.1b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/zzx/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/zzx/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/zzx/fl2440/3rdparty/uda1341/mad/lib
[zzx@localhost libmad-0.15.1b]$ sudo make
*******************************
若出现以下错误
解决:找到libmad configure之后的Makefile,删除 -fforce-mem原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误!
********************************
[zzx@localhost libmad-0.15.1b]$ sudo make install
4.安装madplay
[zzx@localhost uda1341]$ cd madplay-0.15.2b
[zzx@localhost madplay-0.15.2b]$ sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/zzx/fl2440/3rdparty/uda1341/mad CPPFLAGS=-I/home/zzx/fl2440/3rdparty/uda1341/mad/include/ LDFLAGS=-L/home/zzx/fl2440/3rdparty/uda1341/mad/lib
[zzx@localhost madplay-0.15.2b]$ sudo make
make成功生成madplay可执行程序.因为自己使用的静态编译(--disable-shared),可不用再make install,直接将 madplay下载到开发板/bin路径下后给予权限即可
[zzx@localhost madplay-0.15.2b]$ du -h madplay
704K madplay
[zzx@localhost 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 yishengsuoai.mp3 192.168.1.2 //歌曲《一生所爱》
>: madplay yishengsuoai.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止
OK!!!