之前有安装bootchart,先执行以下命令,卸载掉bootchart工具
sudo apt-get autoremove bootchart
bootchart安装
1、安装
$sudo apt-get install bootchart
$sudo apt-get install pybootchartgui
2、编写android 上log文件的打包和自动生成bootchart.png的脚本文件,注意该脚本文件在linux主机上运行。
1)从android源码/system/core/init/grab-bootchart.sh文件拷贝到linux的任意目录(home/zjr/bootchart/)下,在文件最后增加生成
bootchart.png脚本,内容如下:
#!/bin/sh
#
# this script is used to retrieve the bootchart log generated
# by init when compiled with INIT_BOOTCHART=true.
#
# for all details, see //device/system/init/README.BOOTCHART
#
TMPDIR=/tmp/android-bootchart
rm -rf $TMPDIR
mkdir -p $TMPDIR
LOGROOT=/data/bootchart
TARBALL=bootchart.tgz
FILES="header proc_stat.log proc_ps.log proc_diskstats.log kernel_pacct"
for f in $FILES; do
adb pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/null---->通过adb pull从android设备上的/data/bootchart/目录下拷贝对应的FILE文件
done
(cd $TMPDIR && tar -czf $TARBALL $FILES) ------>生成bootchart.tgz文件在/tmp/androidbootchart/bootchart.tgz
cp -f $TMPDIR/$TARBALL ./$TARBALL
echo "look at $TARBALL"
cd $TMPDIR
#执行bootchart.png生成命令,并且将生成的图片拷贝到当前目录下
bootchart $TARBALL
cp -f ${TMPDIR}/bootchart.png ./
echo "look at ${TMPDIR}/bootchart.png "
3、android获取开机启动的bootchart信息
3.1 打开android的bootchart功能
编辑android源码/system/core/init/Android.mk 如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
#build bootchart function
INIT_BOOTCHART := true
LOCAL_SRC_FILES:= \
ifeq ($(strip $(INIT_BOOTCHART)),true)
LOCAL_SRC_FILES += bootchart.c
LOCAL_CFLAGS += -DBOOTCHART=1
endif
3.2 将bootchart编译进入android系统,按3.1修改后,或者
$export INIT_BOOTCHART := true
$make clean
$source build/envsetup.sh
$lunch sabresd_6dq-eng
$export INIT_BOOTCHART := true
$make -j24
编译出来之后下载boot.img system.img recover.img三个文件。
3.3 启动系统获取启动信息
adb shell
echo 120 > /data/bootchart-start
mkdir /data/bootchart
reboot
3.4 等待android设备重新启动之后,在主机linux的/home/zjr/bootchart/下,运行grab-bootchart.sh脚本。
chmod a+x grab-bootchart.sh
./grab-bootchart.sh
4、运行./grab-bootchart.sh或者($bootchart ./bootchart.tgz )报错误的解决方式:
1)/usr/share/pyshared/pybootchartgui/目录的draw.py,parsing.py,samples.py三个文件,分别修改如下:
draw.py:
将200,201行由:
xscale = float(chart_bounds[2]) / max(x for (x,y) in data)
yscale = float(chart_bounds[3]) / max(y for (x,y) in data)
改为:
xscale = float(chart_bounds[2]) / max(0.00001, max(x for (x,y) in data))
yscale = float(chart_bounds[3]) / max(0.00001, max(y for (x,y) in data))
parsing.py:
在156行后添加:
if interval == 0:
interval = 1
修改后如下:
sums = [ a - b for a, b in zip(sample1.diskdata, sample2.diskdata) ]
if interval == 0:
interval = 1
samples.py:
在81行后添加:
if interval == 0:
interval = 1
修改后如下:
def calc_load(self, userCpu, sysCpu, interval):
if interval == 0:
interval = 1
修改完成后再次执行./grab-bootchart.sh脚本,如果还是有错误:
解决办法是修改文件:/usr/lib/pymodules/python2.6/pybootchartgui/draw.py,改动如下:
将105行:
return "RSDTZXW".index(flag) + 1
改为:
return "RSDTZXW".find(flag) + 1
再执行./grab-bootchart.sh脚本,就可以在当前目录或者/tmp/bootchart/目录下生成bootchart.png的系统启动时间的png图了。