标题:
ARM MPlayer移植过程
[打印本页]
作者:
look_w
时间:
2017-10-24 21:26
标题:
ARM MPlayer移植过程
ARM MPlayer
移植过程
以下是个人移植的经验,如有什么不对的地方,欢迎高手出来拍砖,谢谢!
○
.
移植前的准备
源代码包选用目前最新的
MPlayer-1.0pre7try2.tar.bz2
,这些很容易从网上找到来就不给出联结了。编译工具选择
arm-linux-gcc-3.3.2.tar.bz2
,这个有
70
多
M
,也忘了当初从哪里收集回来的,本人就有这些收破烂的嗜好,没想到这次管用了:)
2.95.3
的在编译
MPlayer-1.0pre7try2
这个版本时会有问题,另外网上常见的
gcc3.4.1
版在编译
libavcodec/snow.c
文件时会挂掉,不知道是
GNU
的
BUG
还是
MPlayer
的
BUG
,没时间深究了,那位高人有结论了麻烦通报一下。补丁用不到,可以一帆风顺的完成编译的过程。
一. 安装工具及解压缩源代码
将
arm-linux-gcc
安装到
/usr/local/arm/3.3.2/bin
下,确保你现在有
root
权限哦,假设你的
arm-linux-gcc
工具包放在
~/src
目录下,执行以下的操作。当然你也可以将
arm-linux-gcc
安装到其它地方。
cd /
tar jxvf ~/src/ arm-linux-gcc-3.3.2.tar.bz2
修改
$PATH
变量包含
arm-linux-gcc
,我个人习惯修改当前用户
home
目录下的
.bash_profile
文件。在
.bash_profile
文件中增加一行
$PATH=/usr/local/arm/3.3.2/bin: $PATH
也可以不做这一步在以后用的地方用绝对路径。
以上完成了交叉编译工具的安装,接下来该解压
MPlayer
的源代码了。将
MPlayer-1.0pre7try2.tar.bz2
拷贝到工作目录
(
比如
~/develop)
下。
cp ~/src/MPlayer-1.0pre7try2.tar.bz2 ~/develop
cd ~/develop
tar jxvf MPlayer-1.0pre7try2.tar.bz2
mv MPlayer-1.0pre7try2 MPlayer (
这里只是改个名字,原来的实在太长了
)
上面应该不会有什么问题的,接下来就要开始编译了,各位看官可要看好了哈,来点掌声鼓励嘛
…..
哈哈。
二. 开始编译
首先是配置,这里有几个要注意的地方,命令如下:
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-armv4l-linux --enable-static --prefix=/tmp/mplayer --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --disable-live 2>&1 | tee logfile
--host-cc=gcc
是用来编译一些需要在
host
上执行的中间文件的,如
codec-cfg
,切记不能少了或搞错了!网上的《
mplayer
在
ARM9(s3c2410)
上的移植》
(
以下简称《移》文
)
一文介绍说遇到提示
codec-cfg
不能被执行出错时的解决方法是先将
codec-cfg
编译成
i386
平台的在再这里停下来时用
i386
的
codec-cfg
替代从而使编译继续。通过实验设置了这个参数就不用那么麻烦了,而且整个过程也显得比较幽雅了。
--cc=arm-linux-gcc
这个没什么好介绍的。如果上面没有将
arm-linux-gcc
的位置加入到
$PATH
中的话,在这个指定绝对路径好了。
--target=arm-armv4l-linux
这个参数要注意的是一个分三部分,第一部分的
arm
是指
arch
,这里设定为
arm
;第二部分的
armv4l
是指具体的版本,这个要注意了,一定要跟
libavcodec
目录下的平台目录名一致,否则为这个平台的优化代码没办法编译进去
(
据我观察是这样的
^_@ )
;第三部分是系统平台。
--enable-static
是设定静态连接,不需要一堆乱七八糟的动态库,尤其对我们这些新手来说省了很多的麻烦。如果设置了这个参数就不用设置
—prefix
了,另外也不用执行
make install
。
最后的一个
2>&1 | tee logfile
意思是将执行的情况在输出到屏幕的同时记录到
logfile
文件中,在控制台下编译比较有用。
剩余的几个参数没什么好介绍的了,记住
--disable-mencoder
要加上,
mencoder
在这里编译会有问题,还没有时间去研究呢。如果不清楚其它的参数的意思自己看
configure
文件吧,里面都有介绍。
配置完成了就该编译了。执行
make
这里在我的机器上大概花费了
2-3
分钟的时间。这样在当前目录下就得到可执行的
mplayer
文件。
三. 试运行
上面我们得到了可以在
2410
上执行的
mplayer
了,我是迫不得已的要跑一跑看效果如何。
现介绍一下
host
的设置。配置
host
的
nfs
服务,使
host
作为一台服务器能够被
2410
挂上
(2410
上的内核需要支持
nfs
哦
)
。以上的一些步骤很多资料上都有,我就摘录一些了,嘿嘿。
修改
/etc/export
文件,在其中添加一行
: /nfs *(rw,sync,no_root_squash)
关掉防火墙
: iptables –F
让
nfs
服务开机自动执行
: setup
后选
service
上面的需要重新启动后
nfs
才能运行起来,如果你现在还不想重起的话,咱们手动让它跑起来
: /etc/rc.d/init.d/nfs start
现在可以进行下一步了,将
mplayer
拷贝到
host
的
nfs
根目录里,将要播放的文件也一起拷贝过来
cp mplayer /nfs
cp xxx.avi /nfs
从
2410
上将主机的
/nfs
目录挂到开发板上没有使用的一个空目录上来,一般我选
/mnt
下的目录,如
/mnt/nfs
mount –t nfs 192.168.1.222:/nfs /mnt/nfs
现在试试看有没有成功
,
在终端里输入
cd /mnt/nfs
./mplayer xxx.avi
只见终端稀里哗啦的现实一堆的东西就停下来了。惨了!我是新手啊,让我怎么处理呢。别急慢慢来,先看看提示信息吧。提示信息中大概有这些
can’t open /dev/fb0
vo[null]
can’t open /dev/dsp
ao[null]
先把图像弄出来吧,这样可以证明编译和基本设置都没有问题,声音下一步再处理了。看
mplayer
手册介绍使用的视频输出是
fb.
去
/dev
下面看看发现只有
/dev/fb
一个而没有
/dev/fb0
啊。先看看有效的输出设备吧,用
mplayer –vo help
,挨个挨个试
mplayer –vo xx xxx.avi
都还是不行。难道是编译过程有问题?解码器什么的各个参数组合都试了一遍,还是一样,
LCD
没有动静。折腾了几个晚上,我打算放弃了
……
一日在网上闲逛,看了一片文章介绍
Linux
的一些技巧,如
cp /dev/fb myimage
相当于抓屏。突然我在想那么是不是
cp myimage /dev/fb
就相当于显示
myimage
呢?不管它试试再说。果然
LCD
开始有动作了,虽不是正常的将图片显示出来,但还是可以三个相同的轮廓。此证明
LCD
的驱动是没有问题的。而
mplayer
使用的是
/dev/fb0
我
cp
的是
/dev/fb
!而且这个
/dev/fb0
我好像在什么地方见到过。仔细这么一想,以前内核是有这个
/dev/fb0
的,现在使用的内核是我自己编译的,而且有
/dev/fb
这个节点说明
framebuff
驱动没有问题,那么新旧内核的差别在什么地方?这是我想到好像在编译内核的时候我没有按实际修改
mtd
的分区参数会不会是这个在作怪呢?
修改
drivers/mtd/nand/s3c2410_nand.c
文件中的参数为实际对应的参数重新编译内核下载,去
/dev
目录下一看果然
/dev/fb0
出现了。
….(
此处省略
xxx
字节
)
追查到
/etc/init.d/rcS
文件
(
每个人的配置不一样,请查看你对应的文件
)
一切真相大白,各位自己去研究这个文件吧。由于文件分区信息不对,内核不能执行
/etc/init.d/rcS
,导致一些系统初始化动作没有执行。
再试着执行
./mplayer xxx.avi
还是不对,难道难道
…
试一试《移》文中的只播放图像不播放声音,
./mplayer –nosound xxx.avi
哈哈正常了,在
320x240
的分辨率下相当的流畅,没什么好说的,按《移》文修改声音驱动程序重新编译内核。
到这里本应该结束了,可是
…
可是
…
唉,嵌入式就是这样的,成功总是一模一样,错误总是千差万别啊。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0