MTK开机LOGO图片的显示原理



MTK开机LOGO图片的显示原理

一、图片的定义 1

1.1update脚本 1

1.2rules.mk脚本 2

1.3、图片的宏定义cust_display.h(索引序列号) 3

二、LOGO图片显示的逻辑代码实现 3

2.1platform.c 3

2.2mtk_logo.h 4

2.3mt_logo.c 4

总结: 5

 

 

以下源码分析基于C300

Android 开机画面由三部分组成,第一部分在bootloader 启动时显示uboot第二部分在启动kernel 时显示kernel第三部分在系统启动时(bootanimation)显示(动画)。

ubootkernelLOGO(项目中一般这两张图片是一样的,即常说的开机LOGO)

一、图片的定义

1.1update脚本

Path./c300/android/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/update

类似于如下图的这种定义,注意图片必须是.bmp格式

 

1.2rules.mk脚本

 

 

 

Note:一般logo目录下会有很多格式的图片,例如hdplushvgahd720,具体使用哪种格式的图片,取决于项目中的配置文件ProjectConfig.mk。例如在c300 orange订单中使用的是Boot_LOGO=hdplus格式,如下图所示:

 

 

1.3、图片的宏定义cust_display.h(索引序列号)

Path:c300/android/vendor/mediatek/proprietary/bootable/bootloader/lk/target/c300/include/target/cust_display.h

如在c300

// Common LOGO index

#define BOOT_LOGO_INDEX   0

#define KERNEL_LOGO_INDEX   38

二、LOGO图片显示的逻辑代码实现

2.1platform.c

当正常开机的过程中

Pathc300/android/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6739/platform.c

 

.........else if (g_boot_mode != KERNEL_POWER_OFF_CHARGING_BOOT && g_boot_mode != LOW_POWER_OFF_CHARGING_BOOT) {

if (g_boot_mode != ALARM_BOOT && (g_boot_mode != FASTBOOT) && !bearly_backlight_on) {    //正常开机的过程中显示的LOGO

#ifndef MACH_FPGA_NO_DISPLAY

PROFILING_START("show log");

mt_disp_show_boot_logo(); //platform.c中会调用这个方法去显示logo

PROFILING_END();

#endif

}

 

2.2mtk_logo.h

方法的结构体定义mtk_logo.h(声明mt_disp_show_boot_logo()方法)

Path:c300/android/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6739/include/platform/mt_logo.h

 

 

 

2.3mt_logo.c

方法的具体实现mt_logo.c

Pathc300/android/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6739

源码如下所示:

/*

 * Show first boot logo when phone boot up

 *

 */

void mt_disp_show_boot_logo(void)

{

dprintf(INFO, "[lk logo: %s %d]\n",__FUNCTION__,__LINE__);

mt_logo_get_custom_if();

if (logo_cust_if->show_boot_logo) {

logo_cust_if->show_boot_logo();

} else {

///show_logo(0);

init_fb_screen();

fill_animation_logo(BOOT_LOGO_INDEX, mt_get_fb_addr(), (void *)mt_get_tempfb_addr(), logo_addr, phical_screen);

mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT);

}

return;

}

 

总结:在修改LOGO图片的时候,需要确认清楚分辨率、命名必须与原来的保持一致、图片格式一致等 。上述的文件分析原理过程大致是显示一张LOGO图片原理过程中涉及到的文件、方法、变量。(注:高通平台的开机LOGO是一个splash.img文件)

当修改了LOGO之后,单独编译对应的目录会生成logo.bin,重新烧录可以直接验证效果。如果有修改对应的lk目录下的文件,还需要单独编译lk

猜你喜欢

转载自blog.csdn.net/Toc_SunWinner/article/details/79044596