Kris Fei's blog

让分享成为一种习惯

[RK3288][Android6.0] 调试笔记 --- 增加操作系统开机时间

Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92

背景:
由于系统有模块需要和外部硬件做同步,因此要延长开机时间。


调试思路
由于系统只显示了开机动画,没有开机Logo。因此一开始的思路是把开机动画时间延长,然后把launcher或者zygote的启动时间也延迟。调试发现不可行,因为init进程之后的进程都是并发执行的,而很多进程的功能又是相互依赖的,如下图(图片来自参考链接博客):

这里写图片描述

因此把延时做在init进程之前了,由于这时开机动画是没有运行的,所以也要开启开机Logo的显示,避免黑屏太久。


解决方法:
init改动如下:

kris@eco:~/rk3288/system/core$ g df 6a8f21df1001917edafb978a427ae98c64a91490 4d69b8b74af30a2e0329eeb124d48a228c9b1800
diff --git a/init/init.cpp b/init/init.cpp
index e748a4f..3594279 100755
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -215,6 +215,7 @@ void service_start(struct service *svc, const char *dynamic_args)
     // Running processes require no additional work --- if they're in the
     // process of exiting, we've ensured that they will immediately restart
     // on exit, unless they are ONESHOT.
+
     if (svc->flags & SVC_RUNNING) {
         return;
     }
@@ -1287,6 +1288,7 @@ static void rk_parse_cpu(void)


 int main(int argc, char** argv) {
+
     if (!strcmp(basename(argv[0]), "ueventd")) {
         return ueventd_main(argc, argv);
     }
@@ -1332,6 +1334,12 @@ int main(int argc, char** argv) {
     // to the outside world.
     open_devnull_stdio();
     klog_init();
+    if (!is_first_stage){
+        ERROR("\n");
+        ERROR("delay 10s wait for HiWiFi boot begin\n");
+        sleep(10);
+        ERROR("delay 10s wait for HiWiFi boot end\n");
+    }
     //klog_set_level(KLOG_NOTICE_LEVEL);

开机Logo的改动这里就不给出了,之前的文章有提及过。


参考:
Android 核心分析 之八——Android 启动过程详解

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/79976249
上一篇[Tools][AS] 调试笔记 --- package org.junit does not exist
下一篇[RK3288][Android6.0] 调试笔记 --- 打印当前reboot或shutdown进程信息
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭