我是靠谱客的博主 自由冬天,最近开发中收集的这篇文章主要介绍perf交叉编译 arm-hisiv400-linux,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文件改动配置方法基本与,perf使用arm-hisiv200-linux工具链类似。

但是由于arm-hisiv400-linux工具链编译时,问题更多。主要记录交叉编译终于到的问题,或解决或绕过。


perf 工具需要zlib、binutils、elfutils库支持。

我主机上的arm-hisiv400-linux-的交叉工具链已经支持zlib、binutils库,所以只需要做elfutils的交叉编译即可。



交叉编译elfutils

使用elfutils-0.148.tar.bz2(目前最新)    下载地址:https://fedorahosted.org/releases/e/l/elfutils/

tar -xvjf elfutils-0.148.tar.bz2


<pre name="code" class="cpp">cd elfutils-0.148
./configure --host=arm-hisiv400-linux --prefix=/xxx/elfutils_tool/elfutils_target --exec-prefix=/xxx/elfutils_tool/elfutils_target
 
注意: 
--host=arm-hisiv400-linux 没有- 

按照上篇文章提到的

、、、、、、、、、、、、、、、、、、、、上文提到的、、、、、、、、、、、、、、、、、、、、、、、、、

修改elfutils-0.148 目录下Makefile    根目录下makefile ,修改过程-》

# Add doc back when we have some real content.
SUBDIRS = config m4 lib libelf libebl libdwfl libdw libcpu libasm backends 
	  src po tests
将libcpu去掉。改为
# Add doc back when we have some real content.
SUBDIRS = config m4 lib libelf libebl libdwfl libdw libasm backends 
	  src po tests

修改elfutils-0.148/backends/下makefile

如左图中修改,右图中作为对照 ,主要是去掉i386 和x86_64 相关内容,不然各种错误。



、、、、、、、、、、、、、、、、、、、上篇文章提到的、、、、、、、、、、、、、、、、、、、、、、、、、、、


make

遇到第一个问题

md5.c:108:3: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
cc1: all warnings being treated as errors
 

解决这个问题可以根据https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=684825提到的解决方法https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=15;filename=bug684825.patch;bug=684825;att=1这个patch

也可以修改相应makefile,中的Werror   CFLAGS 选项  将其去掉。

我打的patch,比较笨的方法。

修改makefile的话 将elfutils-0.148lib 下makfile

<pre name="code" class="cpp">AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if 
	$($(*F)_no_Werror),,-Werror) $(if 
	$($(*F)_no_Wunused),,-Wunused -Wextra) $(if 
	$($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) 
	$(am__append_1) -fpic

 修改如下,删除 
-Werror 

AM_CFLAGS = -std=gnu99 -Wall -Wshadow $(if 
	$($(*F)_no_Werror),,) $(if 
	$($(*F)_no_Wunused),,-Wunused -Wextra) $(if 
	$($(*F)_no_Wformat),-Wno-format,-Wformat=2) $($(*F)_CFLAGS) 
	$(am__append_1) -fpic

继续make  你会发现 还有类似的错误   都是Werror编译选项导致的,我在根目录的makefile没有找到去除这个选项的方法,就直接在出现
cc1: all warnings being treated as errors

错误的文件夹内修改对应的makefile,修改方式按照上文提到的方式,删除-Werror即可。

修改的文件有elfutils-0.148libasmMakefile 、elfutils-0.148srcMakefile.

修正后即可编译成功。

执行make install  完成elfutils库的交叉编译。



perf交叉编译。

进入linux-3.10.y/tools/perf目录

修改Makefile ,如果编译器编译太严格的的话,把warning,判定为error ,可以把 CFLAGS中$(CFLAGS_WERROR)删除。

CFLAGS = -fno-omit-frame-pointer -ggdb3 -Wall -Wextra -std=gnu99 $(CFLAGS_WERROR) $(CFLAGS_OPTIMIZE) -D_FORTIFY_SOURCE=2 $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
EXTLIBS = -lpthread -lrt -lelf -lm -lebl -ldl -L/xxx/elfutils_tool/elfutils_target/lib 
ALL_CFLAGS = $(CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/xxx/elfutils_tool/elfutils_target/include
ALL_LDFLAGS = $(LDFLAGS)

make LDFLAGS=-static ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- DEBUG=1 LIBDW_DIR=/xxx/elfutils_tool/elfutils_target HAVE_CPLUS_DEMANGLE=1

 遇到flex的问题,见上章解决介绍,

遇到debugfs.c 文件编译时linux/magic.h找不到的话,就把linux-3.10.y/tools/lib/lk   目录下的debugfs.c    //#include <linux/magic.h>注释掉。


遇到arm-hisiv400-linux-ld链接 时  提示 debugfs.o格式不正确的问题,可以到linux-3.10.y/tools/lib/lk   目录下

执行file debugfs.o      看看debugfs.o 是不是arm版本的,如果确定不是,可以直接执行arm-hisiv400-linux-gcc -c debugfs.c生成arm版本的debugfs.o,回到elfutils-0.148下继续make。


遇到找不到-lebl 库找不到的话,可以直接在elfutils-0.148/目录下修改makefile 如下

EXTLIBS = -lpthread -lrt -lelf -lm -lebl -ldl -L/user1/yueyc/elfutils_tool/elfutils_target/lib 

修改为

EXTLIBS = -lpthread -lrt -lelf -lm -ldl -L/user1/yueyc/elfutils_tool/elfutils_target/lib 

这个问题花费了很长的时间,因为在elfutils_target/lib 中的确有libebl.a  静态库,看到了其他不报找不到的库都有动态库的文件。进行了如下几个尝试。

使用arm-hisiv400-linux-ar -x libebl.a 指令将静态库打散成*.o 文件,然后使用*.o 生成动态库,并建立连接文件,依旧不可以

尝试如下方式,不起作用

cp libebl.a libebl1.a
arm-hisiv400-linux-ar -x libebl1.a
arm-hisiv400-linux-gcc -shared *.o -o libebl.so


尝试如下方式,也不起作用

cp libebl.a libebl1.a
arm-hisiv400-linux-ar -x libebl1.a
arm-hisiv400-linux-gcc -shared *.o -o libebl.so.1
ln -fs libebl.so.1 libebl.so

想尝试一下在makefile下直接生成动态库,makefile书写入门水平。
尝试了一下将Makefile中   -lebl删除,神奇的成功的制作出了perf工具,在Hi3536平台上一测试可用。
如果哪位高手,正规的解决了中间过程中提到的问题,劳烦留言告知,谢谢各位看官。











最后

以上就是自由冬天为你收集整理的perf交叉编译 arm-hisiv400-linux的全部内容,希望文章能够帮你解决perf交叉编译 arm-hisiv400-linux所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部