Android内核开发:如何统计系统的启动时间

转载自:https://blog.51cto.com/ticktick/1660996
这里所说的统计系统的启动时间,并不是简单地用秒表和肉眼来统计,而是通过分析系统输出的log信息来统计,这样才显得更加专业。

首先了解2个概念:

(1) Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的,第一个阶段就是Linux内核的启动,第二个阶段就是Android框架的启动(包括核心服务和程序)。

(2)Android的log系统是独立于Linux内核的log系统的。Linux内核通过printk打印的log信息,这些log写入到了/dev/kmsg文件中,在Shell终端可以通过dmesg命令查看这些log信息。Android框架则是通过Logger驱动打印log信息,这些log并没有归并到kmesg文件中,而是单独存储的,位于/dev/log目录下,在Shell终端可以通过logcat命令来查看。

下面我们分别从两种log信息中找到如何统计系统启动时间的方法。

  1. 通过dmesg信息统计系统启动时间

首先,我们通过dmesg命令抓取Linux内核的log信息(部分系统可能需要先执行 adb root):

$ adb shell dmesg > dmesg.txt

Linux内核启动完成,一般都有如下的标准输出信息:

<6> [ 6.613861] Freeing init memory: 176K

因此,只要我们在dmesg.txt文件中找到“Freeing init memory”这一行即可,从上面的log可以看出,Linux内核启动只用了6.613861s。

那么,如何找到Android系统启动完成的标志呢?

很多Android设备在系统启动完成后,会在内核log中打印如下信息:

<6>[ 29.913726] init: processing action 0x96bb8 (property:sys.boot_completed=1)

因此,找到“boot_completed”这一行也就得到了整个系统的启动时间了,从这一行可以看出,整个系统启动用了29.913726s。

当然,并不是所有的Android设备都会打印出这条log,因此,我们一般用下面介绍的方法来专门统计Android系统的启动时间,

  1. 通过logcat统计系统的启动时间

文章开头我们已经介绍过,Android的log系统是独立于Linux内核log系统的,通过在终端输入adb shell 进入Android系统,cd到/dev/log目录,你会发现里面有四个文件,分别是:events,main,radio,system.

Android系统把Log分为了四类,不同的类别记录不同的Log信息:

main - 主要的Log信息,大部分应用级别的Log信息都在这里

events - 系统事件相关的Log信息

radio - 无线/电话相关的Log信息

system - 低级别的系统调试Log信息

默认通过logcat抓取的是main信息,如果想抓取指定类别的log信息的方法,在logcat命令后加-b参数,例如:

$ adb logcat -d -v time -b “main” > main.txt
$ adb logcat -d -v time -b “events” > events.txt
$ adb logcat -d -v time -b “system” > system.txt
$ adb logcat -d -v time -b “radio” > radio.txt

关于Android Log系统的分类,你可以访问如下页面详细了解: 《Android Logging System》

那么,如何统计Android系统的启动时间呢?

我们可以重点关注events类别的log信息,通过如下命令:

$ adb logcat -d -b events | grep “boot”

如图所示,这是我在高通的APQ8064开发板上抓取的log信息:

wKioL1V5fk2zyWfUAAHv186gKeI487.jpg

“boot_progress_start”代表着Android屏幕点亮,开始显示启动动画,即15.492s开始闪烁Android字样。

“boot_progress_enable_screen”代表着整个系统启动结束,即用了29.986s,用这个总时间减去Linux Kernel的启动时间即可得到Android OS部分的时间。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Android底层开发技术实战详解:内核、移植和驱动(第2版)》是一本介绍Android底层开发技术的书籍,该书全面讲解了Android操作系统内核、移植和驱动方面的知识。 首先,该书详细解析了Android底层开发中的内核技术。内核是操作系统的核心部分,负责管理硬件资源、进程调度、内存管理等功能。该书介绍了Android内核的架构和组成,深入解析了Android内核的关键技术,包括进程管理、内存管理、设备驱动等内容,读者可以通过学习这些知识来深入了解Android系统的内部工作原理。 其次,该书还详细讲解了Android系统的移植技术。移植是将一个操作系统或软件从一个平台移植到另一个平台的过程。Android系统可以在不同的硬件平台上运行,这需要进行相应的移植工作。该书介绍了Android系统的移植流程和方法,包括硬件支持、设备树、引导和启动流程等方面的内容,为读者提供了实践移植Android系统的指导。 最后,该书还详细介绍了Android系统中驱动的开发技术。驱动是将硬件与操作系统连接的桥梁,它负责驱动硬件设备,使之能够与操作系统进行交互。该书介绍了Android系统驱动的基本原理和开发方法,包括字符设备驱动、块设备驱动、网络设备驱动等方面的内容,读者可以通过学习这些知识来了解Android系统中驱动的实现原理和开发技巧。 《Android底层开发技术实战详解:内核、移植和驱动(第2版)》是一本深入探讨Android底层开发的专业书籍,读者通过学习这本书可以系统地了解Android底层开发的相关知识,为掌握Android系统的工作原理和进行底层开发提供了重要的参考。 ### 回答2: 《Android底层开发技术实战详解:内核、移植和驱动(第2版)》是一本专注于Android底层开发的技术实战指南。本书主要讲解了Android系统内核、移植和驱动开发相关的知识和实践经验。 首先,本书深入介绍了Android内核的基本原理和开发技术。内核Android系统的核心组件,涉及到系统的运行机制、进程管理、内存管理和设备驱动等重要模块。通过学习内核的原理和开发技术,读者可以更好地理解Android系统的运行机制和优化方法。 其次,本书详细讲解了Android系统的移植技术。移植是将Android系统适配到不同硬件平台上的过程,包括处理器架构、硬件接口、设备驱动和文件系统等方面的适配工作。通过学习本书的内容,读者可以全面了解Android系统的移植原理和实践步骤,提高系统适配的效率和成功率。 最后,本书还介绍了Android设备驱动程序的开发技术。设备驱动是Android系统与硬件设备之间的桥梁,负责控制和管理外设的访问。本书通过实际案例,讲解了Android设备驱动的编写和调试技巧,帮助读者掌握设备驱动开发的方法和技巧。 总之,本书通过深入浅出的方式,详细介绍了Android底层开发的核心知识和实战经验。无论是对于Android系统开发者还是对于对Android底层感兴趣的读者来说,本书都是一本不可多得的参考书籍,可帮助读者更好地理解和应用Android底层开发技术。 ### 回答3: 《Android底层开发技术实战详解:内核、移植和驱动(第2版)》是一本关于Android底层开发技术的实践指南。 这本书首先介绍了Android操作系统的基本架构和内核的相关知识,包括Linux内核Android系统的关系,以及Android启动过程和内核的工作原理。读者可以了解到Android系统是如何工作的,为之后的实践奠定了基础。 接下来,书中详细介绍了Android的移植过程。移植是将Android系统适配到不同硬件平台的过程,这本书将详细讲解如何进行移植工作,包括硬件支持、设备树和启动流程等内容。读者可以学习到如何将Android系统移植到特定的硬件平台上。 最后,书中还讲解了Android的驱动开发。驱动是连接硬件和操作系统的桥梁,本书将介绍Android系统中不同种类的驱动开发,包括字符设备驱动、块设备驱动和图形设备驱动等。读者可以学习到如何编写驱动程序来支持不同的硬件设备。 整本书的内容结构清晰,循序渐进地介绍了Android底层开发的关键技术。通过实践案例和详细的代码示例,读者可以更深入地理解和掌握Android底层开发的技术和方法。无论是对于想要从事Android底层开发的初学者,还是已经从事相关工作的开发者来说,这本书都是一本不可或缺的参考资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值