二.移植嵌入式播放器 madplay
madplay 播放器程序主要依赖于如下库:
zlib       zlib-1.1.4.tar.gz      提供数据压缩用的函式库 
libid3tag   libid3tag-0.15.1b.tar.gz   mp3 文件 id3 标签分析库 
libmad    libmad-0.15.1b.tar.gz    高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)

将 sdk 里面 resource 目录的以下内容复制到 Linux 系统中。假设我们复制到/home/Project/Motion/OK6410/Resource 并进入这个目录。

下面就将这些库依次安装到根文件系统中:

1. 文件准备:
将提供的 madplay 目录中的 4 个源码包进行解压,使用命令:
tar -xzf libid3tag-0.15.1b.tar.gz
tar -xzf libmad-0.15.1b.tar.gz
tar -xzf zlib-1.1.4.tar.gz
tar -xzf madplay-0.15.2b.tar.gz

2. 编译、安装 zlib:
a. 进入 zlib 源码目录。使用命令:./configure --shared --prefix=_install,生成Makefile。其中—shared 指明可生成动态库, --prefix=_install 指明后面执行make install 后库和头文件的安装路径,这里指定的_install 由于并不存在,因此需要在 zlib 顶层目录创建,使用命令:mkdir _install,创建该目录。
 
b. 修改 Makefile,需修改如下内容:
CC=arm-linux-gcc
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=arm-linux-gcc -E
AR=arm-linux-ar
RANLIB=arm-linux-ranlib

c. 使用命令:make,编译源码

使用命令:make install,将生成库和头文件安装到指定的目录下,当然这里指的是我们之前创建的_install 这个目录。

d. 将生成的动态库拷贝到根文件系统/nfs/rootfs 下的 lib 目录中

使用命令: cp _install/lib/*.so* /nfs/rootfs/lib,当然如果原本就有这些库则不需要拷贝。

e. 将生成的动态库和头文件拷贝到交叉编译工具安装目录下的库和头文件目录中。当然如果原本就有这些库和头文件则不需要拷贝。 
例如, 交叉编译工具安装在/opt/EmbedSky/4.3.3 下, 则可使用如下命令进行拷贝: 
cp _install/include/*.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include/ -rf
cp _install/lib/* /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/ -rf

3. 编译、安装 libid3tag:
a. 进入 libid3tag 源码目录。使用命令:
./configure --host=arm-linux --prefix=${PWD}/_install,生成 Makefile。其中

--host 指明交叉编译工具前缀,

--prefix=${PWD}/_install指明后面执行 make install 后库和头文件的安装路径,这里指定的_install 虽然并不存在,但在执行 make install 后会自动创建。

b. 使用命令:make,编译源码,使用命令:make install,将生成库和头文件安装到指定的目录下,也就是我们之前创建的_install 这个目录。 
c. 将生成的动态库拷贝到根文件系统/nfs/rootfs 下的 lib 目录中,使用命令: cp _install/lib/*.so* /nfs/rootfs/lib,如果原本就有这些库则不需要拷贝。

d. 将生成的动态库和头文件拷贝到交叉编译工具安装目录下的库和头文件目录中。
如果原本就有这些库和头文件则不需要拷贝。

cp _install/include/*.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include/ -rf
cp _install/lib/* /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/ -rf

4. 编译、安装 libmad:
方法参考上一步。 要注意的是在由执行./configure 生成的 Makefile 中需要去掉一个目前的编译器不再支持的编译选项,在 Makefile 的 129 行,去掉-fforce-mem 这个选项。 
./configure --host=arm-linux --prefix=${PWD}/_install
Vim Makefile
Make
make install
cp _install/lib/*.so* /nfs/rootfs/lib
cp _install/include/*.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include/ -rf
cp _install/lib/* /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/ -rf

5. 移植 madplay 应用程序:
进入 madplay 源码目录。由于我们前面已经将 madplay 所依赖的动态库拷贝到了根文件系统的/lib 目录下,这里我们只需要编译动态连接的 madplay 程序即可,这样的编译安装将十分简单。
 
a. 使用命令:./configure --host=arm-linux,生成 Makefile 文件。

b. 使用命令:make,编译 madplay,即可在 madplay 源码目录顶层找到生成的播放器主程序 madplay。

c. 使用命令:cp madplay /nfs/rootfs/sbin,将 madplay 拷贝到开发板根文件系统目录下。

d. 复制 arm-linux-gcc 交叉编译器的 glibc 库文件到开发板的文件系统,交叉编译的 c 库文件在 /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib 目录,进入该目
录之后输入 cp ./* /nfs/rootfs/lib/ -rf 即可

在 PC 的 Linux 中查看 madplay 需要什么动态库
arm-linux-readelf -d madplay
出现如下内容
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libmad.so.0]
0x00000001 (NEEDED) Shared library: [libid3tag.so.0]
0x00000001 (NEEDED) Shared library: [libz.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
后面内容先不管,可以看到需要 6 个动态库,然后现在去我们的 nfs 文件系统的 lib 目录下检查是不是存在这些动态库。 如果你确实按照步骤一步步做的, 那么是可以发现所有的库一应俱全的。

6.移植 alsa 的接口库和工具包

由于 OK6410 的 Linux 内核虽然有了声卡的驱动, 但是并没有 ALSA 架构需要的应用程序接口库。在用户空间访问声卡的时候需要先经过 ALSA 库才到内核访问驱动程序,所以我们需要移植 ALSA 库。 而且由于 6410 使用的是 wm9713 或者 wm9714 的声卡, 该声卡需要经过特殊的配置才可以使用,否则不能播放声音,这个配置工具需要 alsa-utils 工具集提供。
 
(1)移植 alsa-lib
a.可以到 http://www.alsa-project.org/main/index.php/Download 下载最新版本的 alsa库(alsa-lib-1.0.29.tar.bz2)和工具包(alsa-utils-1.0.29.tar.bz2) 。
b.解压 alsa-lib-1.0.29.tar.bz2
c.配置 alsa-lib
./configure
--host=arm-linux
--prefix=/usr/local/share/arm-alsa
--enable-shared
--disable-python --with-configdir=/usr/local/share/alsa --with-plugindir=/usr/local/lib/alsa_lib
CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld

--host :为使用的交叉编译工具名,直接使用 arm-linux 也可以,根据 PC 上安装的交叉编译工具来决定; 
--prefix:即 make install 时程序安装的目录,可以根据自己的情况进行修改,不用拘泥 
--enable:开启功能 --disable :关闭功能,使用动态库不需要 Python。

--with-configdir: alsa 配置文件所在目录,本目录要定好位置,交叉编译过后,移植到板子上时要和 PC 上路径一致。也即是说如果配置的时候指定的是/usr/local/share/alsa目录, 那么你的配置文件在开发板上的绝对路径也要是/usr/local/share/alsa。 默认 alsa 配置文件会在安装目录里。这个很重要,不能PC和开发板两边不匹配。

--with-plugindir: alsa_lib 所在目录, 目前意义不明, 可以自由定位, 也可以默认安装,先不用管。但是这里指定的目录会产生必要的库文件,放到开发板的时候也要路径和 PC 一样。

d.编译安装
make
make install

(2)移植 alsa-utils
a.解压以后进入解压得到的目录
b.配置
./configure --host=arm-linux --prefix=/usr/local/share/arm-alsa
CFLAGS="-I/usr/local/share/arm-alsa/include" LDFLAGS="-L/usr/local/share/arm-alsa/lib
-lasound" --disable-alsamixer --disable-xmlto
--with-alsa-inc-prefix=/usr/local/share/arm-alsa/include
--with-alsa-prefix=/usr/local/share/arm-alsa/lib CC=arm-linux-gcc CXX=arm-linux-g++
LD=arm-linux-ld
CFLAGS:编译工具需要要的头文件目录,也就是前面编译库文件得到的头文件

LDFLAGS:编译工具需要要的库文件目录,也就是前面编译库文件得到的库文件

--with-alsa-inc-prefix:和 CFLAGS 一样--with-alsa-prefix:和 LDFLAGS 一样。

c.编译和配置
make
make install

(3)部署文件到开发板
进入到PC的/usr/local/share 目录(之前配置时候指定的,根据你的配置选项决定) ,因为我们所有的安装目录都在这个目录下。 
a.将/usr/local/share 目录下的 alsa,arm-alsa 拷贝到开发板的/usr/local/share 目录下
cp ./alsa /home/OK6410/rootfs/usr/local/share -rfa
cp ./arm-alsa /home/OK6410/rootfs/usr/local/share -rfa

b.将/usr/local/lib 目录下的 alsa_lib 拷贝到开发板上/usr/local/lib(自己先创建)目录下

cp ./alsa_lib /home/OK6410/rootfs/usr/local/lib/ -rfa
c.将 arm-alsa/lib 目录下的文件拷贝到开发板根文件系统的/lib 目录下
cp ./arm-alsa/lib/* /home/OK6410/rootfs/lib –rfa

d.将 arm-alsa/bin 目录下的文件拷贝到/sbin 目录下
cp ./arm-alsa/bin/* /home/OK6410/rootfs/bin -rfa
e.将 arm-alsa/sbin 目录下的文件拷贝到/sbin 目录下

cp ./arm-alsa/sbin/* /home/OK6410/rootfs/bin -rfa
f.添加环境变量,编辑开发板的文件系统里的/etc/profile,切记是开发板的文件系统不是PC 的文件系统啊! ! !在结尾添加 
exportALSA_CONFIG_PATH=/usr/local/share/alsa/alsa.conf

g.复制声卡需要的配置文件
由于 wm9713/9714 需要特殊配置,所以我们在移植了 alsa-util 以后便可以利用这个工具集中的alsactl对wm9714/9713进行配置, 配置所需要的配置文件在SDK的wm9713目录下。将他复制到开发板的/etc 目录即可。

h. 修改系统初始化脚本
由于 alsa 架构的库和程序要去访问/dev/snd 目录下的这些文件
controlC0 pcmC0D0c pcmC0D0p seq timer
但是实际上我们使用的内核和文件系统并没有/dev/snd 这个目录, 而是直接把这些设备结点创建在/dev 目录,所以需要我们手动创建,并将设备结点进行硬链接。因此我们在初始化脚本里面完成这个任务,在开发板文件系统里的/etc/init.d/rcS 加上如下内容。
 
mkdir /dev/snd
ln /dev/controlC0 /dev/snd/controlC0
ln /dev/pcmC0D0c /dev/snd/pcmC0D0c
ln /dev/pcmC0D0p /dev/snd/pcmC0D0p
ln /dev/timer /dev/snd/timer
ln /dev/seq /dev/snd/seq

amixer cset numid=86 2
amixer cset numid=87 2

alsactl restore -f /etc/wm9714.conf

最后一步对声卡进行配置,这是关键的关键,没有成功执行这一步,虽然你的播放工具在播放音乐但是不会有声音! ! ! ! ! 
通过 samba 从 windows 复制一首 MP3 后缀的歌曲到 PC 的 Linux 中 nfs 文件系统根目录,重命名为 1.MP3, (因为中文在开发板不好操作。 )在开发板的文件系统里进行测试madplay。在串口里面输入madplay 1.mp3 就可以听到悦耳的歌曲了, (请插上耳机。 )虽然有可能会输出乱码但是哦我们现在不关心,那是输出歌曲的信息,如果有中文的话由于开发板对中文的支持我们没有完善所以会乱码,你要是嫌麻烦,可以这样做。
 
madplay 1.mp3>> mp3_log.txt 2>&1 或者 madplay –Q 1.MP3
然后就不会出现那些烦心的乱码信息了。如果没有播放成功,提示找不到 madplay,表示移植有问题,请思考是不是把所有的动态库都复制完全了!

ok6410的madplay配置的更多相关文章

  1. OK6410移植madplay播放器,王明学learn

    对于ok6410的madplay移植主要包括三部分.声卡驱动移植,播放器的移植,以及alsa库的移植. 一.首先移植声卡驱动以及播放器 ok6410采用WM97系列的声卡芯片,要使得内核支持该驱动,首 ...

  2. linux 内核移植

    1. 下载内核源码linux-2.6.34,解压到工作目录下. 2. 首先在内核中增加一个 SOC ,到 /arch/arm/mach-s3c64xx 下将mach-smdk6410.c 复制成 ma ...

  3. 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植

    报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...

  4. 基于tiny6410的madplay播放器的移植

    在移植madplay之前需要先将所需要的库移植到开发板的文件系统中. 现在每个解压后的文件夹中创建一个文件夹 zlib-1.1.4.tar.gz 解压:tar xvzf  zlib-1.1.4.tar ...

  5. 【整理】--【GPIO】OK6410

    S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制G ...

  6. 1.ok6410移植bootloader,移植u-boot,学习u-boot命令

    ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...

  7. 【原创】-- nfs安装配置及使用,挂载根文件系统

    环境:ubuntu14.04(非虚拟机),OK6410 环境搭建: (1) #sudo apt-get install nfs-kernel-server 如果已经是最新版本了,无需安装 (2) 建立 ...

  8. ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

    继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...

  9. 开源mp3播放器--madplay 编译和移植 简记

    madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...

随机推荐

  1. H264 Profile

    H.264有四种profile,对应四种H264画质级别.每个profile支持一组特定的编码功能,并支持一类特定的应用,分别是BP.EP.MP.HP: 1. BP-Baseline Profile ...

  2. Visual 中控制台程序如何使用MFC类库

    unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到 ...

  3. Android PopupWindow 弹窗背景半透明,设置最大高度

    首先讲一个网上的方法: popupwindow弹出后,屏幕背景变成半透明这个效果很普通.实现的方法也很多.我使用的可能是最简单的一种,就是设置一下getWindows的透明度. /** * 设置添加屏 ...

  4. 在内核中增加对yaffs文件系统的支持

    自己最近在搞一些内核以及根文件系统的移植,就涉及到了需要在内核中增加对yaffs文件系统的支持.在网上找了一些文档后,自己将具体的操作过程做了一个总结,方便以后查询使用: 1.获取yaffs源码 YA ...

  5. CODESOFT中线条形状该如何绘制

    CODESOFT条码设计软件提供了一系列工具,可帮助您设计完美的标签.在CODESOFT进行标签设计时,经常会需要创建除条码,文本对象除外的一些对象,那就是形状对象.如线条.圆形.矩形等.通过下面的示 ...

  6. 翻译「C++ Rvalue References Explained」C++右值引用详解 Part6:Move语义和编译器优化

    本文为第六部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.ht ...

  7. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  8. 在Tomcat下部属项目三种方式:

    在Tomcat下部属项目三种方式:       1直接复制:       2. 通过配置虚拟路径的方式    直接修改配置文件 写到tomcat/conf/server.xml     找到<H ...

  9. Acronis Server备份Linux系统

    Acronis Server备份Linux系统 前段时间用Acronis Disk Director Suite解决了Thinkpad笔记本在win7的分区问题(http://chenguang.bl ...

  10. 【EF 4】ORM框架及其流行产品之一EF介绍

    导读:跳进了多租户切换数据库的坑,那么就继续走下去吧.在我们的项目中,是运用EF实现对数据库的操作,那么EF其实是.NET系统中,基于ORM框架的一个产品实现.在java那边,则有Hibernate和 ...