#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