android app启动时间优化,Android如何优化启动时间(boot time)

尽可能地减少LA的启动时间在USER的构建。 并假设我们有一个非常稳定的USER构建软件,没有任何错误,甚至警告消息存在于启动阶段。

首先,我们需要检查驱动程序的初始化时间是否合理,因此可以应用这个补丁。

"kernel/init/main.c"

-bool initcall_debug;

+bool initcall_debug = 1;

core_param(initcall_debug, initcall_debug, bool, 0644);

然后下面的消息会在内核启动时输出,我们可以逐一检查它们,看看是否有些驱动程序的initcall需要太多的时间。

...

initcall returned 0 after usecs

...

在这一步之后,我们确认每个驱动程序的init过程是合理的。

最后,不要忘记还原上面的测试补丁。

2.禁用串行控制台和早期的printk

串口控制台和早期的printk会相当慢的内核启动,所以我们可以考虑到

在发布版本中禁用它们。

2.1您可以确认在文件“AndroidBoard.mk”中使用了哪个内核defconfig。 看起来像 ”

msmxxxx-perf_defconfig"

ifeq ($(TARGET_BUILD_VARIANT),user)

KERNEL_DEFCONFIG := msmxxxx-perf_defconfig

else

KERNEL_DEFCONFIG := msmxxxx_defconfig

endif

然后删除以下两个配置在此defconfig禁用串行控制台。

-CONFIG_SERIAL_MSM_HSL_CONSOLE = y

2.2禁用earlyprintk

编辑文件“BoardConfig.mk”,并删除“earlyprintk = msm_hsl_uart,0xf991e000”从“

BOARD_KERNEL_CMDLINE“。

3.进一步收缩内核defconfig。

基于“msmxxxx-perf_defconfig”,尝试删除以下配置。

-CONFIG_CGROUP_DEBUG=y

-CONFIG_SERIAL_MSM_HSL_CONSOLE=y

-CONFIG_MSM_ADSPRPC=y

-CONFIG_REGULATOR_TPS65132=y

-CONFIG_PFT=y

-CONFIG_CORESIGHT=y

-CONFIG_CORESIGHT_EVENT=y

-CONFIG_CORESIGHT_FUSE=y

-CONFIG_CORESIGHT_CTI=y

-CONFIG_CORESIGHT_TMC=y

-CONFIG_CORESIGHT_TPIU=y

-CONFIG_CORESIGHT_FUNNEL=y

-CONFIG_CORESIGHT_REPLICATOR=y

-CONFIG_CORESIGHT_STM=y

-CONFIG_CORESIGHT_HWEVENT=y

-CONFIG_CORESIGHT_ETMV4=y

-CONFIG_CORESIGHT_MODEM_ETM=y

-CONFIG_CORESIGHT_WCN_ETM=y

-CONFIG_CORESIGHT_RPM_ETM=y

-CONFIG_CP_ACCESS64=y

-CONFIG_MSM_SMD_DEBUG=y

-CONFIG_MSM_DEBUG_LAR_UNLOCK=y

-CONFIG_MSM_FORCE_WDOG_BITE_ON_PANIC=y

-CONFIG_MSM_OCMEM_DEBUG=y

-CONFIG_MSM_OCMEM_NONSECURE=y

-CONFIG_LOCKUP_DETECTOR=y

-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y

-CONFIG_DEBUG_KMEMLEAK=y

-CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y

-CONFIG_DEBUG_SPINLOCK=y

-CONFIG_DEBUG_MUTEXES=y

-CONFIG_DEBUG_ATOMIC_SLEEP=y

-CONFIG_DEBUG_STACK_USAGE=y

-CONFIG_DEBUG_MEMORY_INIT=y

-CONFIG_DEBUG_LIST=y

-CONFIG_FAULT_INJECTION=y

-CONFIG_FAIL_PAGE_ALLOC=y

-CONFIG_FAULT_INJECTION_DEBUG_FS=y

-CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y

-CONFIG_MSM_RTB=y

-CONFIG_MSM_RTB_SEPARATE_CPUS=y

-CONFIG_DYNAMIC_DEBUG=y

-CONFIG_PANIC_ON_DATA_CORRUPTION=y

-CONFIG_STRICT_MEMORY_RWX=y

然后,重新编译代码,并检查文件$ANDROID_TOP/out/target/product/$TARGET/obj/KERNEL_OBJ/.

查看更改是否生效。

4.在早期引导时将多个内核设置为在线

如果您应用此步骤,请特别注意,因为它可能会导致热问题。

4.1首先应用以下3个补丁。 由于芯片组之间的差异,你需要做一些轻微的改变

这些补丁。

https://www.codeaurora.org/cgit/quic/la//device/qcom/common/commit/?id=

6df8a1ba549e6bf64fae2a73e2f6e3249bd72701

https://www.codeaurora.org/cgit/quic/la//kernel/msm-3.10/commit/?id=

d77f3f9feded36585a41fa094b17493ee7bb6092

https://www.codeaurora.org/cgit/quic/la//platform/system/core/commit/?id=

7f29bccd05b584dfb2028ba8579e04eaf7628f46

4.2 编辑"bootargs" 在 "msmxxxx.dtsi"

+bootargs = "boot_cpus=0 androidboot.earlyboot_cpus=2,4,6 sched_enable_hmp=1";

注意:

这种变化将导致温度迅速上升,并且如果超过一些阈值,thermal thread将会

限制这些核心降低频率,甚至关闭它们。 所以如果你遇到热问题,请还原

代码更改。

5.对于Android和其他引导性能,您可以参考以下2个文档了解更多

信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值