教学目的及要求:
1.掌握交叉编译环境的搭建;
2.了解软件移植的基本原理;;
3.掌握嵌入式软件移植的一般过程
实验内容于分析设计:
1、掌握 C 语言基础知识;
2、掌握 Linux 环境下 vi 编辑器的使用方法;
3、掌握 Makefile 的编写和使用方法;
4、掌握 Linux 下的程序编译与交叉编译过程;
5、掌握软件移植的一般方法。
所需硬件环境:
1、博创 UP-CPU6410 教学及科研平台;
2、PC 机 pentium500 以上,硬盘 40G 以上,内存 512MB 以上;
所需软件环境:
1、libmad-0.15.1b.tar.gz
2、MPlayer-1.0rc2.tar.bz2
3、4.3.1-eabi-armv6-up-cup6410.tar.gz 交叉编译器
设计过程:
1、解压 4.3.1-eabi-armv6-up-cup6410.tar.gz 软件包,搭建编译环境;
2、解压 libmad-0.15.1b.tar.gz,并编译;
3、解压 MPlayer-1.0rc2.tar.bz2,并使用.configure 编译,最后 make 生成可执行程序。
4、连接开发板,在开发板上执行、测试。
具体操作:
1、 准备源码安装包及测试文件
2、搭建交叉编译环境搭建:
(1) 环境搭建
1、连接串口线、网线和电源线
线路连接:连接电源线,网线和 TTL 串口调试线,串口连接方式如下:
2、使用超级终端连接开发板
(1)配置好串口调试环境
安装 USB 转接串口工具:PL2303_Prolific_DriverInstaller_v1210.exe
查看 com 端口号:右键电脑->属性->硬件->设备管理器。如果驱动安装会成果,
会有如下图显示:
双击该端口,将配置改成如下图,还可以在高级当中更改端口配置:
更改后点击确定,然后右键端口,选择如下,即可看到更新后的端口号。
(2)安装 SecureCRT,建立超级终端,连接开发板
1.打开端口访问工具 securecrt,对光盘中的 securecrt.zip 解压即是该工具。
双击 SecureCRT.exe
2.配置如下:其中端口号是和刚设置的端口号保持一致。
3.如果连接成功,会出现如下标记:
重新插入开发板电源,会出现相应的启动信息。
3、设置好 nfs 网络,使开发板和宿主机可以联通
1.查看宿主机网络配置:ifconfig
2.在超级终端查看开发板网络配置:ifconfig,若不在同一网段,配置为跟宿主机同一个
网段。
ifconfig eth0 …… netmask ……
3.看看开发板和宿主机是否能 ping 通。若不通,关闭宿主机防火墙:
service iptables stop
chkifconfig iptables off
reboot
4.配置 nfs
也可以通过命令配置 nfs
(1)进入/etc/init.d 中启动 nfs
./nfs stop
./nfs start
(2)建立主机连接开发板的文件夹
mkdir /home/nyqiuya/arm-jcby
(3)修改/etc/exports 文件
gedit /etc/exports
再该文件中添加:/home/nyqiuya/arm-jcby
92.168.1.*(rw,sync)
(4)挂载
在开发板端:
mount –t nfs –o nolock 宿主机 IP:/挂在目录 /mnt
或者 mountnfs 宿主机 IP:/挂在目录 /mnt
其中/mnt 是开发板端的目录
(2)安装交叉编译工具链
1、 解压工具链到某一目录上
tar -xzvf arm-linux-gcc-4.3.2.tar.gz -C
/usr/local/arm
2、 修改/etc/profile,添加 pathmunge /usr/local/arm/4.3.2/bin
3、 执行 source
4、 检测是否安装成功
/etc/profile,使生效
which
arm-linux-gcc 或者 arm-linux-gcc
-v
3、配置生成可执行程序
1、移植准备:
软件准备:MPlayer-1.0rc4.tar
① 在 虚 拟 机 下 创 建 一 个 文 件 夹 用 于 Mplayer 移 植 并 把 libmad-0.15.1b.tar 和
MPlayer-1.0rc4.tar 复制到所创建的文件夹中
所用命令:mkdir
libmad-0.15.1b.tar
/share
cp MPlayer-1.0rc4.tar /share
cp libmad-0.15.1b.tar /share
②进入/share 并在/share 下创建两个分别命名为 MPlayer 和 libmad 的文件夹用于存放 lib
库和 Mplayer 应用文件
/share
所用命令:cd
mkdir
mkdir
MPlayer
libmad
2、编译 libmad 配置环境
①在/share 解压 libmad-0.15.1b.tar
所用命令:tar zxvf libmad-0.15.1b.tar
②进入解压得到的源码目录中,运行 configure,生成 Makefile
所用命令:cd
libmad-0.15.1b
./configure
CC=arm-linux-gcc
--host=arm-linux
--disable-shared
--disable-debugging --prefix=/share/libmad
③修改 Makefile,找到 Makefile 中的“--fforce-men”,删除后保存
所用命令:gedit
(用 vi Makefile 时,搜索命令:g/fforce-men)
Makefile
④make 和 make install
所用命令:make
make install
3.检查
进入/share/libmad 中输入 ls,查看是否成功生成 include 和 lib 两个文件夹,include 中
为 mad.h,lib 中为 libmad.a 和 libmad.la
4.交叉编译 Mplayer
①在/share 下解压 MPlayer-1.0rc4.tar
所用命令:tar zxvf MPlayer-1.0rc4.tar
②进入解压得到的源码目录中,运行 configure,生成 Makefile
所用命令:cd
/MPlayer-1.0rc4
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux
--enable-fbdev --enable-static --disable-dvdread --disable-live --disable-mp3lib
--enable-mad
--disable-ivtv
--disable-dvdnav
--disable-libdvdcss-internal
--enable-libavcodec_a --prefix=/share/MPlayer 2>&1 | tee logfile
--disable-dvdread-internal
--disable-win32dll
--disable-mencoder
③手动添加 libmad 库的支持
–with-extralibdir 提示没
由于下载的 Mplayer 源代码在配置时--with-extraincdir
有 此 配 置 选 项 , 因 此 需 手 动 添 加 libmad 库 的 支 持 , 我 的 解 决 方 法 是 将 /share
/libmab/include 下文件直接拷贝到 mplayer 源代码中,同时也把/share /libmab/include
下的 mad.h 拷贝到 Mplayer 源代码中,而对于其下面的库 libmad.a,则先执行上面的“运
行 configure”一步,会生成 config.mak 文件,然后修改 config.mak 即可。
所用命令:cp -r /share/libmad/include
/share/ MPlayer-1.0rc4
cp /share/libmad/include/mad.h
/share/ MPlayer-1.0rc4
④修改 MPlayer-1.0rc4 中 config.mak
修改 config.mak 中在-lmad 后加上-L/share/libmab/lib,然后执行下一步
所用命令:gedit
/config.mak
⑤修改 Makefile
修改 MPlayer-1.0rc4 下 libmpeg2 下 motion_comp_arm_s.S 文件
在最前加入:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
所用命令:gedit
/libmpeg2/motion_comp_arm_s.S
⑥运行 make 编译源代码
所用命令:make
⑦install 修改
查资料看 install 带-s 参数时会自动调用 strip 来 strip 应用程序。但是 arm 编译时要调
用 arm-linux-strip 才有正确处理。解决办法是取消-s 参数,查看 Makefile 可以发现-s
是如下
$(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF)
$(BINDIR)
的 INSTALLSTRIP 设置的,它默认是-s,因此只要简单在 Makefile 的 install 部分前面加
入:
INSTALLSTRIP :=
⑧执行 make install
#将其置为空即可
5、检查
进入/share/MPlayer 中输入 ls,查看是否成功生成 bin、etc、share 和 lib 四个
文件夹
6、连接开发板 ping 通,配置 nfs,关闭防火墙,挂载/share 文件夹到开发板
7、将自己准备的音乐文件拷贝到所挂载的文件夹中,在开发板上利用 Mplayer 运
行音乐和视频文件。
8、其他
①制作一个播放列表:ls
②随机播放:mplayer -playerlist tom.lst -shuffle
/mnt/*.avi > tom.lst
-playerlist 指定播放列表
-shuffle
指定随机播放
9、结果
在开发版上运行,将耳机插入相应位置,所播放的音乐即通过耳机传入耳中
Mplayer 移植总结
Mplayer 是自带的 mp3lib 库来进行 mp3 解码的,但是 arm 系列的 cpu,一般
都没浮点运算单元,而 mplayer 的 mp3 解码默认使用 mp3lib,这个是浮点运算库,
arm 上肯定跑不了。需要使用 libmad 库,所以需要提前移植 libmad 库。另外,准
备开始前请先确定已安装交叉编译器 arm-linux-gcc(4.3.2),并已经在终端设置
好环境变量,做好这些就可以开始移植工作了。
一般软件的移植主要分五大步骤:
①、解压所需的库文件等软件压缩包
②、配置环境
③、运行 configure 生成 Makefile
④、修改 Makefile
⑤、make 和 make install
在开发板上输入
./mplayer *.avi -framedrop -quiet -vf rotate=1,scale=240:320 测试时,发
现没有声音。这时,我们需要输入一下命令:
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound
原因是:目标系统上有/dev/dsp 音频设备文件,只是 OSS 音频驱动需要的是
/dev/sound/dsp 设备文件,这个问题的简单解决方法是建一个符号链接,当然这
两条命令可以写在系统的启动文件的适当位置,即修改系统的/etc/init.d/rcS 文
件。