|
修复Firefly-rk3288 android5.1接VGA显示器黑屏无显示问题
发表于 2016-9-18 23:28:28
浏览:11124
|
回复:7
打印
只看该作者
[复制链接]
楼主
本帖最后由 guoke5 于 2016-9-19 17:51 编辑
下载了Firefly-rk3288 android5.1 最新的代码,按照官网的介绍成功编译ROM,并将Android5.1的ROM镜像烧到板子上,板子是接着VGA显示器(最高分辨率1280×1024)的,烧ROM后板子重新开机,显示器却一直是黑屏的,没有显示内容,VGA显示器一直提示“输入不支持”。
除了VGA显示器没有显示,其他系统都是正常的,adb shell也可以正常接入,于是查看了一下当前设置的VGA分辨率,不查不知道 ,一查吓一跳:
- shell@firefly:/ $ cat sys/class/display/VGA/mode
- 1920x1080p-60
复制代码
什么?设置给系统的VGA分辨率居然为1920x1080!我的显示器根本支持不了那么高的分辨率,难怪显示器会黑屏。
按照同样的编译方法,试了Android4.4的ROM,发现是OK的- shell@firefly:/ $ cat sys/class/display/display0.vga/mode
- 1280x1024p-60
复制代码
于是查看了Android5.1关于VGA显示部分的内核代码(kernel/drivers/video/rockchip/vga),发现Android5.1代码在设置默认VGA分辨率时,固定设置为VGA分辨率列表的最大值(1920*1080).kernel/drivers/video/rockchip/vga/firefly-vga.c (vga_find_best_mode直接使用了vga_find_max_mode的返回值,而vga_find_max_mode的返回值却是1920*1080)
对比了Android4.4的SDK,发现vga_find_best_mode里面并没有直接使用vga_find_max_mode的返回值来设置系统分辨率。5.1的代码,vga_find_best_mode里面最后强制使用了vga_find_max_mode返回的值来设置分辨率,而vga_find_max_mode里面返回的却是1920×1080!因此导致显示器黑屏,只要却掉该处代码,显示即可正常。- diff --git a/kernel/drivers/video/rockchip/vga/firefly_vga.c b/kernel/drivers/video/rockchip/vga/firefly_vga.c
- index 06a7df4..6bcde3c 100644
- --- a/kernel/drivers/video/rockchip/vga/firefly_vga.c
- +++ b/kernel/drivers/video/rockchip/vga/firefly_vga.c
- @@ -292,7 +292,7 @@ static struct fb_videomode *vga_find_best_mode(void)
- printk("vga-ddc: read and parse edid failed errno:%d.\n", res);
- }
-
- - best = vga_find_max_mode();
- +
- return best;
复制代码 猜测:vga_find_max_mode里面有bug,没有过滤掉显示器不支持的分辨率,导致直接取了分辨率列表的最大值。
|
|