MTK6582+Android4.4.2之LK和kernel logo显示

MTK6582+Android4.4.2之LK和kernel logo显示

 

之前写过《MTK6577+Android增加支持新显示屏的显示》,链接:

http://blog.csdn.net/loongembedded/article/details/38535143

 

mediatek\config\itek82_wet_kk\ProjectConfig.mk相关的环境变量配置如下:

BOOT_LOGO=cu_wvga

CUSTOM_LK_LCM=ili9806e

CUSTOM_KERNEL_LCM=ili9806e

LCM_HEIGHT=800

LCM_WIDTH=480

 

1.     Preloader和lk显示屏的初始化流程

LK和kernel阶段的logo位于mediatek\custom\common\lk\logo\cu_wvga名字为

 

mt_disp_show_boot_logo();负责lk第1个logo的显示,显示的图片名字为cu_wvga_uboot.bmp

 

开机过程总共有的logo有3个

(1)  第1个对应的图片是cu_wvga_uboot.bmp,mt_disp_show_boot_logo()显示的

(2)  第2个对应的图片是cu_wvga_kernel.bmp, show_kernel_logo()显示

(3)  第3个是android动画。

MTK6582+Android4.4.2之LK和kernel logo显示_第1张图片

图1

 

2.     第1个logo cu_wvga_uboot.bmp的显示

platform_init()-->mt_disp_show_boot_logo()显示的
/*
 * Show first boot logo when phone boot up
 *
 */
voidmt_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(), mt_get_tempfb_addr(), logo_addr, phical_screen);
        mt_disp_update(0, 0, CFG_DISPLAY_WIDTH,CFG_DISPLAY_HEIGHT);
    }
 
    return;
}

相关的额地址如下:

 

图2

 

3.     第2个logo cu_wvga_kernel.bmp的显示

mediatek\external\boot_logo_updater\ boot_logo_updater.c的main函数调用show_kernel_logo()显示kernel的logo

 

kernel logo的常用修改

3.1   Logo.bin不包含kernel的图片

(1)  修改rules.mk文件

mediatek\custom\common\lk\logo\rules.mk
RESOURCE_OBJ_LIST:=   \
              $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_uboot.raw\
      $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_battery.raw \
…
# $(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_kernel.raw

logo/update 文件中会调用tool/bmp_to_raw将bmp文件转换成raw文件,并且在make uboot时会将这些资源文件放到logo.bin 中

注释掉(BOOT_LOGO)_kernel.raw这一项

 

(2)  修改update文件

mediatek\custom\common\lk\logo\update文件,注释掉下面的内容

#./tool/bmp_to_raw./boot_logo ./$p/"${p}_kernel".bmp

 

update文件中会调用tool/bmp_to_raw将bmp文件转换成raw文件,并且在make uboot时会将这些资源文件放到logo.bin 中,这里同时把cu_wvga_kernel.bmp转成raw文件后重命名为boot_logo

 

./mk lk,更新logo.bin即可,但有时候很奇怪,需要./mk n才可以。

 

3.2   为了让开机第1个logo(LK也就是uboot)和第2个logog(kernel)相同,可以让cu_wvga_kernel.bmp和cu_wvga_uboot.bmp是内容相同的照片

 

 

3.3   不显示kernel阶段的logo

(1)  修改mediatek\external\libshowlogo\charging_animation.cpp内容

 

4.4的kernel logo和ipo快速开机用的是同一个接口。

在boot_logo_updater.c的main中与4.2的方法不同使用了show_kernel_logo函数调用显示了包在logo.bin中的kernel.logo,修改方法可以在alps\mediatek\external\libshowlogo\charging_animation.cpp

中对这部分代码进行尝试读取nv显示修改,kernel层的logo index可以查看文件

mediatek\custom\common\lk\logo\rules.mk中kernel.bmp的顺序

voidshow_kernel_logo()
{
    LOG_ANIM("[charging_animation: %s%d]show kernel logo, index = 38 \n",__FUNCTION__,__LINE__);
    if (error_flag == 0)
    {
        anim_show_logo(kernel_logo_position);
    }   
}   

由于快速开关机部分alps\mediatek\external\ipod\bootlogo.cpp

也是使用了此接口,若添加,应该就可以做到暗码修改了。

  

Libshowlogo生成libshowlogo.so放在out\target\product\itek82_wet_kk\system\lib目录下。

 

编译命令和更新对应的部分:

./mk mm ./mediatek/external/libshowlogo

./mk snodsystemimage

更新system.img即可

 

(2)  修改mediatek\external\boot_logo_updater\ boot_logo_updater.c

main函数

int main(void)
{
printf("[boot_logo_updater%s %d]boot_logo_updater,\n",__FUNCTION__,__LINE__);
    int ret = update_boot_reason();
    if (ret == 1) {
        printf("[boot_logo_updater]skipthe boot logo!\n");
        set_int_value(LCD_BACKLIGHT_PATH, 120);
        return 0;   
    } else if (ret == 2) {
       printf("[boot_logo_updater]schedule on\n");    
    }
    // set parameter before init
    set_draw_mode(DRAW_ANIM_MODE_FB);   
    anim_init();
    show_kernel_logo();
    anim_deinit();
   
    return 0;
}

此文件夹生成boot_logo_updater放在system\bin目录下,编译和上面的方式一样。

 

你可能感兴趣的:(MTK6582+Android4.4.2之LK和kernel logo显示)