android移植 十之一 lcd课题

当第一次移植android的时候,最最欣慰的现象就是lcd上有所显示。

但事与愿违,我的第一次做android1.6移植的时候,就遇到了麻烦。

电路板的cpu是freescale的 imx35。网上有好多此核心的 bsp,可不幸的,我的bsp在 framebeffer上,跟android不太兼容。

我的使用的内核,跑qt的rootfs是没有问题的,显示一切正常,可用android的rootfs时,就显示错误。感觉好像是双缓冲出现了问题。

lcd上只显示出一个buffer的东西,另一个buffer没有数据,所以lcd上就是android的图像和黑屏交替出现。

搞了很长时间也没有从代码上解决这个问题,毕竟要重新搭建一个framebuffer的驱动不是简单的事。 一天,索性把framebuffer的驱动换成其他bsp包中的代码,重新编译后,奇迹出现了。困扰4天的问题终于解决了。

接踵而来的是,颜色空间的问题。lcd的屏幕不再闪烁了,但是颜色出了问题。从现象上看,是驱动的颜色空间出了问题。查验了android的关于显示部分的代码,发现,android使用的是565的配色方式。可是我的电路板使用的888的lcd。这就不可避免的,出现了串色的问题。

修改驱动,把888的驱动,硬生生的改成了565的方式,最终搞定了这个问题。

 

还有一个额外的话题。开发一个独立于android系统的使用framebuffer的程序,那么就必须注意android的双缓冲。否则,就会看到android每次刷新屏幕,你的程序就跟着闪烁。

 

android使用屏幕的大小,是从framebuffer中获取的,如果要改变android的显示区域,可以修改那个部分的ndk代码。这样,所有的android程序显示都会跟着改变。

 

android的 surface的使用是排他的,比如在开机启动动画的时候使用了surface,那么同时就不能再运行同样使用surface的进程。

所以,大家看到的是开机启动动画结束以后,才看到了第一个画面。

你可能感兴趣的:(android,buffer,qt)