记一次RK3288改成电视盒支持老投影仪VGA的经历
本文用于解决电视盒HDMI转VGA连接老投影仪,出现的颜色失真问题。只适合会玩会动手之人。
一开始,想弄个投影仪投到墙上看看电视,屏幕要大,颜色要正,音效差不多就行。就这么简单!!!
【材料准备】
1、投影仪
以前从未玩过投影,怕水深,于是X东那里找了找,发现贵,稍微好的都5000以上,也有便宜的新科技型的,不放心。银子不够,加上现在受疫情影响,也没业务没收入,舍不得花钱,于是上小黄鱼淘了个350块的老投影仪,型号TOSHIBA TDP-TW100。大家看看值不值。
这个型号据查已经出了15年以上,当时的价格是15000元(必须土豪才配拥有啊,莫非我捡到土豪玩剩的宝了?),卖家是本地一个维修店老板,因疫情也不开店,我俩在杂乱的配件堆翻出这个投影做了测试,第一眼看上去清晰明了,(后来我推算这个灯泡应该是换过的),于是交易达成。
做测试时,使用的是AV端子,所以当时没有认真看画质,确认一下整机正常就没多想,拿了就走,心想大不了我回去也用AV端子接各种视频设备。事实证明,我是个挑剔的人,这里已经看走眼了,看后续讲解。
2、电视盒
投影仪买好了,接下来准备电视盒吧,原本手头有个N年前的上网本,AMD的APU,只能装XP用,测试了一下看视频,根本就只能当PPT看。寻思还是买个电视盒吧,还是X东(X东主要是快递当天到,快),看了小米、企鹅盒子,发现价格都不贵,但是猜就知道,开机先来一段广告啦,价格是很便宜,但是AV端子线要额外买,于是萌生了买专用(杂牌)一点的电视盒,最后挑了一款叫亿播的,原配有3.5mm转AV端子音视频线。对这个行业真不熟,不知道这个盒子究竟暗藏什么门道。
3、音箱
手上有个烂桌面音箱,几年前曾把有线改蓝牙,因效果不好,荒废了,这次刚好用上。
【组装测试】
组装完成,测试能看。由于当时没拍照,没法上传照片。坐下来看电视吧。
【折腾开始,挑剔效果】
故事原本到此应该结束,因为已经能看了,也不需要折腾。原本喜悦舒缓的心情,慢慢变成不淡定了。原来AV端子输出效果这么差,不但分辨率极其小9最大720*480),画面还能明显看到有扫描、抖动的纹路。这不是我想要的结果,怎么办?想办法喽。
咦,这个电视盒不是有HDMI端口嘛,而投影有VGA端口,那为何不试试HDMI转VGA呢?
于是翻出一条曾经不知道哪里来的HDMI转VGA线,将电视盒转接到投影仪的VGA接口。又是一阵欣喜,画面竟然有了,而且不抖动了,终于又解决了一个问题。
【HDMI转VGA的坑】
然鹅,事情远没结束,认真一看投影,白色的字或画面会出现一部分绿色或其他颜色,当看字幕时最明显。1、初步判断VGA线有问题,换,没解决。2、判断电视盒HDMI分辨率设置问题,找到设置,修改为最低的aaa@qq.com,发现电视盒死机,只能调aaa@qq.com(所以说杂牌电视盒就那样),还是没有解决。3、投影仪参数,实在没什么可调的,这个TDP-TW100支持16:9宽屏和4:3模式,都试过,没解决。4、判断投影的VGA口问题,刚好两个VGA口都试几遍,也没有解决。5、判断投影仪电路板VGA接口坏了,拆开投影仪,检查有没有电容鼓包或线松动,东芝的东西真的做工精细,什么都看不出问题。
那么会不会是HDMI转VGA线坏了?狠一狠心,到X东再买一条,这回下了血本,买了绿联的,就不信绿联也不行。(又是等待,又是白花花的银子送人。)
拿到线后第一时间就接上,原本以为满心欢喜,最后发现问题一模一样。
这时,我做了个测试,发现,把电视盒用HDMI转VGA接电脑的显示器,发现显示器正常。这就怪了,难道是投影仪的问题?难道是投影仪的VGA接口,无法匹配太高分辨率?看来,这个投影仪得换掉了,想到要花大价钱去买个新的宽屏投影仪,我只能选择放弃了。
【验证投影仪分辨率,RK3288出场】
时间已经折腾了2个星期了,正当可惜了这些投入,以及工作项目拖延被客户骂的遗憾,我想起了我手上有2个年代稍微久的RK3288开发板,其中一个是Firefly,用来开发linux功能,另外一个是曾经用来做成品的铁盒版(厂家已经无法找到)。这两个盒子都有VGA接口,也都有安卓系统。如果拿来做电视盒,岂不是可以免掉HDMI转VGA的麻烦?
说完马上动手,首先翻出“铁盒版”的3288,满心欢喜接上VGA到投影,发现VGA根本没图像,但是开发板带的HDMI是可以的,逐进入系统找设置,发现设置里面根本没有VGA想过的选项。放弃。
再翻出上图的这个带亚克力的Firefly出的RK3288,这个3288同时拥有VGA和HDMI接口,所以把VGA接投影,HDMI接电脑的显示器(我手上显示器多,任性!呵呵),遗憾,原来之前我改过linux,里面没有android,不得不打开当时用的各种软件资料,再次看厂家的开发资料。好在以前还有点记忆,摸索一下,找到了2016年的一个firmware(固件),是安卓5.1版,重新烧录。这里技术性也不算太高,不描述了。
然后重新接投影,哈哈,这回双屏显示OK。等等,VGA的显示还是一样,颜色失真,分辨率1920x1080,好吧,进系统设置--显示,终于看到有个VGA选项了,把它调小,1280x720,还是失真,调720x480还是失真,特么这到底怎么肥四啊...(项目那么又在催结果,烦死了)。难过,伤心无比的那种......
【曙光】
正当准备再次放弃时,我无意中发现1366x768这个分辨率竟然可以投影正常!那就是解决问题了呀,好的,就这么办。终于正常了,赶紧下载几个必须的APP,听网友讲当贝桌面和当贝市场好用,就立马安装上,然后在当贝市场找了“电视家”“芒果tv”等等APP全装上,一切测试正常。
似乎从此就可以享受投影大屏看电视了,已经想好什么时候喝杯茶了。
【再次打击】
什么都装好了,总得想重启一下开发板吧,于是就做了。当重启完成我就开始问候firefly全家了,为什么?VGA刚才不是设置了1366x768吗?那特么这个开发板为什么重启以后还是变成默认的1920x1280,也就是说颜色还是失真了!再设置,再重启,问题依旧。难道是这个Firmware的bug?
带着疑问,我在Firefly论坛找答案,发现有人问过这个问题,没有人给出答案。
行,就当我的固件版本太低。继续刷固件。于是在官方网站的指引下,找了几个frimware,各种case。
结果,依然令人失望,VGA就是不能保存分辨率。
但是,在查询过程中,我看到有个人提到,说是源代码中VGA驱动读出设备EDID然后去适配分辨率,如果读不出就默认分辨率(1920x1080)。那意思就是说我的投影没有所谓EDID?算了,放弃吧,都不能识别了,我还能怎么样。
【灵机一动】
时间又过去了两天,周末刚好有点点时间,忽然灵机一动,为什么我不直接修改驱动呢?让设备读不出EDID后,直接用1366x768分辨率。(其实在Firefly论坛有人曾讲过他修改过VGA驱动,但是该网友不细讲,只简单提到)。虽然没人给指引,但是至少有人提到修改VGA驱动,那我也可以自己试试。
【安卓内核修改VGA驱动,重点】
首先,必须按照官方的一个指引《编译 Android 5.1 固件》去做。先安装虚拟机,装ubuntu14.04版(不建议用其他版本),apt-get各种插件,按照指引连接git,下载好所有安卓源码。官方有自动编译方法和手动编译方法。但是,其实由于年代已久,我这些源码根本编译不过去。光做这些操作已经很花时间了,还要各种配置。
行吧,先修改VGA驱动,然后只编译内核,总行了吧。内核编译还是成功了。
cd ~/proj/firefly-rk3288-lollipop/kernel
make firefly_defconfig
make -j8 firefly-rk3288.img
能编译后,就修改一下VGA驱动,这个有点难,我先后进行多个研究编译测试,最后锁定文件项目/proj/firefly-rk3288-lollipop/kernel/drivers/video/rockchip/vga/sda7123_vga.c文件就是驱动。
这里有点投机取巧,既然分辨率总是要跳默认,那我把默认那个分辨率都改为1366x768的参数不就没事了吗?
改完保存,然后按照前面的指令编译,通过。这个时候,生成的文件会在项目/proj/firefly-rk3288-lollipop/kernel/产生2个文件,分别是kernel.img和resource.img。
把生成的2个img文件用AndroidTool.exe烧录到开发板上。从虚拟机转移出这2个文件到烧录工具的rockdev文件夹里面,先把开发板连接5V电源,USB连接到电脑,然后按住recover按键不放手、再按reset键3秒,放开reset,稍等再放开recover键,电脑会识别出LOADER设备,然后勾选kernel和resource下载。(考虑到官方有足够的视频和资料,这里也没太大必要细讲)。
【最终解决】
通过以上的操作,最终,开发板VGA固定每次都在1366x768的分辨率了。不过这个功能似乎有影响HDMI,我无所谓,我又不用它的HDMI,真有这个需求大不了再改驱动呗。
当~当当当,最终投影分辨率。
至此,我终于通过自己的摸索,解决了我想用投影看电视而遇到的种种困难。能看完文章的人应该是有同样困扰,希望能对大家有帮助。