ok6410的madplay配置

发布者:RadiantWhisper最新更新时间:2024-08-19 来源: cnblogs关键字: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配置

上一篇:LPC55S16的Classical CAN 测试
下一篇:Linux驱动之内核自带的S3C2440的LCD驱动分析

推荐阅读最新更新时间:2024-11-05 15:12

陆面板厂竞争力,还得看产能配置/规格/良率
    尽管中国大陆本土面板厂8代线将陆续投产、持续扩建,并且在中国本地液晶电视面板供货比重/自给率可望显著拉升,甚至开始外销海外,对于台湾、韩国面板大厂来说,已经形成具体威胁。不过,随着液晶面板/显示器规格竞赛、产线调配复杂度亦同步提高,市场研究机构WitsView副总经理张小彪认为,中国本土面板厂竞争实力、自给率与全球市占率提升速度,可能还要观察各世代产线最适产能配置、品质、规格、良率等各项因素而定。 另方面,即便一般估计、到2014年底、中国液晶电视面板自给率可能达到接近5成水位,或甚至在2015年达到近7成自给率,至少未来还有3成以上电视面板需要外购。除TCL、中电熊猫等自家拥有8代线产能的品牌业者,包括海信、海尔、创维、康
[手机便携]
用于驱动外部数字麦克风的时钟配置
1.引言 DFSDM 全称为 Digital filter for sigma delta modulators。顾名思义,其作用主要是对外部 Σ∆调制的数字信号进行滤波。STM32L462xx 系列支持最多 4 个外部串行通道,2 个数字滤波器,最大可达到 24bit 的 ADC 分辨率。并且支持 SPI 接口和曼切斯特编码 1-wire接口。 2.问题分析 客户使用 STM32L462xx 的 DFSDM 连接数字麦克风,将麦克风的 PDM 信号转化为 PCM 信号,并采集数据。使用的参数为 16KHz 采样,2M 左右的时钟驱动数字麦克风,能够正常读取麦克风数据。了解到他们所使用的数字麦克风可以使用 768K 时钟驱动,
[单片机]
用于驱动外部数字麦克风的时钟<font color='red'>配置</font>
物联网安全化繁为简:EdgeLock 2GO编程伙伴简化设备配置
当今物联网(IoT)对信息安全的要求日益提高。 面对生态合作体系的日益增多,为了确保数据安全、保护隐私以及防范网络攻击,连接到云服务、家庭网络或其他设备时,设备需要通过密钥和证书进行身份验证 。同时,越来越多的标准和生态合作体系,例如Matter或Qi无线充电,也都开始要求设备的认证证书必须由可信赖的机构颁发。 昂贵的投资 然而,建立和维护能够支持设备配置(包括将密钥和证书注入设备)的制造工厂,需要巨额投资。这需要安装专门的安全设备,只能由经过培训的员工按照明确的安全流程操作,而并非每个设备OEM都有资源以这种方式升级其设施,尤其是如果他们有多个制造工厂。虽然一些设备制造商已经进行了投资,但许多OEM没有能力或专业
[物联网]
物联网安全化繁为简:EdgeLock 2GO编程伙伴简化设备<font color='red'>配置</font>
利用可配置处理器来创建多标准多分辨率视频引擎
  随着消费类电子产品,尤其是手机、PDA和便携式媒体播放器(PMP)的急剧发展,其对于终端硅供应商的要求也大大提高。对这些供应商来说,设计仅仅能够适用于一到两个多媒体编解码器或无线标准的IC已经远远不够了。消费者希望他们的设备能够播放各种采用不同的编码标准和无线下载标准的媒体。因此,必须采取一个新的更具灵活性的途径来更好地适配新的媒体标准。在本文中,我们主要谈一谈视频解码器和编码器引擎所面对的挑战和机遇。    基于RTL的传统视频引擎设计方法   上一代视频ASIC设计的目的是为了解码和编码MPEG-2,因为这是DVD所使用的标准。其中也有些支持MPEG-1,可以播放VCD。大多数情况下,这种单个应用的逻辑实现策略就是:利
[手机便携]
利用可<font color='red'>配置</font>处理器来创建多标准多分辨率视频引擎
stm32的八种GPIO配置模式
1. 模拟输入; 2. 浮空输入; 3. 上拉输入; 4. 下拉输入; 5. 开漏输出; 6. 推挽输出; 7. 复用开漏输出; 8. 复用推挽输出 具体的: 1.模拟输入 从上图我们可以看到,我觉得模拟输入最重要的一点就是,他不经过输入数据寄存器,所以我们无法通过读取输入数据寄存器来获取模拟输入的值,我觉得这一点也是很好理解的,因为输入数据寄存器中存放的不是0就是1,而模拟输入信号不符合这一要求,所以自然不能放进输入数据寄存器。该输入模式,使我们可以获得外部的模拟信号。 2.浮空输入 该输入状态,我的理解是,它的输入完全由外部决定,我觉得在数据通信中应该可以使用该模式。应为在数据通信中,我们直观的理解就是线路两端连接着发送端
[单片机]
stm32的八种GPIO<font color='red'>配置</font>模式
realme X2配置提前看一看
realme将于明日正式发布全新realme X2手机,而realme CMO徐起在微博放出了realme X2的主要配置,我们一起来看看吧。 全新realme X2将搭载骁龙730G处理器,采用UFS2.1+LPDDR4X闪存;采用6400万鹰眼四摄方案,前置3200万;支持30W VOOC闪充4.0技术,电池容量为4000mAh;支持屏下指纹、NFC、3D玻璃、双面GG5、杜比全景声、视频防抖等功能。 除此以外,新款realme X2还将采用一块拥有91.9%超高屏占比的三星Super AMOLED屏幕,后置四摄支持超清、超广角、微距、人像以及全新的超级焕彩模式,支持2x2 MIMO双重“防抱死”游戏天线,双WiFi加
[手机便携]
MAX752的管脚配置和内部结构框图
MAX752的管脚配置和内部结构框图
[电源管理]
MAX752的管脚<font color='red'>配置</font>和内部结构框图
MC9S12G ADC配置
首先呢ADC的控制分为以下五个寄存器。 ATDCTL0中的WRAP3 WRAP2 WRAP1 WRAP0对应下表,是用于多通道连续采样时用的(单通道采样可以不用设置),且选择的是连续采样的最后一个通道。而第一个通道是在ATDCTL5中设定的,并递增。 ATDCTL1 ETRIGSEL与后面的ETRIGCH3 ETRIGCH2 ETRIGCH1 ETRIGCH0配合使用,用于使用外部中断时的通道选择。 SRES1 SRES0 用于选择AD转换的精度,如下表 SMP_DIS 设置采样前是否要对通道中的电容器进行放电(
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved