源代码包选用目前最新的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,没时间深究了,那位高人有结论了麻烦通报一下.补丁用不到,可以一帆风顺的完成编译的过程.
--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文件吧,里面都有介绍. . 先把图像弄出来吧,这样可以证明编译和基本设置都没有问题,声音下一步再处理了.看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的驱动是没有问题的 修改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的分辨率下相当的流畅,没什么好说的,按《移》文修改声音驱动程序重新编译内核.到这里本应该结束了,可是…可是…唉,嵌入式就是这样的,成功总是一模一样,错误总是千差万别啊. (jacky) |