Android 4.4 在启动到 ANDROID 闪光字的时候图像错乱的解决过程

    问题现象,接手移植后发现LCD在启动到 Android 闪光字的时候图像错乱。

    1.实验一 对比framebuffer参数

    利用Framebuffer原理、使用、测试系列文章中的demo进行测试并对比fb_var_screeninfo。

编译arm-linux-gcc fb-test.c -static。将a.out push到/system/bin/中使用adb shell a.out得到此刻framebuffer参数。

    在Recovery模式下发现不能启动adb,根据提示信息是没有/system/bin/sh,执行 busybox ln -s /sbin/busybox /system/bin/sh将busybox链接到/system/bin/sh后adb得以启动,测试程序也得以运行,Framebuffer参数拿到。

    对比结果:其中b是正常显示的,a是花屏扭曲的。

 Android 4.4 在启动到 ANDROID 闪光字的时候图像错乱的解决过程_第1张图片

 

    会不会是fb_var_screeninfo不一样导致的呢?对其进行反举证,将测试demo中设置成a的参数,看图像会不会出现撕裂状,在xres_virtual bits_per_pixel nonstd red相关参数修改后并不能引起图形显示有所变化,其中xoffset没有成功更改。基本排除是由于fb_var_screeninfo问题引起。

    补充:Android中自带有framebuffer测试程序mmm system/extras/tests/framebuffer/ -B会得到一个test-fb-simple。显示效果:

Android 4.4 在启动到 ANDROID 闪光字的时候图像错乱的解决过程_第2张图片

 

 

    2.实验二 应用层绘图错误

    Framebuffer向下没有问题,很自然就怀疑是上层绘图导致的错乱。查阅提供的开发文档。根据《RockChip_LCD开发文档v1.6.pdf》Android设置分辨率的代码在这里:

androidsrc/hardware/rk29/libgralloc_ump/framebuffer_device.cpp根据FBIOPUT_VSCREENINFO来顺藤摸瓜。源码中并没有这个文件正在向rk求助。另一方面是推测会从哪里读这个参数。

根据Android系统的开机画面显示过程分析的分析,闪动ANDROID字样是第三屏动画。第三屏动画是基于graphic的。直接操作fb的都没有问题,问题就是出在了graphic上。

分辨率问题是根据问题现象推测的,这里是具体现象。

现在LCD的现象是:

1.内核驱动正常,在kernel中企鹅logo显示正常;

2.Android的recovery模式显示效果正常;

3.使用framebuffer测试程序直接读写/dev/graphics/fb0显示效果正常。

3.但是在Android上层图形错乱,从 闪动ANDROID字样(android-logo-mask.png) 的开机动画就开始扭曲的不能正常显示。如附件:

 

唯一的区别就是Android上层是基于gralloc.rk30board.so来进行图形显示的,所以推测问题在这个库中对framebuffer的参数进行了修改。由于这部分并没有给出源码,增加了问题定位难度。也或者是Android上层并没有根据实际的LCD的分辨率参数进行绘图导致。

 

 

Rk答复:将内核中1366x768改为1376x768。照做后,显示正常。

 

首先说下结果:显示正常了。如图:

再补充一下,由于测试程序正常所以我就排除内核中的问题了,所以您说改参数的时候一直没有向内核中想。另你能说下我的推测是否正确:gralloc.rk30board.so中根据framebuffer的参数来进行图形的绘制?十分感谢。

答复:gpu驱动版本不一样。

 

总结:最后修改的代码并不多,但是在理清问题非常重要。

你可能感兴趣的:(android)