读书人

android ICS 系统启动之Logo有关学习总

发布时间: 2012-09-21 15:47:26 作者: rapoo

android ICS 系统启动之Logo相关学习总结

前几天把android init 进程看了一遍,这次回过头来再把android系统启动的Logo相关学习内容做一个梳理和总结。我们知道android系统的启动logo包括3个启动画面(这里不对uboot中的logo做解析),第一个是android系统启动时,linux内核启动阶段显示的logo,这个和普通的linux像类似。下面主要针对logo的相关修改以及一些配置和注意点做个总结。

1.第一个logo从何处启动?

linux下使用帧缓冲(Framebuffer)的概念来表示一个显示接口,通俗理解就表示一块LCD。帧缓冲区的相关驱动在内核启动时调用fbmem_init,在该函数中主要完成使用register_chrdev来注册了一个名称为fb的字符设备,最后调用函数class_create在/sys/class目录下创建了一个graphics目录等。同样的驱动加载中会调用硬件平台(我的是EVM AM37xx)相关LCD的驱动初始化函数omapfb_init。

static int fb_show_logo_line(struct fb_info *info, int rotate,     const struct linux_logo *logo, int y,     unsigned int n){printk("enter fb_show_logo_line\n");//gzzu32 *palette = NULL, *saved_pseudo_palette = NULL;unsigned char *logo_new = NULL, *logo_rotate = NULL;struct fb_image image;/* Return if the frame buffer is not mapped or suspended *///if (logo == NULL || info->state != FBINFO_STATE_RUNNING ||    //info->flags & FBINFO_MODULE)//return 0;。。。。if (fb_logo.depth <= 4) {logo_new = kmalloc(logo->width * logo->height, GFP_KERNEL);if (logo_new == NULL) {kfree(palette);if (saved_pseudo_palette)info->pseudo_palette = saved_pseudo_palette;return 0;}image.data = logo_new;fb_set_logo(info, logo, logo_new, fb_logo.depth);}//image.dx = 0;//image.dy = y;image.dx = (info->var.xres/2) -(logo->width/2);image.dy =  (info->var.yres/2) -(logo->height/2); //by gzzimage.width = logo->width;//140image.height = logo->height;//153if (rotate) {logo_rotate = kmalloc(logo->width *      logo->height, GFP_KERNEL);if (logo_rotate)fb_rotate_logo(info, logo_rotate, &image, rotate);}fb_do_show_logo(info, &image, rotate, n);//rotate=0,n=1。。。return logo->height;}
在这个函数中,要显示的图像信息都保存在里image结构体中,同时logo显示的起点在image.dx,image.dy这个坐标上。这里可以修改这对坐标值,完成位置的修改。比如这里配置的是显示在LCD(480*640)的正中间.

另外需要修改的地方在fbcon_prepare_logo中,需要修改logo_height = fb_prepare_logo(info, ops->rotate);这个数值,因为logo_height是图片的垂直像素点。一旦显示位置发生偏移的话,图像实际DRAW时,需要的logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);会相应的增加,这样才可以正常显示。当然这个logo_lines最大为40即640的垂直height.否则会报出:“ fbcon_init: disable boot-logo (boot-logo bigger than screen) ”。

到这里1,2,3总结在一起后就完成了android ICS 启动的第一个画面,总结一下,方便以后的操作。

读书人网 >Android

热点推荐