1.读取不同LCM ID的时序不同,如何处理?

2.开机后android会自动resize图片资源的大小,但开机logo无法自行resize,如何操作?保证识别到不同分辨率的LCM后开机logo可以正常显示

[Analysis]

1. 关于时序

JB版本中,接口disp_drv_get_lcm_driver实现compare id并获取到lcm driver以及lcm param的动作,其工作流程如下

从上图可以看到,对于DSI,每次尝试读取id之前都会根据lcm driver中的设置重新设置时序,所以担心时序不同无法读取id的担心就显得多余了

2. 关于开机logo

我们默认的做法,在ProjectConfig.mk中会定义Macro BOOT_LOGO方便在目录\mediatek\custom\common\lk\logo中读取到相应的资源,作为开机logo显示。

这里的开机logo分为两种,分别为U-boot logo以及kernel logo。我们分别讨论这两种logo的显示原理

·         U-boot logo(and Battery logo)

U-boot logo是开机后的第一个界面,U-boot logo以及Battery logo会统一打包为logo.bin。对于JB版本,主要工作 流程如下

1. Little Kernel会在platform_early_init阶段首先会获取lcm params,其工作流程就是透过读id找到现在插入的LCM,根据LCM的分辨率申请相应大小的frame buffer并确定frame buffer起始地址

2. 为logo.bin预留4M Ram

3. 之后在platform_init阶段,直接将logo.bin载入到4M Ram中

4, 完成载入后,在platform_init中mt_disp_show_boot_logo();会调用show_logo(0);完成第一张logo显示。其中的index=0代表在logo.bin中压缩的第一张图片,logo.bin中的图片压缩顺序可以察看文件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)_low_battery.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_charger_ov.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_0.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_1.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_2.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_3.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_4.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_5.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_6.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_7.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_8.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_9.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_num_percent.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_01.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_02.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_03.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_04.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_05.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_06.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_07.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_08.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_09.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_animation_10.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_01.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_02.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_03.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_04.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_05.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_06.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_07.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_08.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_09.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_10_10.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_bg.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_img.raw \

$(BOOT_LOGO_DIR)/$(BOOT_LOGO)/$(BOOT_LOGO)_bat_100.raw \

·         Kernel logo

Kernel logo的工作方式与U-boot logo不同,是透过init.rc中注册的boot_logo_updater service完成读取raw data文件,进行绘画的,所以在kernel logo只是经过了bmp向raw的转换,在目录mediatek\custom\common\lk\logo\下生成raw data 文件boot_logo。之后透过脚本文件将boot_logo文件搬移到out\target\product\xxxx\system\media\images下,打包为system.img,download到手机种,并存放于/system/media/images目录下。

[Solution]

对于U-boot logo,只需要将不同分辨率的图片压缩至logo.bin中,在读取时根据不同的索引显示相应的图片即可

而对于Kernel logo,我们需要将不同分辨率的boot_logo raw data文件生成出来并copy到手机中,boot_logo_updater根据不同的分辨率进行识别,读取相应的logo文件。

以qhd与hd720两种分辨率相互兼容为例,方案大致如下,注意,logo的对应需要贵司自行完成

  1. lcm driver中实现compare id接口
  2. U-boot logo压缩,在mediatek\custom\common\lk\logo\rules.mk中,修改RESOURCE_OBJ_LIST列表,使用期望的分辨率代替BOOT_LOGO变量,(makefile中BOOT_LOGO的定义将无效)

RESOURCE_OBJ_LIST :=   \

$(BOOT_LOGO_DIR)/$qhd/$qhd_uboot.raw \

$(BOOT_LOGO_DIR)/$hd720/$hd720_uboot.raw \

  1. 记录每组分辨率插入的raw data个数
  2. mt_disp_show_boot_logo();函数中根据LCM的分辨率读取相应id的uboot logo;对于ipo快速开机,请在目录mediatek\external\ipod\bootlogo.cpp中的mt65xx_disp_show_boot_logo();做同样的修改

5.此步骤在不同的SW版本上修改的文件不同。在JB上,修改mediatek\custom\common\lk\logo\rules.mk修改如下内容:

#########################################################

ifneq ($(strip $(MTK_PLATFORM)),)

include $(CLEAR_VARS)

LOCAL_MODULE :=boot_logo_qhd

LOCAL_MODULE_TAGS :=user

LOCAL_MODULE_CLASS := DATA

LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

include $(BUILD_PREBUILT)

endif

#########################################################

ifneq ($(strip $(MTK_PLATFORM)),)

include $(CLEAR_VARS)

LOCAL_MODULE :=boot_logo_hd720

LOCAL_MODULE_TAGS :=user

LOCAL_MODULE_CLASS := DATA

LOCAL_MODULE_PATH := $(TARGET_OUT)/media/images

LOCAL_GENERATE_CUSTOM_FOLDER := custom:lk/logo

LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)

include $(BUILD_PREBUILT)

endif

在JB2上,在文件mediatek\external\boot_logo_updater\Android.mk中添加上述的内容,注意不要添加语句

LOCAL_MODULE_TAGS :=user,否则编译不通过。

6.此步骤在不同的SW版本上修改方法不同。在JB上,\build\core\user_tags.mk中GRANDFATHERED_USER_MODULES增加boot_logo_qhd & boot_logo_hd720;在JB2上,\build\target\product\$Project.mk中PRODUCT_PACKAGES增加boot_logo_qhd & boot_logo_hd720

7. 在boot_logo_updater中首先定义两种raw data的路径,再在main函数中根据LCM的分辨率读取相应的raw data文件

不同分辨率的LCM进行兼容相关推荐

  1. 视网膜New iPad与普通分辨率iPad页面的兼容处理

    一.这是篇经验分享 就算不是果粉也应该知道,iPad2与new iPad的重大区别之一就是显示屏的分辨率.new iPad显示屏被称之为"视网膜显示屏",其设备分辨比(之前有详细介 ...

  2. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  3. 使用@media screen解决分web不同分辨率问题

    CSS3中的media type属性可以进行类似于我们属性的判读语句switch,其中,应用最广泛的就是根据不同的分辨率使用不同的CSS文件.这极大的提高了各个不同设备的兼容性.话不多说,开始例子: ...

  4. QVGA、WVGA、VGA、WQVGA、SQVGA等几种手机分辨率扫盲

    什么是QVGA.WVGA.VGA.WQVGA.SQVGA?很多人也许弄不清楚这几个东西,因为组成的字母似乎差不多人多,长得也太像了,很以为是分类这些东西!现在就来看看他们的一些相同与不同. QVGA: ...

  5. QVGA、WVGA、VGA、WQVGA、SQVGA等几种手机分辨率扫盲!

    http://www.sjvip.com/news/all/22/76.shtml ---------------------------------------------------------- ...

  6. android 之 QVGA、WVGA、VGA、WQVGA、SQVGA等几种手机分辨率

    [size=medium] http://blog.csdn.net/johnny901114/article/details/7680340 什么是QVGA.WVGA.VGA.WQVGA.SQVGA ...

  7. 从性能角度选购Adroid智能手机,双核、大屏与游戏的取舍

    为什么80%的码农都做不了架构师?>>>    买手机不能完全看品牌,需要更注重硬件配置和价格.手机屏幕800X480(含)以上分辨率是作为android的高端机的存在,该级别各型号 ...

  8. 红帽linux无法进入tty,linux自启脚本(以及无法进入tty控制台)

    1.建立需开机运行的脚本auto(可以不要后面的.sh后缀) 2.放在/etc/init.d/目录下  (操作系统复制命令,在当前文件夹下复制sudo cp  auto /etc/init.d)[可能 ...

  9. artcore html5,值得收藏的25款免费响应式网页模板_CSS_网页制作

    对于开发者和设计而言,网页设计的活儿是干不完的.不同类型的网站对设计的诉求截然不同,从现在开始搜集各种网页模板吧.万一明天就可以用上呢?所以,你可以开始收藏下面25个响应式网页模板了 cmiHTML5 ...

最新文章

  1. linux 文件管理 教程,Linux文件管理
  2. 稳扎稳打Silverlight(13) - 2.0交互之鼠标事件和键盘事件
  3. 使用TensorFlow训练神经网络进行价格预测
  4. uap--studio设置文本字体
  5. oracle导出数据视频教程,Oracle导入导出数据的几种方式
  6. uvm_reg_defines——寄存器模型(四)
  7. 遇到一个Linux文件系统因bios时间错误变成只读的问题
  8. Power BI Desktop报告中的Web URL配置
  9. 滚动效果--marquee的使用
  10. PHP学习笔记五(命名空间)
  11. lsp语言服务器,身为程序员还不知道?Xtext与LSP让一个语言服务器横扫多个IDE!-lsp文件...
  12. Unity入门之路0-Unity下载安装以及版本选择
  13. 【华谋咨询】企业5s管理做大做强的四大措施
  14. 淘宝【高佣卷】、【精品券】、【详情图片】
  15. PC市场老树发新芽,联想为何不惧挑战?
  16. oracle 12.2R2 安装GI跑root.sh遇到CLSRSC-400
  17. SRS之SFU多人视频
  18. ScriptManager的几个属性和方法
  19. 为什么您仍然不应该购买《星球大战:前线II》
  20. 从驱动方式及相关主要技术看混合动力汽车

热门文章

  1. python数学公式代码导入_在Matplotlib图中插入LaTex公式实例
  2. 029_Loading加载
  3. 004_Bean标签
  4. 016_continue和break语句
  5. ehshig蒙文歌曲_ehshig蒙古音乐盒2017下载
  6. c类网络使用子网掩码有无实际意义_弄懂IP系列(2)(刘晶作品)|子网掩码到底是啥?...
  7. cf不能全屏win7的解决方法_win7电脑输入法不能打字的解决方法
  8. python word 1_Python word | 学步园
  9. Android中事件分发机制的总结
  10. 如何通过 macOS 恢复功能重新安装 macOS