1. 程式人生 > >centos7.2中搭建ARM開發環境所需工具初體驗

centos7.2中搭建ARM開發環境所需工具初體驗

需要用到的工具:

編譯工具:arm-linux-gcc 

連結工具:arm-linux-ld

格式轉換工具:arm-linux-objcopy

反彙編器:arm-linux-objdump

檔案資訊檢視:arm-linux-readelf

下載工具:dnw

除錯工具:arm-linux-gdb

JLink驅動:JLinkGDBServer


1. 將arm-linux-gcc的bin目錄新增至環境變數,使用命令如下

   vi   ~/.bashrc
  在.bashrc檔案末尾加上 

  export PATH=$PATH:/home/lu/arm_bin/4.3.2/bin,後面路徑需意個人境況而定,等號兩邊不要有空格

  新增後,輸入在命令視窗輸入arm-linux-gcc會出現如下錯誤:

[[email protected] arm]$ arm-linux-gcc -v

/home/lu/arm_bin/4.3.2/bin/arm-linux-gcc: /home/lu/arm_bin/4.3.2/bin/arm-none-linux-gnueabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: 沒有那個檔案或目錄

/home/lu/arm_bin/4.3.2/bin/arm-linux-gcc:3: /home/lu/arm_bin/4.3.2/bin/arm-none-linux-gnueabi-gcc: 成功


這是因為在在64位系統中執行32位程式需要安裝32位的庫,使用如下命令安裝

yum install glibc.i686


以hello.c為例,使用arm-linux-gcc,如下

[[email protected] arm]$ arm-linux-gcc hello.c -o hello

[[email protected] arm]$ file hello 

hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped

可以發現,此時編譯出的檔案適用平臺為ARM

若是使用gcc則編譯出的可執行檔案適用平臺為X86_64,如下所示

[[email protected] arm]$ gcc hello.c -o hello2

[[email protected] arm]$ file hello2

hello2: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ec21632861f93013791b58571a92f669486bc445, not stripped

2.在實際編譯過程中,一般使用arm-linux-gcc工具時只編譯不連結,使其生成目標檔案即可(.o檔案),而是由arm-linux-lds來完成連結,

其用法為

arm-linux-ld -T*.lds(連結指令碼檔案)  -o *.elf  *.o *.o(所需要連結的檔案)


連結後的檔案為.elf格式的,這並不能在ARM上直接執行,能在ARN上執行的是二進位制檔案,格式為.bin

此時,還需另一工具arm-linux-objcopy來完成轉換,使ELF檔案變為bin檔案,其用法如下

arm-linux-objcopy -O binary *.elf *.bin

-O binary意味輸出二進位制檔案

至此,能在ARM上執行的可執行的檔案就製作好了

3.arm-linux-objdump,反彙編器,即根據編譯好的 程式碼來商城彙編程式碼,其用法如下

arm-linux-objdump -D -S *.elf >dump,其預設是將生成的程式碼輸入到螢幕,效果如下

#include<stdio.h>

int main()

{

    8380: e92d4800  push {fp, lr}

    8384: e28db004  add fp, sp, #4 ; 0x4

    8388: e24dd008  sub sp, sp, #8 ; 0x8

printf("hello world");

    838c: e59f000c  ldr r0, [pc, #12] ; 83a0 <main+0x20>

    8390: ebffffca  bl 82c0 <_init+0x48>

}

    8394: e24bd004  sub sp, fp, #4 ; 0x4

    8398: e8bd4800  pop {fp, lr}

    839c: e12fff1e  bx lr

83a0: 0000842c  .word 0x0000842c

地址 機器碼彙編程式碼


編譯時加上除錯資訊(-g) 才會在反彙編時會有C的語句出現,如上printf("hello world");的出現,C與彙編對應起來更容易查詢錯誤所在

4.arm-linux-readelf,此工具可以用來檢視elf格式檔案的資訊,如下

[[email protected] example]$ arm-linux-readelf -a led.elf

ELF Header:

  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 

  Class:                             ELF32

  Data:                              2's complement, little endian

  Version:                           1 (current)

  OS/ABI:                            UNIX - System V

  ABI Version:                       0

  Type:                              EXEC (Executable file)

  Machine:                           ARM

由此資訊可看到,此ELF檔案使用平臺為ARM,採用小端格式儲存資料

arm-linux-readelf還可以用來檢視所需的庫檔案,如下所示

[[email protected] example]$ arm-linux-readelf -d hello

Dynamic section at offset 0x450 contains 24 entries:

  Tag        Type                         Name/Value

 0x00000001 (NEEDED)                     Shared library: [libc.so.6]

 0x0000000c (INIT)                       0x8278

 0x0000000d (FINI)                       0x841c

5.安裝gdb server

安裝arm-linux-gdb後,還需在環境變數中增加其路徑,使用如下命令

gedit ~/.bashrc

然後在其檔案倒數第二行增加如下內容:

export PATH=$PATH:/opt/arm-linux-gdb/bin

注:因為在arm-linux-gcc中同樣含有arm-linux-gdb工具,但此版本(6.8.50)並不能在arm中使用,需要在網上下載更高版本的,而把arm-linux-gdb放在倒數第二行,是因為,我們需要優先使用專門下載的arm-linux-gdb工具,.bashrc最後兩行程式碼如下:

export PATH=$PATH:/opt/arm-linux-gdb/bin
export PATH=$PATH:/home/lu/arm_bin/4.3.2/bin

在呼叫arm-linux-gdb時,同樣會因為作業系統為64位,軟體為32位,出現錯誤,如下

arm-linux-gdb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

使用如下命令安裝所需32位庫即可

yum install xulrunner.i686


6.啟動JLinkGDBServer時同樣會出現錯誤,如下

./JLinkGDBServer: error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or director

在此連結中找到對應庫即可

同樣,啟動JLinkGDBServer時還可能會出現如下錯誤:

[[email protected] JLink_Linux_V434a]# ./JLinkGDBServer 

SEGGER J-Link GDB Server V4.34a

JLinkARM.dll V4.34a (DLL compiled Aug 31 2011 11:51:40)

ERROR: Failed to bind address (Err = 98)

ERROR: Failed to open listener port 2331

Exiting...

這個錯誤,經過本人重新插拔模擬器,重啟系統,重新下載驅動,查詢佔用2331埠的程式並kill它,都沒有解決,最終,經過他人指點,修改45-jlink.rules搞定了,將45-jlink.rules內容全部換為以下程式碼即可(先備份45-jlink.rules)

SUBSYSTEM=="usb", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="010[1234]", MODE="664", GROUP="plugdev"


45-jlink.rules所在路徑為    

/etc/udev/rules.d/45-jlink.rules

最後,將JLinkGDBServer複製到 /usr/bin路徑下,這樣在任何路徑下都能呼叫了 


相關推薦

centos7.2搭建ARM開發環境工具體驗

需要用到的工具: 編譯工具:arm-linux-gcc  連結工具:arm-linux-ld 格式轉換工具:arm-linux-objcopy 反彙編器:arm-linux-objdump 檔案資訊檢視:arm-linux-readelf 下載工具:dnw 除錯工具:ar

Windows下,在IDEA搭建MapReduce開發環境基礎,非詳盡篇)

hadoop在官網下載,jdk在官網下載,自行解壓下載的hadoop包,安裝下載的jdk。 開啟IDEA,新建專案: File->Project Structure: 選擇之前解壓的hadoop資料夾中的share/hadoop目錄下的common

Centos7.2下部署Java開發環境

$path 2.x ava x64 jdk server telnet 選擇 new 1.安裝JDK   如果以前安裝過JDK,想要重新安裝可執行如下命令進行卸載,這裏安裝的是JDK1.8:   先查詢: rpm -qa|grep jdk   然後再通過下面命令進行卸載

在Xcode7搭建Python開發環境

xcode7 python如果你是從IOS開發轉PYTHON,鐘情於Xcode :)說實話,不好用,也許我用的少?======================================在Xcode7中搭建Python開發環境 一、開發環境準備 1、安裝Xcode 2、找到Mac OS X上安裝Pytho

使用 Laragon 在 Windows 搭建 PHP開發環境及常見問題解決

PHP的整合開發環境市面上已經有很多非常成熟好用的整合軟體了,比如WAMP, Xampp, PhpStudy等,如今我發現了另一款非常好用的整合軟體Laragon,可能更有利於新手通過PHP整合開發環境,進行web專案開發。 安裝 我們可以在官網https://laragon

Java基礎面試題(2)----搭建Java開發環境的步驟

問題:簡單說一下Java搭建開發環境的步驟 回答: 1. 安裝對應版本的JDK,配置環境變數。 首先說一下JDK,JRE,JVM的關係 JDK Java Development kit,Java開發者工具包,針對開發者,裡面包含了JRE,JVM,JDK原始碼包

Idea 安裝以及破解 ,以及在Idea搭建PHP開發環境

4. php.ini 中增加一下: zend_extension=php_xdebug-2.6.1-7.1.dll [Xdebug] zend_extension_ts=php_xdebug-2.6.1-7.1.dll ;xdebug.remote_host=

React框架:2搭建React開發環境

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!!!   如何搭建React的開發環境? 1、大前提是電腦已經安裝最新版的node.js環境,可以去官網下載最新的環境。    可參考:Node.js的安裝

在 ubuntu18.04 搭建 Django 開發環境

在Ubuntu 18.04 安裝 python3、pip3、pycharm,搭建 Django 開發環境。 1、安裝 python3 pip3 sudo apt-get install python3 sudo apt-get install python3-pip 2、安裝 pycharm 在官網中

在Ubuntu搭建.NET開發環境

server { listen 30000; server_name localhost; access_log /var/log/nginx/mono.log; location / {

在Visual Studio2015搭建OpenGL開發環境(win10)

一、下載OpenGL的GLUT庫 Windows環境下的GLUT官方下載地址:(蘋果機不需要安裝,自帶) OpenGL全部標頭檔案和庫檔案(不包括顯示卡自帶的) 連結: http://pan.baidu.com/s/1i3YKhBv  密碼:5x5t 二、O

Eclipse搭建MapReduce開發環境

一、安裝Eclipse1、下載-官方網址2、解壓     tar -zxvf eclipse-committers-oxygen-3a-linux-gtk-x86_64.tar.gz3、啟動 (建立桌面快捷方式)        我們可以直接啟動,進入eclipse解壓目錄使用

在sublime text 3搭建Java開發環境

在jdk bin目錄下新建一個bat檔案: 如D:\JAVA\jdk1.8.0_65\bin\runJava.bat @ECHO OFF cd %~dp1 ECHO Compiling %~nx1.

手把手在MyEclipse搭建Hibernate開發環境

在MyEclipse中如何搭建Hibernate開發環境?本文講解一個入門級Demo,希望可以幫助更多的初學者。1、下載對應的Hibernate版本hibernate-release-5.0.7.Fin

在Netbeans搭建Android開發環境

一.安裝NBAandroid外掛 在幾乎所有我查到的教程中,都是說在netbeans中, 但是我試過後發現,怎麼都沒法成功更新,為什麼呢?看這裡我們就明白了. 這是因為更新中心的連結已經失效,我們需要 解壓縮所下載的ZIP檔案,開啟netbeans的Tools->Pl

windows下idea搭建hadoop開發環境,向遠端hadoop叢集提交mapreduce任務

1.下載hadoop2.6.0-cdh5.6.1,解壓並安裝 公司用的hadoop叢集版本是hadoop2.6.0-cdh5.6.1,防止版本衝突,所有的hadoop版本號都用了這個。 下載地址:http://archive.cloudera.com/cdh

ubuntu環境搭建java開發環境(含遇到的錯誤及解決辦法)

一.安裝JDK 方法很多,參考網址http://blog.csdn.net/zth1002/article/details/51383508 即可。 注意這裡,在配置好了環境變數之後,可以不用重啟電腦,可以直接source ~/.bashrc使剛剛的修改直接

關於GNU ARM → GNU MCU Eclipse的強行翻譯——eclipse下搭建arm開發環境_(1)

我先致敬一波大神,總是有人跟我一樣,不是計算機專業卻整天想搞個大新聞首先宣告,本人翻譯在翻譯專業中應稱作意譯,所以有不同意見歡迎討論====================老子就是正文分割線===============================GNU MCU Ecli

在 Xcode 9 搭建 Python 開發環境

環境依賴 macOS、Xcode 9、Python(macOS 預設安裝了 Python2.7)。 ThefirststepThefirststep:建立工程 首先,新建一個 ExternalBuildSystemExternalBuildSystem,如

eclipse開發android-ndk環境工具包及安裝配置方法

一、準備工具包 到網盤下載android相關工具包; 地址:https://pan.baidu.com/s/1kUSRu31 二、安裝 1、安裝eclipse、adt、sdk; 解壓adt-bu