Android 开机相关内容总结

作者: 程序员Android1 | 来源:发表于2018-04-27 13:13 被阅读46次

    本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

    1. Android 开机时间信息
    2. Android 开机大致流程
    3. Android 开机震动添加方法(MTK 、展讯平台)
    4. Android 开机动画、铃声、Logo
    5. Android 开机动画预制规范要求

    欢迎关注微信公众号:程序员Android
    公众号ID:ProgramAndroid
    获取更多信息

    微信公众号:ProgramAndroid

    我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
    我们不发送红包,我们只是红包的搬运工。

    1. Android 开机时间信息

    Android 开机时间信息保存在/proc/bootprof 文件中

    MTK 平台开机时间信息如下:

    ----------------------------------------
    // 开机时间,单位:毫秒
    // 查看 /proc/bootprof 文件
    0       BOOT PROF (unit:msec)
    ----------------------------------------
          3642        : preloader
          3128        : lk (Start->Show logo: 2431)
    ----------------------------------------
           247.401615 : ON
           345.068846 :    1-swapper/0       : initcall: of_init    15.492693ms
           371.293846 :    1-swapper/0       : initcall: wakeup_sources_debugfs_init    17.047077ms
           413.275308 :    1-swapper/0       : initcall: init_mtk_governor    24.786154ms
           457.631385 :    1-swapper/0       : initcall: mt_power_management_init    29.760539ms
           494.448077 :    1-swapper/0       : initcall: arm64_device_init    23.147231ms
           524.516923 :    1-swapper/0       : initcall: pm_sysrq_init    15.929154ms
           558.130462 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mtk_cmdq(ffffffc000f4f9a0)    15.886000ms
           560.119077 :    1-swapper/0       : initcall: cmdq_init    18.013385ms
           596.185846 :    1-swapper/0       : initcall: cfg80211_init    16.570923ms
           625.054385 :    1-swapper/0       : initcall: event_trace_init    24.519000ms
           657.458847 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mt-pmic(ffffffc000f43728)    30.178077ms
           660.658154 :    1-swapper/0       : initcall: pmic_mt_init    33.671231ms
           741.868924 :    1-swapper/0       : initcall: populate_rootfs    59.421461ms
           788.594001 :    1-swapper/0       : initcall: emi_mpu_mod_init    16.172000ms
           834.455078 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mt-gpufreq(ffffffc000f3bed0)    35.099077ms
           836.039232 :    1-swapper/0       : initcall: _mt_gpufreq_init    37.713000ms
          1031.716771 :    1-swapper/0       : probe: probe=i2c_device_probe drv=bq24157(ffffffc000f489f8)   139.402385ms
          1035.834771 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mt-i2c(ffffffc000f41248)   147.644154ms
          1059.699155 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mt-i2c(ffffffc000f41248)    22.310308ms
          1068.703925 :    1-swapper/0       : initcall: mt_i2c_init   188.540693ms
          9135.233944 :    1-swapper/0       : probe: probe=i2c_device_probe drv=mt6311(ffffffc000f48588)  8040.412481ms
          9137.046328 :    1-swapper/0       : initcall: mt6311_init  8042.290019ms
          9174.201252 :    1-swapper/0       : probe: probe=platform_drv_probe drv=musb-hdrc(ffffffc000f49398)    34.715769ms
          9174.256328 :    1-swapper/0       : initcall: musb_init    36.110693ms
          9314.109098 :    1-swapper/0       : probe: probe=mtkfb_probe drv=mtkfb(ffffffc000f59048)   136.957770ms
          9315.811406 :    1-swapper/0       : initcall: mtkfb_init   138.848308ms
          9392.238637 :    1-swapper/0       : initcall: BTIF_init    30.636923ms
          9550.038560 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mtk-msdc(ffffffc000f87d98)    78.343461ms
          9599.435022 :    1-swapper/0       : probe: probe=platform_drv_probe drv=mtk-msdc(ffffffc000f87d98)    47.790000ms
          9600.301022 :    1-swapper/0       : initcall: mt_msdc_init   128.833462ms
         10270.174485 :    1-swapper/0       : probe: probe=i2c_device_probe drv=AP3426(ffffffc000f3fc18)   627.960386ms
         10273.644870 :    1-swapper/0       : initcall: alsps_init   631.510309ms
         10339.933177 :    1-swapper/0       : probe: probe=i2c_device_probe drv=BMA222(ffffffc000f400b0)    64.251307ms
         10367.465639 :    1-swapper/0       : probe: probe=i2c_device_probe drv=KXTJ2_1009(ffffffc000f40340)    22.436462ms
         10371.050716 :    1-swapper/0       : initcall: acc_init    96.290001ms
         10392.674947 :    1-swapper/0       : probe: probe=i2c_device_probe drv=ITG-1010A(ffffffc000f409a8)    20.424462ms
         10399.592485 :    1-swapper/0       : initcall: gyro_init    27.484692ms
         10419.422024 :    1-swapper/0       : probe: probe=i2c_device_probe drv=akm09911(ffffffc000f40f10)    18.620385ms
         10425.851870 :    1-swapper/0       : initcall: mag_init    25.190615ms
         10479.256793 :    1-swapper/0       : initcall: init    43.196308ms
         10742.598717 :  102-kworker/u8:1    : probe: probe=i2c_device_probe drv=fts_ts(ffffffc000f805a0)   261.157769ms
         10758.893255 :  102-kworker/u8:1    : probe: probe=platform_drv_probe drv=mtk-tpd(ffffffc000f7ef40)   277.659001ms
         10776.443255 :    1-swapper/0       : probe: probe=platform_drv_probe drv=battery-dts(ffffffc000f83c88)    15.676384ms
         10787.399563 :    1-swapper/0       : initcall: battery_init   306.180693ms
         // Kernel 初始化时间
         10822.916717 :    1-swapper/0       : Kernel_init_done
         12234.037259 :    1-init            : INIT:early-init
         12686.109337 :    1-init            : INIT:late-init
         // 挂载分区时间
         12689.421183 :    1-init            : INIT:Mount_START
         13188.776876 :    1-init            : INIT:Mount_END
         13391.859800 :    1-init            : INIT:post-fs
         13696.683416 :    1-init            : INIT:post-fs-data
         13735.621493 :    1-init            : post-fs-data: on modem start
         14456.381110 :  302-ccci_mdinit     : ccci_md3: md_init srv start
         14487.479110 :  301-ccci_mdinit     : ccci_md1: md_init srv start
         14495.107418 :    1-init            : INIT:boot
         14529.856803 :  301-ccci_mdinit     : ccci_md1: init
         14739.916111 :    1-init            : USB ready
         14851.426342 :  328-vold            : vold:decrypt_master_key:START
         15067.036804 :  309-wmt_loader      : probe: probe=platform_drv_probe drv=mtk_wmt(ffffffbffc077af8)    78.718769ms
         //预加载类所消耗时间,此时开始播放开机动画
         15512.853420 :  360-SurfaceFlinger: : BOOT_Animation:START
         15924.857652 :  328-vold            : vold:decrypt_master_key:END
         16848.649731 :  328-vold            : vold:cryptfs_restart_internal:START
         17057.320347 :    1-init            : INIT:vold.decrypt=trigger_post_fs_data
         17220.311578 :    1-init            : INIT:post-fs-data
         17283.306271 :    1-init            : post-fs-data: on modem start
         18290.475350 :  328-vold            : vold:cryptfs_restart_internal:END
         18635.030659 :  407-zygote64        : boot_progress_start
         19415.810814 :    1-init            : INIT:vold.decrypt=trigger_restart_framework
         20770.849587 :  407-main            : Zygote:Preload Start
         21101.172588 :  408-main            : Zygote:Preload End
         21368.740358 :  301-ccci_mdinit     : ccci_md1: decpyt ready
         21381.859281 :  301-ccci_mdinit     : ccci_md1: reset
         21519.875358 :  301-ccci_mdinit     : ccci_md1: bootup
         22232.826513 :  407-main            : Zygote:Preload 4715 classes in 1382ms
         22370.672206 :  407-main            : Zygote:Preload 64 obtain resources in 133ms
         22391.764437 :  407-main            : Zygote:Preload 41 resources in 20ms
         22701.430976 :  301-ccci_mdinit     : ccci_md1: ready
         22870.447053 :  407-main            : Zygote:Preload End
         24925.980904 :  731-system_server   : Android:SysServerInit_START
         25700.308522 :   60-kworker/1:1     : USB configured
         //扫描手机安装包
         27665.097911 :  731-system_server   : Android:PackageManagerService_Start
         31393.116074 :  731-system_server   : Android:PMS_scan_START
         31397.464381 :  731-system_server   : Android:PMS_scan_data:/vendor/overlay
         31434.082151 :  731-system_server   : Android:PMS_scan_data:/system/framework
         31537.897074 :  731-system_server   : Android:PMS_scan_data:/system/priv-app
         32270.121153 :  731-system_server   : Android:PMS_scan_data:/system/app
         32853.140154 :  731-system_server   : Android:PMS_scan_data:/vendor/app
         32915.019231 :  731-system_server   : Android:PMS_scan_data:/system/presetapp
         32940.047077 :  731-system_server   : Android:PMS_scan_data:/data/app
         33260.865386 :  731-system_server   : Android:PMS_scan_END
         33654.078541 :  731-system_server   : PMS:reconcileAppsDataLI
         34782.509390 :  731-system_server   : Android:PMS_READY
         //AP端 初始化时间 
         36525.345624 :  408-main            : Zygote:Preload 4715 classes in 935ms
         36631.159548 :  408-main            : Zygote:Preload 64 obtain resources in 102ms
         36653.562702 :  408-main            : Zygote:Preload 41 resources in 21ms
         42223.695407 :  731-system_server   : AMS:systemReady
         42274.343715 :  731-system_server   : AMS:AMS_READY
         //初始化输入法、systemUI 、网络、三方APK、多媒体、Dialer、Settings 
         42465.231177 :  731-system_server   : AP_Init:[service]:[com.google.android.inputmethod.latin]:[com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME]:pid:1208
         42511.370331 :  731-system_server   : AP_Init:[service]:[com.android.systemui]:[com.android.systemui/.ImageWallpaper]:pid:1224:(PersistAP)
         42982.213178 : 1011-system-server-i : AP_Init:[]:[WebViewLoader-armeabi-v7a]:pid:1261
         43108.493640 : 1011-system-server-i : AP_Init:[]:[WebViewLoader-arm64-v8a]:pid:1280
         43123.569563 :  731-system_server   : SystemServer:NetworkStatsService systemReady
         43833.242873 :  731-system_server   : SystemServer:ConnectivityService systemReady
         44152.714104 :  731-system_server   : SystemServer:NetworkPolicyManagerServ systemReady
         45144.738645 :  731-system_server   : SystemServer:PhaseThirdPartyAppsCanStart
         45191.636568 :  731-system_server   : AP_Init:[added application]:[com.mediatek.ims]:[com.mediatek.ims]:pid:1357:(PersistAP)
         45228.915953 :  731-system_server   : AP_Init:[added application]:[com.android.phone]:[com.android.phone]:pid:1369:(PersistAP)
         45453.339338 :  731-system_server   : AP_Init:[activity]:[com.android.settings]:[com.android.settings/.FallbackHome]:pid:1387
         45503.338184 :  731-system_server   : Android:SysServerInit_END
         46362.475494 : 1013-ActivityManager : AMS:ENABLE_SCREEN
         52763.733971 : 1040-Binder:294_4    : BOOT_Animation:END
         //开机动画结束
         52764.718663 : OFF
    ----------------------------------------
    
    

    2. Android 开机大致流程

    从打印的开机Log 信息可以总结出Android 开机的大致流程如下:

    Android 开机大致流程

    3. 开机震动添加方法(MTK 、展讯平台)

    一、MTK 平台lk 层添加开机震动的方法

    • 文件修改大致路径
      以MT6739 平台为例,大致路径如下
      vendor\mediatek\proprietary\bootable\bootloader\lk\platform\mt6739
    • a. 修改platform.c文件

    platform.c文件中的mboot_common_load_logo 方法显示开机Logo之前添加震动

    platform.c
            // add  for lk viber
            vibr_Enable_HW();//开启震动
            mdelay(80); //震动80ms
            vibr_Disable_HW();//关闭震动
            // add  for lk viber
            mboot_common_load_logo((unsigned long)mt_get_logo_db_addr_pa(), "logo");
    
    • b. 查看mt_pmic.h头文件声明方法
      mt_pmic.h
    extern void vibr_Enable_HW(void);
    extern void vibr_Disable_HW(void);
    
    • c. 在对应的mt_pmic.c文件中实现方法
      image.png
    void vibr_Enable_HW(void)
    {
        pmic_set_register_value(PMIC_RG_VIBR_VOSEL, 5);
        pmic_set_register_value(PMIC_RG_LDO_VIBR_EN, 1);
    }
    
    void vibr_Disable_HW(void)
    {
        pmic_set_register_value(PMIC_RG_LDO_VIBR_EN, 0);
    }
    

    二、展讯平台 添加开机震动的方法

    展讯平台修改开机震动的文件路径为u-boot64/common/loader/boot_mode.c
    boot_mode.c 中修改normal_mode(void)

    void normal_mode(void)
    {
            vibrator_hw_init();
            // 1 :震动  0:不震动
            set_vibrator(1);  
            vlx_nand_boot(BOOT_PART, BACKLIGHT_ON);
            return;
    }
    

    4. Android 开机动画、铃声、Logo

    一、开机动画、开机铃声 手机中存放地址是system/media/

    运营商定制开机动画地址如下:

    • OP01 中国移动
    • OP02 中国联通
    • OP09 中国电信
    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/OP01/bootanimation/WVGA/bootanimation.zip
    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/OP02/bootanimation/FWVGA/bootanimation.zip
    /vendor/mediatek/proprietary/operator/frameworks/bootanimation/OP09/bootanimation/WVGA/bootanimation.zip
    

    或者自己写,用脚本拷贝到手机的system/media/

    比如公司自己定义的目录alps\vendor\sprocomm\res\boot

    脚本中拷贝动作实现

    二、开机Logo

    开机Logo 存放路径如下:
    vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo\

    根据使用的运营商或者分辨率修改 kernel Logo ,以及uboot Logo,或者使用覆盖图片覆盖以上目录的图片资源

    alps/sprocomm_proj/PD5503SM/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/hdplus/hdplus_kernel.bmp
    alps/sprocomm_proj/PD5503SM/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/hdplus/hdplus_uboot.bmp
    

    5. Android 开机动画预制规范要求

    解压开机动画文件如下,里面包含多张开机图片。

    开机动画压缩包文件内容

    开机动画规范要求
    1.存储格式压缩
    2.在3个文件目录下存储压缩,不能包含bootanimation文件夹
    3.保证bootanimation.zip压缩包下的图片Size和格式完全统一

    1. 规范的配置文件desc.txt
      desc.txt每个参数的实际意义,以如下的case为例:
    720 1280 10
    p 1 0 folder1
    p 0 0 folder2
    
    • 1.第一行的参数前两位720和1280分别表示要显示动画的 width 和height.

    默认情况下应该与Display的width和height一致,如果设置比Display的size要小,则动画会居中显示,周边将用黑框填充.

    • 2.第一行的第三个参数10是定义动画播放的预订帧率(FPS)

    这个帧率fps是指:每秒动画播放的帧数。此帧数是一个理想值,并不一定代表动画实际帧率,假设预订帧率为FPS_I,预订每一帧解析的时间t_I, 则t_I=1/FPS_I。实际帧率的规则是:

    假设某一帧从解析到渲染耗时为t_r,当t_r<=t_l,则渲染完这一帧后,动画这个thread会sleep(t_l-t_r)的时间,也就说这一帧最后的耗时就t_l;

    假设某一帧从解析到渲染耗时为t_r,当t_r>t_l,则渲染完这一帧后,动画这个thread会马上开始下一帧,也就说这一帧最后的耗时就t_r。

    所以,desc.txt内设置的这个帧率并不能代表动画的实际帧率,实际的帧率是和系统开机的performance有关,因此不是说在desc.txt设置帧率越大越好,反而容易出现当某一帧耗时较长,就容易给用户某一帧卡顿的体验,目前这个FPS的值一般设置在13左右。

    当然,设置FPS为13并不是说系统的performance比较低,本身在开机动画阶段,系统进入Bootup Android阶段,许多进程需要启动,系统的主要工作应该集中与开机启动的进程,因此不建议动画的图片过于复杂,导致系统开机的Performance变差。

    • 3.第二行和第三行情况类似,一般用于分别设置顺序播放和无限循环播放的相关参数.

    第一个参数p是google default的设计,请保留以p开头。

    第二个参数1表示这一行对应folder所需要循环播放的次数,如果是0则表示是无限循环播放,直到系统ready后通过被动退出。

    第三个参数0表示这一行对应folder里面的每一帧图片依次解析渲染完成后,要进入下一个循环,动画这个线程需要pause多久。

    第四个参数folder1 表示对应设置规则的folder的path。

    注意 1: 默认的设计,都是将顺序播放的动画放在一个folder,定义这个folder所需要循环的次数;在无限循环的folder内放置一张图片,保证动画没有收到退出指令的时候,动画可以一直显示.

    注意 2:由于循环播放的folder中的每帧都是以纹理对象存储在纹理内存中再upload到GPU做渲染的,以便下次循环播放不需要重新解析.如果动画包中的图片太多或者图片的size很大时,则会导致占用较多的memory,因此为保证开机的performance,开机动画不建议太复杂.

    至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。期待您的关注,
    感谢您的阅读,谢谢!

    如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。

    ​欢迎关注微信公众号:程序员Android
    公众号ID:ProgramAndroid
    获取更多信息

    微信公众号:ProgramAndroid

    我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
    我们不发送红包,我们只是红包的搬运工。

    点击阅读原文,获取更多福利


    相关文章

      网友评论

      本文标题:Android 开机相关内容总结

      本文链接:https://www.haomeiwen.com/subject/kwavlftx.html