freescale imx6 开机启动速度优化之Bootchart工具的使用问题

2019-07-13 08:59发布

之前有安装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图了。