mtk6582 android显示虚拟按键代码怎么没用,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动画。

93a3731278552b5999fc9f7b2b5d302a.png

图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目录下,编译和上面的方式一样。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值