tiny4412MADplay&&MPlayer驱动移植

本文详细介绍了在Ubuntu 16.04环境下,针对4.10.0内核的嵌入式系统,如何进行madplayer和MPlayer的交叉编译及移植。内容包括准备交叉编译环境,编译madplayer所需库,如libid3tag、libmad、zlib,解决编译过程中遇到的问题,以及将编译后的库和可执行文件移植到开发板上。此外,还涉及在开发板上配置声卡驱动、创建设备节点,以及解决播放过程中遇到的错误。
摘要由CSDN通过智能技术生成

1.1准备工作
1.1.1系统版本和开发工具
系统:Ubuntu 16.04 LTS / X64
LINUX内核:4.10.0
其中,Ubuntu16.04 LTS我们要先进行过安装,其内核版本为4.10.0,交叉编译工具链在生产厂商提供的光盘资料里面可以找到,而busybox的源码包直接从官网下载(https://busybox.net/downloads/)。
1.1.2Madplayer源代码及其相关库
madplay-0.15.2b.tar.gz
libid3tag-0.15.1b.tar.gz
libmad-0.15.1b.tar.gz
zlib-1.1.4.tar.gz
1.1.3(1)本地编译搭建相关的交叉编译器环境
1.1.3.1交叉编译器的简介

在了解交叉编译之前我们首先介绍一下另一个概念:本地编译
之前所做的c开发和keil软件开发,都属于本地编译,即在当前PC下(x86的CPU下),直接编译出可以运行的程序(或者库文件),其直接在当前的环境(即x86的CPU下),此时的编译称为本地编译,即在当前平台下,编译出来的程序,只能放到当前平台下运行。
(2)交叉编译(cross compile)
交叉编译和本地编译为相对应的概念。所谓的交叉编译就是在一种平台上编译出来的程序,是放到别的平台环境运行,即编译的环境和运行的环境不一样,属于交叉的,或称为cross。交叉编译的概念,主要使用在嵌入式开发当中。
1.1.3.2为何要有交叉编译
之所以需要有交叉编译,是因为嵌入式系统中的资源太少,即交叉编译出来的程序,所要运行的目标环境资源有限,所以很难进行直接的本地编译。
最常见的情况是:在进行嵌入式开发时,比如目标平台(嵌入式开发板)为最大主频200MHz的ARM的CPU,加上RAM、Nand Flash等等。在如此相对比较紧张的硬件资源的前提下,加上已经运行了嵌入式Linux程序,是很难直接去进行本地编译的,因为编译,开发会消耗较多的CPU、内存、硬盘等资源,而嵌入式开发板上的资源,除去嵌入式(Linux)系统运行部分,没太多剩余的资源供本地编译。
1.1.3.3如何搭建交叉编译器
(1)获得源码:开发板光盘A/linux/ arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
(2)拷贝源码到Ubuntu系统中/driver(创建的一个目录)的文件夹下
(3)进入存放目录,解压缩到根目录
tar -xzvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /
注:-C选项制定了解压路径,指定在 / ,解压出来后的目录名为opt,所以会存放在/opt下。
(4)修改环境变量,把交叉编译器的路径加入到PATH
PATH 决定了shell将到哪些目录中寻找命令或程序
方法一:修改/etc/bash.bashrc(为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取)文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1/bin
方法二:修改/etc/profile文件(为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置):

vim /etc/profile

增加路径设置,在末尾添加如下,保存/etc/profile文件:
export PATH=KaTeX parse error: Expected 'EOF', got '#' at position 49: …/4.5.1/bin 方法三:#̲ export PATH=PATH: /opt/FriendlyARM/toolschain/4.5.1/bin
  注:临时保存,重启失效
(5)立即使新的环境变量生效,不用重启电脑:
 对应方法一:#source /root/.bashrc
 对应方法二:# source /etc/profile
(6)检查是否将路径加入到PATH:
   # echo $PATH
显示的内容中有/opt/FriendlyARM/toolschain/4.5.1/bin,说明已经将交叉编译器的路径加入PATH,交叉编译环境变量添加成功。
(7)安装32位库兼容包
sudo apt-get install lib32ncurses5 lib32z1
(8)测试是否安装成功
此时你可以在控制台输入:arm-linux-gcc -v ,如果安装成功将会输出 arm-linux-gcc的版本号。

1.2音频环境搭建
1.2.1搭建PC平台的madplayer
1)在根目录新建名为Madplayer的工作目录
a)终端输入:
cd / -----------确保新建目录的路径在根目录下
mkdir Madplayer ----------新建Madplaye目录
ls ---------查看是否成功创建

2)在终端中敲入cd /Madplayer/进入该工作目录,输入以下指令依次创建新建目录文件:
mkdir package src-x86 src-arm target-x86 target-arm
package 用来存放所有的源代码包
src-x86 用来存放X86 版本的所有源代码文件
src-arm 用来存放ARM 版本的所有源代码文件
target-x86 X86 版本的安装目录
target-arm ARM 版本的安装目录

3)将madplay-0.15.2b.tar.gz、libid3tag-0.15.1b.tar.gz、libmad-0.15.1b.tar.gz、zlib-1.1.4.tar.gz、
MPlayer-1.1.1.tar.xz四个库文件压缩包拷贝到package 目录下。

4)解压压缩包到src-x86目录中
tar -zxvf libid3tag-0.15.1b.tar.gz -C …/src-x86/
tar -zxvf libmad-0.15.1b.tar.gz -C …/src-x86/
tar -zxvf zlib-1.2.5.1.tar.gz -C …/src-x86/
tar -zxvf madplay-0.15.2b.tar.gz -C …/src-x86/
或者:for f in $(ls *.tar.gz); do tar -xvf $f -C …/src-x86/; done;

1.2.2库文件编译
经过以上步骤,所有需要的依赖包已经准备完毕,接下来需要对库文件进行编译。
一般编译项目的步骤是:
./configure
make
make install
1.2.2.1编译libid3tag库文件
1)首先在终端指令cd …/src-x86/ libid3tag-0.15.1b/ 进入到src-x86下的libid3tag目录
2)./configure --prefix=/Madplayer/target-x86/
configure为脚本配置工具,configure的作用是利用这个configure的脚本来查看你的linux的运行环境。然后生成一个Makefile文件。
'–prefix’是最常用的选项.制作出的’Makefile’会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分,选择安装的路径。

3)编译
make
4)安装
make install
执行完成将在target-x86产生相应的库文件

1.2.2.2libmad库文件编译
1)进入到libmadc’d目录中
2)./configure --prefix=/Madplayer/target-x86/
3)编译,在终端输入指令make
有以下错误:

解决方法:找到libmad的configure命令之后生成的Makefile文件,将其的"-fforce-mem"字符串,将其删除即可。
在终端中敲入vim Makefile进入该文件,通过底行查找并将"-fforce-mem"字符串删除

4)安装
make install
1.2.2.3编译zlib库文件
1)进入zlib目录
2)./configure --prefix=/Madplayer/target-x86/
3)编译
make
4)安装
make install
以上过程完毕,将在 target-x86 目录出现编译madplay所依赖的库文件和头文件。
在终端中敲入cd …/…/target-x86/ 进入到target-x86目录中,可通过ls命令进行查看

1.2.2.4编译安装madplay
1)进入madplay-0.15.2b目录
2)./configure --prefix=/Madplayer/target-x86/
在进行配置的时候会出现以下错误:
提示我们在配置madplay之前要先安装libmad,因为我们之前已经编译并安装了依赖库,根据提示我们要设置CPPFLAGS 环境变量以及LDFLAGS环境变量。

解决:(登高两边不要出现空格)
./configure --prefix=/Madplayer/target-x86/ CPPFLAGS=-I/Madplayer/target-x86/include LDFLAGS=-L/Madplayer/target-x86/lib
3)编译
make
4)安装
make install
进入target-x86目录下,查看bin目录,此时会发现abxtest madplay两个文件
其中abxtest是附加生成的测试程序,madplayer为生成的执行程序

1.2.2.5测试PC 端的madplay播放器
1)拷贝一首mp3 文件到madplay所在的目录
2)在终端中敲入./madplay xxx.mp3播放歌曲
由于Ubuntu未安装声卡驱动,直接使用madplay播放会出现audio: /dev/dsp: No such file or directory错误。madplay使用oss建构,可以用alsa支持oss架构。
简单解决方法如下:使用madplay解码再使用aplay播放:)
3)madplay -o wav:- xxx.mp3 | aplay
1.2.3搭建arm平台的madplayer
在进行搭建时,所操作的步骤和上面pc端的操作相似,所以这里通过shell脚本简化操作
1)创建build_arm.sh脚本文件,填入以下内容
#!/bin/sh
MADPLAY_DIR=/Madplayer #工作目录的路径
TARBALL_DIR=KaTeX parse error: Expected 'EOF', got '#' at position 21: …AY_DIR/package #̲存放压缩文件的路径 SRC_D…MADPLAY_DIR/src-arm #存放ARM 版本的所有源代码文件的目录
TARGET_DIR=$MADPLAY_DIR/target-arm #ARM 版本的安装目录
ARM_ROOTFS=/driver/rootfs/ #根文件系统路径
tar -zxvf $TARBALL_DIR/zlib-1.1.4.tar.gz -C $SRC_DIR
tar -zxvf $TARBALL_DIR/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar -zxvf $TARBALL_DIR/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar -zxvf $TARBALL_DIR/madplay-0.15.2b.tar.gz -C $SRC_DIR
tar -zxvf $TARBALL_DIR/MPlayer-1.1.1.tar.xz -C $SRC_DIR

for f in $(ls $TARBALL_DIR/*.tar.gz); do tar -zxvf $f -C $SRC_DIR; done

export CC=arm-linux-gcc #使用交叉编译器进行编译
#安装zlib******#
cd KaTeX parse error: Expected 'EOF', got '#' at position 22: …R/zlib-1.1.4 #̲进入src-arm/zlib-…TARGET_DIR
make && make install -j8 #编译安装

#安装libid3tag*#
cd S R C D I R / l i b i d 3 t a g − 0.15.1 b . / c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值