ok6410的madplay配置
二.移植嵌入式播放器 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配置的更多相关文章
- OK6410移植madplay播放器,王明学learn
对于ok6410的madplay移植主要包括三部分.声卡驱动移植,播放器的移植,以及alsa库的移植. 一.首先移植声卡驱动以及播放器 ok6410采用WM97系列的声卡芯片,要使得内核支持该驱动,首 ...
- linux 内核移植
1. 下载内核源码linux-2.6.34,解压到工作目录下. 2. 首先在内核中增加一个 SOC ,到 /arch/arm/mach-s3c64xx 下将mach-smdk6410.c 复制成 ma ...
- 1-1. OSS/ALSA 声卡的驱动与配置和 Madplay 嵌入式播放器的移植
报警子系统 一. OSS/ALSA 声卡的驱动与配置 声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好->因此ALSA构架孕育而生. ALSA(高级音频构架,目前应用 ...
- 基于tiny6410的madplay播放器的移植
在移植madplay之前需要先将所需要的库移植到开发板的文件系统中. 现在每个解压后的文件夹中创建一个文件夹 zlib-1.1.4.tar.gz 解压:tar xvzf zlib-1.1.4.tar ...
- 【整理】--【GPIO】OK6410
S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制G ...
- 1.ok6410移植bootloader,移植u-boot,学习u-boot命令
ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...
- 【原创】-- nfs安装配置及使用,挂载根文件系统
环境:ubuntu14.04(非虚拟机),OK6410 环境搭建: (1) #sudo apt-get install nfs-kernel-server 如果已经是最新版本了,无需安装 (2) 建立 ...
- ok6410 u-boot-2012.04.01移植六完善MLC NAND支持
继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...
- 开源mp3播放器--madplay 编译和移植 简记
madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...
随机推荐
- 中南大学第一届长沙地区程序设计邀请赛 To Add Which?
1350: To Add Which? Time Limit: 1 Sec Memory Limit: 128 MB Description There is an integer sequence ...
- 欧几里得算法与扩展欧几里得算法_C++
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...
- 【Unity Shaders】学习笔记——SurfaceShader(一)认识结构
[Unity Shaders]学习笔记——SurfaceShader(一)认识结构 转载请注明出处:http://www.cnblogs.com/-867259206/p/5595747.html 写 ...
- CA提供的身份认证配置弃用
场景:从CA网站登录,在CA主页点击我们集成到CA的业务系统图标进行跳转,发现业务系统登录过身份(没cookies),身份认证自动使用 url,跳转到CA登录页,造成二次登录 [Authorize] ...
- centos 7 安装音乐播放器(亲测可用)
方法来源网上,非原创. 1. Install the nux repo $> su - $> yum update # optional but recommanded $> rp ...
- 仅显示INPUT下边框
最近在倒腾前端的页面,在某次的需求中我想要这样的一个效果——仅显示INPUT输入框的下边框,和我想象的编写方式不一致,每个标签都有其对应的默认样式,不同的浏览器也有其不同的渲染方式,当然这些知识现在我 ...
- ant风格是什么?
我们在看java技术书籍的过程中,当加载文件时总会遇到是否支持ant风格路径加载,这里说的ant风格是什么意思呢,今天我查了一下,明白了什么意思,现在总结一下 ANT通配符有三种: 通配符 说明 ? ...
- Push failed: Failed with error: fatal: Could not read from remote repository.
GitLab push远端,出现错误提示:Push failed: Failed with error: fatal: Could not read from remote repository. 原 ...
- 快速搭建 Node.js 开发环境以及加速 npm
如何快速搭建 node 开发环境 npm 超慢 github 无法打开的问题 于是我觉得应该写一篇文章解答所有这些起步问题,让新同学也能顺顺利利入门. 快速搭建 Node.js 开发环境 如果你想长期 ...
- Android IOS WebRTC 音视频开发总结(六五)-- 给韩国电信巨头做咨询
本文主要总结咨询过程中的一些问题,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam 韩国电信巨头sk想了解国内移动互联网rtc现状,所以上周请我过去给他们的相关人员 ...