perf编译

#make 
./configure --host=arm-linux-gnueabihf --prefix=/home/zhaowei/mywork/tool/elf;make -j8

#给报错的库添加如下编译选项
-Wno-nonnull-compare -Wno-implicit-fallthrough -Wno-unused-but-set-variable -Wno-sizeof-pointer-memaccess -Wno-format-truncation -Wno-sizeof-array-argument

/*
./i386_gendis i386_defs > i386_dis.h
./i386_gendis x86_64_defs > x86_64_dis.h
/bin/bash: line 1: ./i386_gendis: cannot execute binary file: Exec format error
/bin/bash: line 1: ./i386_gendis: cannot execute binary file: Exec format error
*/
aclocal
autoheader
autoconf
automake --add-missing
./configure --host=arm-linux-gnueabihf --prefix=/home/zhaowei/mywork/tool/elf;make

修改 Makefile
删除根目录 Makefile 中的 libcpu
删除 backends/Makefile 中的 libebl_i386.a and libebl_x86_64.a 相关内容 (这里把所有 i386 和 x86_64 字眼所在行全部注释)>>>>>>>>>>>>>>>>>>>>>>>
diff -uNr elfutils-0.150/backends/Makefile elfutils-0.150.change_makefile/backends/Makefile
--- elfutils-0.150/backends/Makefile    2016-08-24 14:28:43.122364093 +0800
+++ elfutils-0.150.change_makefile/backends/Makefile    2016-08-24 10:44:13.750042768 +0800

     arm_regs.$(OBJEXT) arm_corenote.$(OBJEXT) arm_auxv.$(OBJEXT) \
     arm_attrs.$(OBJEXT) arm_retval.$(OBJEXT)
 libebl_arm_pic_a_OBJECTS = $(am_libebl_arm_pic_a_OBJECTS)
-libebl_i386_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_i386_pic_a_LIBADD =
-am__objects_3 = i386_init.$(OBJEXT) i386_symbol.$(OBJEXT) \
+#libebl_i386_pic_a_AR = $(AR) $(ARFLAGS)
+#libebl_i386_pic_a_LIBADD =
+#am__objects_3 = i386_init.$(OBJEXT) i386_symbol.$(OBJEXT) \
     i386_corenote.$(OBJEXT) i386_cfi.$(OBJEXT) \
     i386_retval.$(OBJEXT) i386_regs.$(OBJEXT) i386_auxv.$(OBJEXT) \
     i386_syscall.$(OBJEXT)
-libebl_i386_pic_a_OBJECTS = $(am_libebl_i386_pic_a_OBJECTS)
+#libebl_i386_pic_a_OBJECTS = $(am_libebl_i386_pic_a_OBJECTS)
 libebl_ia64_pic_a_AR = $(AR) $(ARFLAGS)
 libebl_ia64_pic_a_LIBADD =
 am__objects_4 = ia64_init.$(OBJEXT) ia64_symbol.$(OBJEXT) \

     sparc_corenote.$(OBJEXT) sparc64_corenote.$(OBJEXT) \
     sparc_auxv.$(OBJEXT)
 libebl_sparc_pic_a_OBJECTS = $(am_libebl_sparc_pic_a_OBJECTS)
-libebl_x86_64_pic_a_AR = $(AR) $(ARFLAGS)
-libebl_x86_64_pic_a_LIBADD =
-am__objects_10 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \
+#libebl_x86_64_pic_a_AR = $(AR) $(ARFLAGS)
+#libebl_x86_64_pic_a_LIBADD =
+#am__objects_10 = x86_64_init.$(OBJEXT) x86_64_symbol.$(OBJEXT) \
     x86_64_corenote.$(OBJEXT) x86_64_cfi.$(OBJEXT) \
     x86_64_retval.$(OBJEXT) x86_64_regs.$(OBJEXT) \
     i386_auxv.$(OBJEXT) x86_64_syscall.$(OBJEXT)
-libebl_x86_64_pic_a_OBJECTS = $(am_libebl_x86_64_pic_a_OBJECTS)
+#libebl_x86_64_pic_a_OBJECTS = $(am_libebl_x86_64_pic_a_OBJECTS)
 AM_V_P = $(am__v_P_$(V))
 am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
 am__v_P_0 = false

 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libebl_alpha_pic_a_SOURCES) $(libebl_arm_pic_a_SOURCES) \
-    $(libebl_i386_pic_a_SOURCES) $(libebl_ia64_pic_a_SOURCES) \
+    $(libebl_ia64_pic_a_SOURCES) \
     $(libebl_ppc64_pic_a_SOURCES) $(libebl_ppc_pic_a_SOURCES) \
     $(libebl_s390_pic_a_SOURCES) $(libebl_sh_pic_a_SOURCES) \
-    $(libebl_sparc_pic_a_SOURCES) $(libebl_x86_64_pic_a_SOURCES)
+    $(libebl_sparc_pic_a_SOURCES)
 DIST_SOURCES = $(libebl_alpha_pic_a_SOURCES) \
-    $(libebl_arm_pic_a_SOURCES) $(libebl_i386_pic_a_SOURCES) \
+    $(libebl_arm_pic_a_SOURCES)  \
     $(libebl_ia64_pic_a_SOURCES) $(libebl_ppc64_pic_a_SOURCES) \
     $(libebl_ppc_pic_a_SOURCES) $(libebl_s390_pic_a_SOURCES) \
-    $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES) \
-    $(libebl_x86_64_pic_a_SOURCES)
+    $(libebl_sh_pic_a_SOURCES) $(libebl_sparc_pic_a_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \

 MAINT = #
 MAKEINFO = makeinfo
 MKDIR_P = /bin/mkdir -p
-MODVERSION = Build on R04220 2016-08-24T14:28:41+0800
+MODVERSION = Build on R04220 2016-08-24T10:35:18+0800
 MSGFMT = /usr/bin/msgfmt
 MSGFMT_015 = /usr/bin/msgfmt
 MSGMERGE = /usr/bin/msgmerge

 CLEANFILES = *.gcno *.gcda $(foreach m,$(modules), libebl_$(m).map \
     libebl_$(m).so $(am_libebl_$(m)_pic_a_OBJECTS))
 textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi
-modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390
-libebl_pic = libebl_i386_pic.a libebl_sh_pic.a libebl_x86_64_pic.a \
+modules = sh ia64 alpha arm sparc ppc ppc64 s390
+libebl_pic = libebl_sh_pic.a \
          libebl_ia64_pic.a libebl_alpha_pic.a libebl_arm_pic.a \
          libebl_sparc_pic.a libebl_ppc_pic.a libebl_ppc64_pic.a \
          libebl_s390_pic.a

 #libelf = ../libelf/libelf.a
 libdw = ../libdw/libdw.so
 #libdw = ../libdw/libdw.a
-i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \
+#i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \
         i386_retval.c i386_regs.c i386_auxv.c i386_syscall.c
 
-cpu_i386 = ../libcpu/libcpu_i386.a
-libebl_i386_pic_a_SOURCES = $(i386_SRCS)
-am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os)
+#cpu_i386 = ../libcpu/libcpu_i386.a
+#libebl_i386_pic_a_SOURCES = $(i386_SRCS)
+#am_libebl_i386_pic_a_OBJECTS = $(i386_SRCS:.c=.os)
 sh_SRCS = sh_init.c sh_symbol.c sh_corenote.c sh_regs.c sh_retval.c
 libebl_sh_pic_a_SOURCES = $(sh_SRCS)
 am_libebl_sh_pic_a_OBJECTS = $(sh_SRCS:.c=.os)
-x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \
+#x86_64_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.c \
           x86_64_retval.c x86_64_regs.c i386_auxv.c x86_64_syscall.c
 
-cpu_x86_64 = ../libcpu/libcpu_x86_64.a
-libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS)
-am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os)
+#cpu_x86_64 = ../libcpu/libcpu_x86_64.a
+#libebl_x86_64_pic_a_SOURCES = $(x86_64_SRCS)
+#am_libebl_x86_64_pic_a_OBJECTS = $(x86_64_SRCS:.c=.os)
 ia64_SRCS = ia64_init.c ia64_symbol.c ia64_regs.c ia64_retval.c
 libebl_ia64_pic_a_SOURCES = $(ia64_SRCS)
 am_libebl_ia64_pic_a_OBJECTS = $(ia64_SRCS:.c=.os)

     $(AM_V_AR)$(libebl_arm_pic_a_AR) libebl_arm_pic.a $(libebl_arm_pic_a_OBJECTS) $(libebl_arm_pic_a_LIBADD)
     $(AM_V_at)$(RANLIB) libebl_arm_pic.a
 
-libebl_i386_pic.a: $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_DEPENDENCIES) $(EXTRA_libebl_i386_pic_a_DEPENDENCIES) 
-    $(AM_V_at)-rm -f libebl_i386_pic.a
-    $(AM_V_AR)$(libebl_i386_pic_a_AR) libebl_i386_pic.a $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_LIBADD)
-    $(AM_V_at)$(RANLIB) libebl_i386_pic.a
+#libebl_i386_pic.a: $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_DEPENDENCIES) $(EXTRA_libebl_i386_pic_a_DEPENDENCIES) 
+#    $(AM_V_at)-rm -f libebl_i386_pic.a
+#    $(AM_V_AR)$(libebl_i386_pic_a_AR) libebl_i386_pic.a $(libebl_i386_pic_a_OBJECTS) $(libebl_i386_pic_a_LIBADD)
+#    $(AM_V_at)$(RANLIB) libebl_i386_pic.a
 
 libebl_ia64_pic.a: $(libebl_ia64_pic_a_OBJECTS) $(libebl_ia64_pic_a_DEPENDENCIES) $(EXTRA_libebl_ia64_pic_a_DEPENDENCIES) 
     $(AM_V_at)-rm -f libebl_ia64_pic.a

     $(AM_V_AR)$(libebl_sparc_pic_a_AR) libebl_sparc_pic.a $(libebl_sparc_pic_a_OBJECTS) $(libebl_sparc_pic_a_LIBADD)
     $(AM_V_at)$(RANLIB) libebl_sparc_pic.a
 
-libebl_x86_64_pic.a: $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_DEPENDENCIES) $(EXTRA_libebl_x86_64_pic_a_DEPENDENCIES) 
-    $(AM_V_at)-rm -f libebl_x86_64_pic.a
-    $(AM_V_AR)$(libebl_x86_64_pic_a_AR) libebl_x86_64_pic.a $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_LIBADD)
-    $(AM_V_at)$(RANLIB) libebl_x86_64_pic.a
+#libebl_x86_64_pic.a: $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_DEPENDENCIES) $(EXTRA_libebl_x86_64_pic_a_DEPENDENCIES) 
+#    $(AM_V_at)-rm -f libebl_x86_64_pic.a
+#    $(AM_V_AR)$(libebl_x86_64_pic_a_AR) libebl_x86_64_pic.a $(libebl_x86_64_pic_a_OBJECTS) $(libebl_x86_64_pic_a_LIBADD)
+#    $(AM_V_at)$(RANLIB) libebl_x86_64_pic.a
 
 mostlyclean-compile:
     -rm -f *.$(OBJEXT)

 include ./$(DEPDIR)/arm_regs.Po
 include ./$(DEPDIR)/arm_retval.Po
 include ./$(DEPDIR)/arm_symbol.Po
-include ./$(DEPDIR)/i386_auxv.Po
-include ./$(DEPDIR)/i386_cfi.Po
-include ./$(DEPDIR)/i386_corenote.Po
-include ./$(DEPDIR)/i386_init.Po
-include ./$(DEPDIR)/i386_regs.Po
-include ./$(DEPDIR)/i386_retval.Po
-include ./$(DEPDIR)/i386_symbol.Po
-include ./$(DEPDIR)/i386_syscall.Po
+#include ./$(DEPDIR)/i386_auxv.Po
+#include ./$(DEPDIR)/i386_cfi.Po
+#include ./$(DEPDIR)/i386_corenote.Po
+#include ./$(DEPDIR)/i386_init.Po
+#include ./$(DEPDIR)/i386_regs.Po
+#include ./$(DEPDIR)/i386_retval.Po
+#include ./$(DEPDIR)/i386_symbol.Po
+#include ./$(DEPDIR)/i386_syscall.Po
 include ./$(DEPDIR)/ia64_init.Po
 include ./$(DEPDIR)/ia64_regs.Po
 include ./$(DEPDIR)/ia64_retval.Po

 include ./$(DEPDIR)/sparc_regs.Po
 include ./$(DEPDIR)/sparc_retval.Po
 include ./$(DEPDIR)/sparc_symbol.Po
-include ./$(DEPDIR)/x86_64_cfi.Po
-include ./$(DEPDIR)/x86_64_corenote.Po
-include ./$(DEPDIR)/x86_64_init.Po
-include ./$(DEPDIR)/x86_64_regs.Po
-include ./$(DEPDIR)/x86_64_retval.Po
-include ./$(DEPDIR)/x86_64_symbol.Po
-include ./$(DEPDIR)/x86_64_syscall.Po
 
 .c.o:
     $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<

         -Wl,-z,defs -Wl,--as-needed $(libelf) $(libdw) $(libmudflap)
     $(textrel_check)
 
-libebl_i386.so: $(cpu_i386)
-libebl_x86_64.so: $(cpu_x86_64)
+#libebl_i386.so: $(cpu_i386)
+#libebl_x86_64.so: $(cpu_x86_64)
 
 install: install-am install-ebl-modules
 install-ebl-modules:
diff -uNr elfutils-0.150/Makefile elfutils-0.150.change_makefile/Makefile
--- elfutils-0.150/Makefile    2016-08-24 14:28:43.006363730 +0800
+++ elfutils-0.150.change_makefile/Makefile    2016-08-24 10:35:45.771545207 +0800

 pkginclude_HEADERS = version.h
 
 # Add doc back when we have some real content.
-SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends \
+SUBDIRS = config m4 lib libelf libebl libdwfl libdw libasm backends \
       src po tests
 
 EXTRA_DIST = elfutils.spec GPG-KEY NOTES EXCEPTION
diff -uNr elfutils-0.150/src/Makefile elfutils-0.150.change_makefile/src/Makefile
--- elfutils-0.150/src/Makefile    2016-08-24 14:28:43.134364130 +0800
+++ elfutils-0.150.change_makefile/src/Makefile    2016-08-24 10:50:27.408937610 +0800

 LEX_OUTPUT_ROOT = lex.yy
 LIBEBL_SUBDIR = elfutils
 LIBOBJS = 
-LIBS = 
+LIBS = -lz
 LTLIBOBJS = 
 MAINT = #
 MAKEINFO = makeinfo
 MKDIR_P = /bin/mkdir -p
 MODVERSION = Build on R04220 2016-08-24T10:35:18+0800
 MSGFMT = /usr/bin/msgfmt
 MSGFMT_015 = /usr/bin/msgfmt
 MSGMERGE = /usr/bin/msgmerge
diff -uNr elfutils-0.150/tests/Makefile elfutils-0.150.change_makefile/tests/Makefile
--- elfutils-0.150/tests/Makefile    2016-08-24 14:28:43.158364205 +0800
+++ elfutils-0.150.change_makefile/tests/Makefile    2016-08-24 10:51:48.828696796 +0800

 LEX_OUTPUT_ROOT = lex.yy
 LIBEBL_SUBDIR = elfutils
 LIBOBJS = 
-LIBS = 
+LIBS = -lz
 LTLIBOBJS = 
 MAINT = #
 MAKEINFO = makeinfo
 MKDIR_P = /bin/mkdir -p
 MODVERSION = Build on R04220 2016-08-24T14:28:41+0800
 MSGFMT = /usr/bin/msgfmt
 MSGFMT_015 = /usr/bin/msgfmt
 MSGMERGE = /usr/bin/msgmerge


zlib交叉编译>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
https://zlib.net/fossils/
解压:tar xvf zlib-1.2.10.tar.gz
mkdir  output

export CC=arm-linux-gnueabihf-gcc  (设置编译器是用交叉编译器。重要!!)

./configure --prefix=./ouput  (设置编译输出文件,动态库,静态库)

make

make install
-I/home/zhaowei/mywork/tool/zlib-1.2.10/ouput/include -L/home/zhaowei/mywork/tool/zlib-1.2.10/ouput/lib

回过头来再编译perf>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index b0f164b..5e88839 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -30,11 +30,13 @@ include config/utilities.mak
 # Define LDFLAGS=-static to build a static binary.
 #
 # Define EXTRA_CFLAGS=-m64 or EXTRA_CFLAGS=-m32 as appropriate for cross-builds.
-#
+EXTRA_CFLAGS=-I/home/sunnogo/workshop/rgosm-build/public/include -I/home/sunnogo/workshop/prj/images/header -D_LITTLE_ENDIAN -L/home/sunnogo/workshop/prj/images/lib -L/home/sunnogo/workshop/prj/images/rootfs/lib
+
 # Define NO_DWARF if you do not want debug-info analysis feature at all.
 #
 # Define WERROR=0 to disable treating any warnings as errors.
-#
+WERROR=0
+
 # Define NO_NEWT if you do not want TUI support. (deprecated)
 #
 # Define NO_SLANG if you do not want TUI support.
@@ -111,7 +113,7 @@ ifdef NO_NEWT
 endif
 
 CFLAGS = -fno-omit-frame-pointer -ggdb3 -funwind-tables -Wall -Wextra -std=gnu99 $(CFLAGS_WERROR) $(CFLAGS_OPTIMIZE) $(EXTRA_WARNINGS) $(EXTRA_CFLAGS) $(PARSER_DEBUG_CFLAGS)
-EXTLIBS = -lpthread -lrt -lelf -lm
+EXTLIBS = -lpthread -lrt -lelf -lm -lebl -lz -ldl
 ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
 ALL_LDFLAGS = $(LDFLAGS)
 STRIP ?= strip


perf编译>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
编译之前内核要打开支持的选项
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_PERF_EVENTS=y
CONFIG_DEBUG_PERF_USE_VMALLOC=y
CONFIG_KUSER_HELPERS=y
CONFIG_DEBUG_INFO=y
再编译perf
make clean;make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm perf

EXTRA_CFLAGS=-I/home/zhaowei/mywork/tool/elf/include -D_LITTLE_ENDIAN  -L/home/zhaowei/mywork/tool/elf/lib
test 代码依赖 libz
freom:http://sunyongfeng.com/201608/programmer/tools/perf_compile.html


最后编译后perf 可用,但是我们4.17的内核打开perf_events之后加载驱动报错。很无奈
Backtrace: 
[   45.164000] [<c088e9ec>] (rb_erase) from [<c038a4b4>] (__mod_tree_remove+0x34/0x5c)
[   45.171000]  r5:bf04ca44 r4:c0f0e280
[   45.175000] [<c038a480>] (__mod_tree_remove) from [<c038ec30>] (do_init_module+0x110/0x1d4)
[   45.183000]  r5:00000000 r4:bf04c900
[   45.187000] [<c038eb20>] (do_init_module) from [<c038e0ac>] (load_module+0x1f50/0x1fac)
[   45.195000]  r6:00000001 r5:cf039f30 r4:bf04c900
[   45.199000] [<c038c15c>] (load_module) from [<c038e22c>] (SyS_init_module+0x124/0x134)
[   45.207000]  r10:00000051 r9:ffffe000 r8:0015a325 r7:d0b56cbc r6:00000000 r5:00177024
[   45.215000]  r4:00002cbc
[   45.218000] [<c038e108>] (SyS_init_module) from [<c03074e0>] (ret_fast_syscall+0x0/0x54)
[   45.226000]  r10:00000000 r9:cf038000 r8:c03076c4 r7:00000080 r6:00000069 r5:bead0d94
[   45.234000]  r4:00000000
[   45.236000] Code: e89da830 e35c0000 e581c000 089da830 (e58c2000) 
[   45.242000] ---[ end trace 7fbd975a49da5456 ]---

----------------------------------------------------------------------

驱动加载错误是因为,需要重新编译替换新编译的kernel
 

### 回答1: 在Linux系统下进行交叉编译perf工具,需要以下几个步骤: 1. 首先需要获取合适的交叉编译工具链。根据目标硬件平台的架构选择对应的交叉编译工具链。可以从官方网站或第三方资源获取。 2. 下载perf源码。perf通常随着Linux内核一起发布,可以从Linux内核官方网站上下载到相应版本的源码。 3. 解压源码。使用压缩工具将下载得到的源码进行解压缩。 4. 设置环境变量。根据交叉编译工具链的路径设置相应的环境变量,例如PATH,ARCH,CROSS_COMPILE等。 5. 进入perf源码目录,在终端中输入命令"make perf"开始编译编译过程中,会使用交叉编译工具链进行对应的编译操作。 6. 编译完成后,在源码目录中会生成一个名为"perf"的可执行文件,即为交叉编译后的perf工具。 需要注意的是,交叉编译perf工具的具体步骤和参数可能会因为不同的交叉编译工具链版本和目标平台的不同而有所差异。因此,在具体操作过程中需要根据实际情况进行调整。同时,确保操作系统中已经安装了相应的开发工具和依赖库,以保证正确的编译过程。 ### 回答2: 对于Linux系统上进行交叉编译perf工具,你需要先了解一些基本概念和步骤。 1. 交叉编译:交叉编译是在一种操作系统上生成运行于不同架构或操作系统上的可执行文件。对于在Linux上进行交叉编译,你需要安装一个交叉编译工具链,该工具链能够生成目标平台(如ARM、MIPS等)上的可执行文件。 2. Perf工具:Perf是一个性能分析工具,它可以帮助你监测和分析Linux系统上的各种性能指标,如CPU使用率、内存使用、I/O等。通过perf工具,你可以收集系统的性能数据,用于分析和优化程序的性能。 在进行Linux交叉编译perf的过程中,以下是基本的步骤: 1. 选择目标平台:确定你要在哪个目标平台上运行perf工具,根据该平台的架构和操作系统选择相应的交叉编译工具链。 2. 准备交叉编译工具链:安装并配置交叉编译工具链,确保在你的Linux系统上能够生成目标平台的可执行文件。 3. 获取perf源代码:从Linux内核的源代码中获取perf的源代码,它通常位于`tools/perf`目录下。 4. 配置交叉编译环境:进入perf源代码目录,在终端中设置交叉编译环境变量,包括CC、CROSS_COMPILE等。 5. 执行交叉编译命令:执行交叉编译的命令,如`make`或`make ARCH=arm`,根据你的目标平台进行设置。 6. 构建完成:编译过程完成后,你会在`perf`源代码目录中得到一个可执行文件,它是为目标平台交叉编译生成的perf工具。 请注意,交叉编译涉及到一些细节和特定的环境设置,具体步骤可能根据你的系统和目标平台而有所不同。在实际操作中,你可能需要参考相关的文档或资源,以获得更详细的指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值