高通平台开机logo的修改

方法一:准备一张和LCD分辨率一样大小的png图片logo.png,在高通源码目录device/qcom/common/display/logo下面,有readme.txt文件,里面有说明生成镜像文件的方法:

执行命令:python ./logo_gen.py logo.png,在当前目录下面会生成splash.img,用flash工具将splash.img刷进splash分区即可。
若想将splash.img放进刷机包,则修改刷机包中的rawprogram_unsparse.xml文件:
-
+

方法二:准备一张png图片logo.png,分辨率不要超过320*200,执行下列命令:
convert logo.png -recolor "0 0 1,0 1 0,1 0 0" logo_new.png
convert -depth 8 logo_new.png rgb:logo_raw.raw
xxd -c16 -i logo_raw.raw > splash.h
用splash.h文件中数组的内容替换bootable/bootloader/lk/platform/msm_shared/include/splash.h中的数组imageBuffer_rgb888,然后重编lk,将生成的emmc_appsboot.mbn烧进单板即可。

注意:方法二需要保证splash分区为空,splash分区非空,方法二是不起作用的,所以用方法二之前,最好先擦除splash分区。原因如下:
 

void display_default_image_on_screen(void)
{
        unsigned i = 0;
        unsigned total_x;
        unsigned total_y;
        unsigned bytes_per_bpp;
        unsigned image_base;
 
        if (!config) {
                dprintf(CRITICAL,"NULL configuration, image cannot be displayed\n");
                return;
        }
 
        fbcon_clear(); // clear screen with Black color
 
        total_x = config->width;
        total_y = config->height;
        bytes_per_bpp = ((config->bpp) / 8);
        image_base = ((((total_y/2) - (SPLASH_IMAGE_HEIGHT / 2) - 1) *
                        (config->width)) + (total_x/2 - (SPLASH_IMAGE_WIDTH / 2)));
 
#if DISPLAY_TYPE_MIPI
        if (bytes_per_bpp == 3) {
                for (i = 0; i < SPLASH_IMAGE_HEIGHT; i++) {
                        memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp),
                        imageBuffer_rgb888 + (i * SPLASH_IMAGE_WIDTH * bytes_per_bpp),
                        SPLASH_IMAGE_WIDTH * bytes_per_bpp);
                }
        }
        fbcon_flush();
#if DISPLAY_MIPI_PANEL_NOVATEK_BLUE
        if(is_cmd_mode_enabled())
                mipi_dsi_cmd_mode_trigger();
#endif
 
#else
        if (bytes_per_bpp == 2) {
                for (i = 0; i < SPLASH_IMAGE_HEIGHT; i++) {
                        memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp),
                        imageBuffer + (i * SPLASH_IMAGE_WIDTH * bytes_per_bpp),
                        SPLASH_IMAGE_WIDTH * bytes_per_bpp);
                }
        }
        fbcon_flush();
#endif
}
 
void display_image_on_screen(void)
{
#if DISPLAY_TYPE_MIPI
        int fetch_image_from_partition();
 
        if (fetch_image_from_partition() < 0) {
                display_default_image_on_screen();
        } else {
                /* data has been put into the right place */
                fbcon_flush();
        }   
#else
        display_default_image_on_screen();
#endif
}

lk运行后,程序会bootable/bootloader/lk/dev/fbcon/fbcon.c文件中的display_image_on_screen函数,它会从splash分区获取图像数据,如果成功,就直接将splash分区中的图像数据显示在LCD上,获取失败才会调用fbcon_flush函数,该函数将imageBuffer_rgb888数组中的内容显示在LCD上。

 

你可能感兴趣的:(android系统)