1. 程式人生 > >perf交叉編譯 arm-hisiv400-linux

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.148\lib 下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.148\libasm\Makefile 、elfutils-0.148\src\Makefile.

修正後即可編譯成功。

執行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-hisiv200-linux工具鏈類似。 但是由於arm-hisiv400-linux工具鏈編譯時,問題更多。主要記錄交叉編譯終於到的問題,或解決或繞過。 perf 工具需要zlib、binutils、elfutils庫支援

記一次grpc arm-hisiv400-linux交叉編譯

時間緊,先大概說明一下,有時間了再補充詳細的說明 grpc 交叉編譯 需要先編譯出pc版的protobuff 和 grpc,安裝到指定的路徑,在做交叉編譯時需要protoc 和grpc_cpp_plugin工具。這兩個工具也也是在編譯時會生成,交叉編譯過程中要遮蔽掉使用交叉

交叉編譯arm Linux環境下的android-tools-adb

前言     專案使用Rockchip的3399挖掘機demo板,使用官方提供的Debian Linux SDK(官方github原始碼連結:https://github.com/rockchip-linux)進行開發定製。當前需要將Android上的除錯工具adb移

Linux下的ds18b20驅動(執行環境 Fedora9.0 交叉編譯 arm-linux-gcc-4.3.2 核心版本2.6.32)

今天在各位前輩已有成就的基礎上花了兩天時間終於把這個驅動給搞定了,從開始編譯成模組看效果,進行除錯,再到編譯進核心,最後又編譯了一個介面出來,雖說大多數的程式程式碼是用各位前輩的成果,但坐下來自己收穫也不小,現在寫下來,以供以後參考,也和各位愛好者交流一下,呵呵! 一.編譯成

ubuntu 交叉編譯arm linux 核心

相關文章 安裝arm-linux-gcc 4.2.3 sudo tar  xvzf arm-linux-gcc-4.3.2.tar.gz  -C / 此時將安裝到/usr/local/arm下面 設定環境變數 gedit ~/.profile 在

嵌入式深度學習之mxnet交叉編譯Arm Linux

參考文件 本文件涉及到的目標硬體為全志H8(8核Cortex-A7,Armv7架構),但是對其他Arm晶片也有一定的借鑑意義,只需要更換交叉編譯鏈即可。 開發環境介紹 主機作業系統:Ubuntu14.04 64位 目標平臺:CQA83t 全志H8

安裝交叉編譯器arm-arago-linux-gnueabi-gcc

安裝交叉編譯工具鏈: https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/arm-linux-gnueabihf/ https://developer.arm.com/open-source/gnu-

交叉編譯ARM版Qt(qt-everywhere-opensource-src-4.8.4)

交叉編譯ARM版 Qt (qt-everywhere-opensource-src-4.8.4) 因實際專案需求,需將Qt編譯成LINUX-ARM版,以下為整個操作過程,使用Qt編寫的程式已在實際開發板上執行,在此貼出,但願能為需要的朋友提供上幫助。 準備工作: Linux核心版本:           開

opencv交叉編譯arm環境庫,靜態,動態庫和可執行程式

在工作中遇到把基於opencv的程式碼移植到板子上執行,在網上查看了很多資料,嘗試了兩種方案,都是可行的 1.把opencv程式碼用ndk的方式編譯成可執行檔案,直接放到板子上執行,這種方式是最便捷的不用考慮板子上其他程式的干擾 附上ndk編譯程式碼,準備好下面兩個檔案後,

go交叉編譯arm上的程式

Golang 支援交叉編譯,在一個平臺上生成另一個平臺的可執行程式,最近使用了一下,非常好用,這裡備忘一下。 Mac 下編譯 Linux 和 Windows 64位可執行程式 CGO_ENABLED=0 GOOS=linux GOARCH=amd64

使用Rust交叉編譯arm程式

作者: 劉天明 郵箱: [email protected] 部落格連結: http://blog.csdn.net/bellskinling 轉載請註明出處. 接上文, 有了支援arm版本的Rust後, 我們就可以編譯在arm下執行的程式了, 下面, 根我一起來

Centos6.5 下交叉編譯最小linux kernel之一(工具鏈)

環境說明: centos 6.5 mini desktop版本 備註說明:本文是根據《深度探索Linux作業系統構建和原理解析》的筆記 步驟 1. 準備工作環境,首先要建立工作目錄和環境變數 在/home/sherlock下建立linux目錄 #

Windows下使用Eclipse交叉編譯ARM

原文:http://www.acmesystems.it/foxg20_eclipse_windows_c 先轉過來,有時間再翻譯。 Developing in C/C++ with Eclipse Indigo on Windows This article ill

Linux下獲取arm交叉編譯工具鏈

win 5.1 app應用 地址 打開 release nbsp 最新 component 轉載請註明文章:Linux下獲取arm的交叉編譯工具鏈 出處:多客博圖 這裏介紹,Linux下獲取arm的交叉編譯工具鏈,比如arm-linux-gnueabihf-gcc、a

交叉編譯環境在root用戶下找不到arm-linux-gcc問題:

root GC 路徑 bashrc 問題 編譯 用戶 環境變量 重新 原因是:環境變量(交叉編譯路徑)可能是在普通用戶下添加的,所以在root用戶下創建的文件使用arm-linux-gcc編譯的時候,找不到arm-linux-gcc。 解決辦法:找個終端:sudo -s  

嵌入式交叉編譯環境arm-linux-gcc環境搭建

arm linux gcc 嵌入式交叉編譯環境 準備工具安裝目錄 可以去官網下載對應系統版本的arm-Linux-gcc。將壓縮包arm-linux-gcc-4.4.3.tar.gz存放在一個目錄下。 .tar.gz 和.tgz 解壓:tar zxvf FileName.tar.gz 壓縮:t

交叉編譯場景分析 arm linux

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux下搭建arm交叉編譯環境

首先需要在網上搜索arm-linux-gcc-4.3.2.tgz 傳到Linux下,執行tar xzvf arm-linux-gcc-4.3.2.tgz -C/ 解壓到根目錄下(目錄結構/usr/local/arm/4.3.2) 這樣,編譯器就解壓到了Linux系統中 然後建立

arm-linux-gnueabihf 交叉編譯

1:下載 arm-linux-gnueabihf 下載地址: https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.1

ubuntu16.04 64bit安裝交叉編譯工具arm-none-linux-gnueabi-2014.05(最新版)

安裝方式: 將下載好的安裝包拷貝到linux環境下,此處可以藉助設定虛擬機器與主機之間的共享資料夾實現。(設定方式自行百度) 實現的過程並不像網上說的那麼一帆風順,因為我的ubuntu是64bit,