因为之前在2440的平台上做过这个,所以就觉得应该很简单,但是还是耗费了我两天的时间,现在就简单的介绍下:系统从上电到进入操作系统大体分为两个阶段:BootLoader和lanch os;所以logo必须在这两个阶段都能够正常的显示。
添加logo有两种方式一种是以数组的形式保存图像数据,然后memcpy到framebuffer;还有一种方法就是把图片预先放置到flash的指定位置,系统上电的时候,从flash读取图像,然后显示出来;考虑到本系统LCD分辨率比较大,1024*600而且是24位的,所以就采用第二种方法。
首先将图像通过Image2Lcd软件转化成.bin文件,然后通过EVMFlash3530_v1.2软件烧写到flash的block6以后。
然后在eboot中调用OALFlashStoreOpen,OALFlashStoreBufferedRead,OALFlashStoreClose来读写flash中的图像数据。
最后用lcd_config(framebuffer)来显示图像。
几个步骤下来,在BootLoader显示图片没有问题,接下来的就是要在OAL层显示logo,一开始的做法就是在OEMInit函数中添加一个InitDisplay函数,因为三星的BSP都是这么干的,但是在OEMInit函数中读写flash就不那么容易了,系统的flash结构应该是属于fal+fmd结构的,将fmd链接到OAL层,但是调用的时候都是死在flash读写的地方,网友和同事都说可能是flash读写冲突所造成的,但是自己在OEMinit中直接往framebuffer里写值,也是不能正确的显示指定的颜色!那肯定是OAL部分其它地方又初始化了,果然在OALPowerPostInit也就是被kernel调用的,将这句话注释掉,果然BootLoader中的图像一直可以显示到进入CE界面!哈哈,看来虽然是不同的BSP,但是其原理还是差不多的,只不过表现形式不一样罢了~~