zoukankan      html  css  js  c++  java
  • Linux 在海思3516上移植Oprofile

    最近由于项目需求,需要将Oprofile移植到海思3516平台上。Oprofile是一款比较好用的开源的性能分析工具。它通过采样CPU来计算程序中每个部分占用的时间。应该说是比较准确的。

    在安装oprofile之前,需要保证系统支持oprofile。即在系统编译内核的时候要将一下两项勾上

    make menuconfig
    General setup --->

    [*] Profiling support
    <*> OProfile system profiling

    Oprofile 需要popt库和binutils库的支持,因此在安装Oprofile 之前,要先安装popt和binutils。

    在安装之前需要设定几个环境变量

    export CC=arm-none-linux-gnueabi-gcc //修改成你的编译器

    export CXX=arm-none-linux-gnueabi-g++ //修改成你的编译器

    export CFLAGS=-static

    export CXXFLAGS=-static

    export CPPFLAGS=-static

    export ac_cv_va_copy=C99

    一、安装popt库
    下载地址:http://download.chinaunix.net/download.php?id=16763&ResourceID=8268

    下载完成后,解压:

    tar zxvf popt-1.7.tar.gz 

    然后到目录中执行一下命令

    ./configure --with-kernel-support --target= <arm-hisiv100-linux> --host=<arm-hisiv100-linux> --prefix=</home/XXX/oprofile> && make && make install

    --target 和 --host 都是你系统的名称。--prefix 是你要库的生成目录。 --with-kernel-support是在2.6的核才可以这样,不需要核的源码。在2.4的核上时,则需要指定--with-kernel=<核的源码路径>

    编译完成之后,将生成的include和lib目录下的文件分别拷贝到交叉编译器的include和lib目录下。这样popt也就安装完成了。

    二、安装binutils

    下载地址:http://ftp.gnu.org/gnu/binutils/

    下载完成后,解压:

    tar zxvf binutils-2.20.1.tar.gz

    然后在目录中执行以下命令:

    ./configure --with-kernel-support --target=arm-hisiv100-linux --host=arm-hisiv100-linux --enable-install-libbfd --prefix=/home/xxx/oprofile/binutils --disable-nls

    --enable-install-libbfd 是为了安装bfd库,因为在默认情况下,binutils 是不安装bfd库的。这样会导致后面编译Oprofile 的时候出错

    --disable-nls ,如果不增加这个选项,那么在后面编译的时候就会增加对/devel/gettext库的依赖。可能会导致后面Oprofile的编译出错。

    三、安装oprofile

    下载地址:http://oprofile.sourceforge.net/news/

    解压:

    tar zxvf oprofile-0.9.6.tar.gz

    如果你是2.6的核,那么在编译之前你还需要修改几处代码,以消除对2.4核的支持(不然后面会出错的)。主要有以下几个地方(将红色部分删除)。

    ./daemon/Makefile.am

    Line 1:

    SUBDIRS = liblegacy .

    Line 49:

    bin_PROGRAMS = oprofiled

    oprofiled_LDADD = \
    liblegacy/liblegacy.a \
    ../libabi/libabi.a \
    ../libdb/libodb.a \
    ../libop/libop.a \
    ../libutil/libutil.a

    ./daemon/Makefile.in

    Line 73:

    oprofiled_DEPENDENCIES = liblegacy/liblegacy.a  ../libabi/libabi.a \

    Line 239:

    SUBDIRS = liblegacy .

    Line 284:

    oprofiled_LDADD = \
    liblegacy/liblegacy.a \
    ../libabi/libabi.a \
    ../libdb/libodb.a \
    ../libop/libop.a \
    ../libutil/libutil.a

    ./daemon/oprofiled.c
    Line 80:

    extern struct oprofiled_ops opd_24_ops;

    Line 480:

     switch (op_get_interface()) {
    case OP_INTERFACE_24:
    printf("Using 2.4 OProfile kernel interface.\n");
    return &opd_24_ops;
    case OP_INTERFACE_26:
    printf("Using 2.6+ OProfile kernel interface.\n");
    return &opd_26_ops;

    主要就是以上的地方,可能由于版本不同等原因,行号等可能有变化。

    修改完成后输入一下命令:

     ./configure --with-kernel-support --target=arm-hisiv100-linux --host=arm-hisiv100-linux --with-binutils=/home/xxx/oprofile/binutils --prefix=/home/xxx/oprofile/oprofile && make && make install 

    命令执行完成之后,就在oprofile目录下生成了oprofile的文件。将这些文件拷贝到嵌入式平台上,至此,oprofile就移植成功了。








  • 相关阅读:
    ATS(App Transport Security)对HTTP协议屏蔽引起的问题
    后台子线程(非主线程)更新UI引起的警告
    Xcode无法启动ios模拟器的问题
    UIButton修改文字大小问题
    imageNamed和imageWithContentsOfFile-无法加载图片的问题
    storyboard在ios模拟器无法显示的问题
    返回一个数组的连续子数组和的最大值
    第二周学习进度总结
    软件工程开学第一节课课堂测试
    第一周学习进度总结
  • 原文地址:https://www.cnblogs.com/lovesaber/p/2315999.html
Copyright © 2011-2022 走看看