perf arm交叉编译

来源:互联网 发布:最牛象棋软件 编辑:程序博客网 时间:2024/06/07 10:32

前言

  • perf工具源码位于linux内核目录的tools下
  • perf工具的编译需要依赖于内核
  • perf工具必须使用编译linux内核源码的同一个编译器编译

步骤

编译zlib

网上查到资料说需要编译zlib,我编译的时候貌似不用也行,可以尝试先不用zlib

  • 下载地址:zlib
  • 配置:

    CC=arm-linux-gnueabihf-gcc ./configure –prefix={你的gcc目录}arm-linux-gnueabihf/libc/usr/

  • 编译: make && make install

编译elfutils

我的gcc版本:gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux

  • 下载elfutils-0.159 elfutils(我用最新的没问题)
  • 配置:
    ./configure --host=arm-linux-gnueabihf --prefix=/home/tofu/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/arm-linux-gnueabihf/libc/usr/
    (注意:host参数的gnueabihf后面没有“-”,错写了要悲剧)
  • 修改Makefile: 删除elfutils根目录下Makefile里面的libcup (没让你删除cpu文件夹啊)
  • 修改backends/Makefile: 删除backends/Makefile中的libebl_i386.so和libebl_x86_64.so
  • 编译: make&&make install

编译binutils

  • 在GNU官方网站下载binutils源码,考虑到与编译器版本匹配,我下载了binutils-2.23.2
  • GNU官方推荐在一个单独的文件夹进行编译。在源码文件夹的同级目录建立编译文件夹 mkdir ../binutils-build
  • 进入binutils-build文件夹,执行命令

    ../binutils-2.23.2/configure –target=arm-linux-gnueabihf –host=arm-linux-gnueabihf –prefix=/tmp/binutils

  • make&&make install 即可

编译perf

  • 修改perf根目录下的Makefile: 在前面增加

    EXTLIBS += -lpthread -lrt -lelf -lm -lebl -ldl -L/home/tofu/dji/linux-sofpga-next-preempt/tools/elfutils/lib

  • 修改config/Makefile文件,注释掉以下几行,本来已经加入了elfutils,但是这里自动检测总是检测不到,直接注释了。


    ifneq ((calltrycc,(SOURCE_DWARF),(FLAGSDWARF),libdw),y)msg:=(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev);
    NO_DWARF := 1
    endif # Dwarf support

  • 编译:

    make LDFLAGS=-static ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- DEBUG=1 LIBDW_DIR=/home/tofu/work/linux-socfpga-next-preempt/tools/elfutils HAVE_CPLUS_DEMANGLE=1

这里我为了省事,把以上编译的库的–prefix全设在elfutils里面了,编译的时候,在加入LIBDW_DIR时,相应的库也就添加进去了。

  • clean:

    make CROSS_COMPILE=arm-linux-gnueabihf- clean

  • 测试:

    ./perf stat echo “haha”

0 0
原创粉丝点击