EC20是上海移远的一款LTE CAT4模组,在市场上有比较广泛的运用。在Openlinux版本上进行项目开发时,如果要想优化程序,诊断系统启动时间,可以使用该工具。
Bootchart是busybox的一个程序运行分析工具,可以方便抓取运行时间,CPU占用等数据,并可以生成图片格式方便查看。Bootchart有两种用法,一个是在开机时启动,分析开机启动的性能。另一个是开机后针对特定的程序进行分析。本文讨论如何在开机时进行启动的方法。
Bootchart工具分成两部分,bootchartd是用于记录数据,pybootchartgui用于生成表格图片,方便查看。在EC20的SDK中已经预编译了bootchart工具,可以直接使用。对于没有编译的版本,可以自己编译busybox,并替代自带的文件。编译busybox很简单,使能环境变量设置后make即可。
source ql-ol-crosstool/ql-ol-crosstool-env-init
make
接下来是如何让bootchart开机启动,我们都知道linux内核运行的第一个程序是init。Bootchart开机启动的本质是用自身替代init程序,然后再fork出一个真正的init,因此我们只要把init换成bootchart来启动系统就行了。在部分嵌入式系统中,是由bootargs参数传入启动入口的,如linuxrc。在EC20上,直接写在了内核文件里,将如下代码里的/sbin/init 改成/sbin/bootchartd即可。
ql-ol-kernel/msm-3.18/init/main.c
if (!try_to_run_init_process("/sbin/bootchartd") ||
!try_to_run_init_process("/etc/init") ||
!try_to_run_init_process("/bin/init") ||
!try_to_run_init_process("/bin/sh"))
bootchartd运行后会将获取到的数据保存在文件/var/log/bootchart.tgz,将其拷贝到PC上,用PC工具生成图片。由于pybootchartgui不能直接处理busybox的数据,需要使用另外工具bootchart2,可以从git下载源码。
git clone https://github.com/xrmx/bootchart.git
使用前需要先编译才行,直接make即可。然后pybootchartgui.py bootchart.tgz生成图片。