3883
- 收藏
- 点赞
- 分享
- 举报
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
完整版
[hide=5]1[/hide]
--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的分辨率下相当的流畅,没什么好说的,按《移》文修改声音驱动程序重新编译内核。
到这里本应该结束了,可是…可是…唉,嵌入式就是这样的,成功总是一模一样,错误总是千差万别啊。
○. 移植前的准备
源代码包选用目前最新的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
完整版
[hide=5]1[/hide]
--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的分辨率下相当的流畅,没什么好说的,按《移》文修改声音驱动程序重新编译内核。
到这里本应该结束了,可是…可是…唉,嵌入式就是这样的,成功总是一模一样,错误总是千差万别啊。
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2013-01-07 22:49:04
-
2014-08-05 21:15:43
-
2017-10-23 09:32:55
-
2015-11-06 14:07:25
-
2009-06-26 08:59:47
-
2016-10-24 16:30:33
-
2009-06-26 09:02:52
-
2017-04-27 14:22:50
-
2018-10-28 09:42:58
-
2019-03-15 15:26:44
-
2020-11-16 14:52:39
-
2019-06-04 11:13:15
-
2020-10-29 11:22:39
-
2019-01-03 15:03:45
-
2013-08-09 15:05:10
-
2014-03-21 13:51:38
-
2018-01-24 16:00:31
-
2018-06-08 14:11:32
-
22013-11-19 20:22:34
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认