1. 程式人生 > >ARM體系架構--Ubuntu開發環境,gcc工具鏈的使用

ARM體系架構--Ubuntu開發環境,gcc工具鏈的使用

配置交叉工具鏈:


1,解壓交叉工具鏈:
mkdir /usr/local/arm
chmod 777 /usr/local/arm
tar -jxvf toolchain-4.5.1.tar.bz2  -C /usr/local/arm/


2,設定環境變數path
vim ~/.bashrc
export PATH=$PATH:/usr/local/arm/toolchain-4.5.1/bin


3,source ~/.bashrc  // 更新該檔案


[email protected]:~$ arm-none-linux-gnueabi-
arm-none-linux-gnueabi-addr2line  arm-none-linux-gnueabi-gcc        arm-none-linux-gnueabi-objcopy
arm-none-linux-gnueabi-ar         arm-none-linux-gnueabi-gcc-4.5.1  arm-none-linux-gnueabi-objdump
arm-none-linux-gnueabi-as         arm-none-linux-gnueabi-gccbug     arm-none-linux-gnueabi-populate
arm-none-linux-gnueabi-c++        arm-none-linux-gnueabi-gcov       arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-cc         arm-none-linux-gnueabi-gprof      arm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-c++filt    arm-none-linux-gnueabi-ld         arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-cpp        arm-none-linux-gnueabi-ldd        arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-g++        arm-none-linux-gnueabi-nm         arm-none-linux-gnueabi-strip


預編譯
[email protected]
:~/arm/test$ gcc -E test.c -o test.i
編譯
[email protected]:~/arm/test$ gcc -S test.i -o test.s
[email protected]:~/arm/test$ arm-none-linux-gnueabi-gcc -S test.i -o test_arm.s
彙編
[email protected]:~/arm/test$ gcc -c test.s -o test.o
連線:
ld /usr/lib/i386-linux-gnu/crt1.o /usr/lib/i386-linux-gnu/crti.o /usr/lib/i386-linux-gnu/crtn.o test.o -o test -lc -dynamic-linker /lib/ld-linux.so.2




[email protected]
:~/arm/test$ readelf -h test
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:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x80482c0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          1596 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         7
  Size of section headers:           40 (bytes)
  Number of section headers:         24
  Section header string table index: 21


[email protected]
:~/arm/test$ size test
   text    data     bss     dec     hex filename
    838     232       0    1070     42e test


[email protected]:~/arm/test$ nm test
08049468 d _DYNAMIC
08049534 d _GLOBAL_OFFSET_TABLE_
08048394 R _IO_stdin_used
08049550 A __bss_start
0804954c D __data_start
         w __gmon_start__
08048372 T __i686.get_pc_thunk.bx
08049468 d __init_array_end
08049468 d __init_array_start
08048370 T __libc_csu_fini
08048300 T __libc_csu_init
         U [email protected]@GLIBC_2.0
08049550 A _edata
08049550 A _end
08048378 T _fini
08048390 R _fp_hw
08048254 T _init
080482c0 T _start
0804954c W data_start
080482e4 T main
         U [email protected]@GLIBC_2.0




strip: 瘦身, 將一些不必要的段去掉
[email protected]:~/arm/test$ ls -lh test
-rwxrwxr-x 1 george_JI george_JI 3.5K Mar 13 20:03 test
[email protected]:~/arm/test$ strip test
[email protected]:~/arm/test$ ls -lh test
-rwxrwxr-x 1 george_JI george_JI 2.5K Mar 13 20:14 test


objdump: 檢視反彙編程式碼
objdump -D test > test.dis


arm-none-linux-gnueabi-objdump -D test_arm > test_arm.dis


147 00008304 <_start>:
148     8304:       e3a0b000        mov     fp, #0
149     8308:       e3a0e000        mov     lr, #0




objcopy : 格式轉換, 將elf格式轉換成bin檔案


arm-none-linux-gnueabi-objcopy -O binary test_arm test_arm.bin




有檔案需要編譯: start.S , ledc.c
arm-none-linux-gnueabi-gcc -c start.S -o start.o
arm-none-linux-gnueabi-gcc -c ledc.c -o ledc.o
arm-none-linux-gnueabi-ld -Ttext 0x40008000 start.o ledc.o -o led_elf
arm-none-linux-gnueabi-objdump -D led_elf > led_elf.dis
arm-none-linux-gnueabi-objcopy -O binary led_elf led_elf.bin


非常簡單Makefile
all : led_elf.bin
led_elf.bin : start.S ledc.c
        arm-none-linux-gnueabi-gcc -c start.S -o start.o
        arm-none-linux-gnueabi-gcc -c ledc.c -o ledc.o
        arm-none-linux-gnueabi-ld -Ttext 0x40008000 start.o ledc.o -o led_elf
        arm-none-linux-gnueabi-objdump -D led_elf > led_elf.dis
        arm-none-linux-gnueabi-objcopy -O binary led_elf led_elf.bin


clean :
        rm -rf *.o *.bin *_elf *.dis *.swp *.tgz




稍微完善一點:
CROSS_COMPILE = arm-none-linux-gnueabi-


TARGET = led_test
OBJS = start.o ledc.o




all : $(TARGET)


$(TARGET) : $(OBJS)
        $(CROSS_COMPILE)ld -Ttext 0x40008000 $(OBJS) -o $(TARGET)
        $(CROSS_COMPILE)objdump -D $(TARGET) > $(TARGET).dis
        $(CROSS_COMPILE)objcopy -O binary $(TARGET) $(TARGET).bin




%.o : %.c
        $(CROSS_COMPILE)gcc -c $^ -o [email protected]


%.o : %.S
        $(CROSS_COMPILE)gcc -c $^ -o [email protected]


%.o : %.s
        $(CROSS_COMPILE)gcc -c $^ -o [email protected]


clean :
        rm -rf $(OBJS) $(TARGET) *.bin *_elf *.dis *.swp *.tgz




連線指令碼*.lds, 用於規定目標檔案中各個段分佈


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)  // 入口函式
SECTIONS // 描述各個段
{
. = 0x40008000;  // . 表示當前 第一條指令的位置0x40008000;
. = ALIGN(4);   // ALIGN(4)並且儲存在這裡的指令資料都是4位元組對齊
.text      :  // 目標檔案中.text : {   *所有被連線elf檔案的text()}
{
start.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : 
{ *(.rodata) }
    . = ALIGN(4);
    .data : 
{ *(.data) }
    . = ALIGN(4);
    .bss :
     { *(.bss) }
}


如果要使用連線指令碼:
$(CROSS_COMPILE)ld -Tmap.lds $(OBJS) -o $(TARGET)

相關推薦

ARM體系架構--Ubuntu開發環境gcc工具的使用

配置交叉工具鏈: 1,解壓交叉工具鏈: mkdir /usr/local/arm chmod 777 /usr/local/arm tar -jxvf toolchain-4.5.1.tar.bz2  -C /usr/local/arm/ 2,設定環境變數path vim ~/.bashrc export P

打造完美自用Ubuntu 18.04 開發環境解決qq微信網易雲

先上最終圖,下面是具體步驟 嘮叨幾句:桌布是新恆結衣,為canon代言,自己修改的字型用的也是canon字型;dock沒動,純粹仿造不如去買mac,省時省力;自用電腦是vn7一代的,坑爹的鍵盤加上沒有指示燈,所以特意找到了大小寫指示器,步驟下都會講到;本來是記

Ubuntu開發環境搭建

rect android源碼 andro deb nload 4.2 tab file blue VM及Utuntu安裝 Vmware安裝/Ubuntu安裝 Vmware環境配置 安裝Vmware-tools: tar -xf xxx.tar.gz sudo

關於IDE集成開發環境Pycharm小技巧

技術 插件 開發環境 studio eclipse class 技巧 bsp nbsp IDE:集成開發環境(Integrated Development Environment) 市面上有:   VIM:經典的linux下的文本編輯器。   Emacs:linux下的文本

Ubuntu 編譯 ARM-Linux-Gcc 工具 -- 通過crosstool-NG制作工具

rac export 項目 isa 查看 col pat ftp 芯片 1.手動下載制作過程中所需要的包,節省時間 所用包如下(不同版本所有包版本有所不同) libtool-2.4.6 linux-3.2.87 gmp-6.1.2 mpfr-3.1.5 i

Ubuntu 編譯 ARM-Linux-Gcc 工具 -- 安裝crosstool-NG

oss con 配置 ons efi wget port inux tar 一、安裝crosstool-NG 1、建立arm-linux-tools目錄,並進入該目錄 $ mkdir arm-linux-tools $ cd arm-linux-tools

angular4的多環境(測試環境開發環境生產環境

mage gpo 多環境 png div info 環境 生產環境 AR 使生成項目可以多環境運行(測試環境與開發環境,生產環境) 這裏對應的是不同的運行環境,隨時通過上面的方式進行切換 同樣著也可以用在部署環境上面、、這個表式編譯生成生產環境的微信號

不需要安裝任何開發環境在瀏覽器裡面就能線上練習31種程式語言

如果有一天心血來潮,想試試和看看新的語言如何使用,總不可能每個開發環境都裝一套吧,而且有的開發環境還不太好裝,而且必須在特定的裝置下面才能使用,比如蘋果(Apple)公司的Swift語言. 就有下面的程式語言: Asm BCPL Bash C (clan

我的 ubuntu 開發環境配置

系統更新 sudo apt-get update && sudo apt-get upgrade git 安裝 $ apt install git 配置 $ git config –g

Linux下搭建PHP開發環境Php-Fpm程序管理。

目前PHP專案開發幾種比較流行的架構搭建中,LNMP在效能方面是最好的,正因為如此,使得LNMP架構逐漸流行起來,今天,前面提到了Nginx部署,由於專案實際環境的需要,今天就在說一下怎麼部署PHP。 環境 CentOS 6.3 PHP 5.6 安裝步驟 1. 下載並安裝P

eclipse配置ant開發環境一鍵部署專案

  ANT出現之前,編譯和部署Java應用需要使用包括特定平臺的指令碼、Make檔案、不同的IDE以及手工操作等組成的大雜燴。現在,幾乎所有的開源Java專案都在使用Ant,許多公司的開發專案也在使用Ant。Ant的大量使用,也自然帶來了對總結Ant最佳實踐的迫切需求。   

Angular6 配置專案開發環境測試環境生產環境

搜過很多文章說的都是關於Angular4的配置,後面自己又找了許多資料,最後總結了Angular6 如何配置開發環境,測試環境,生產環境: 1、在environments資料夾裡新建三個檔案: //生產環境 environment.prod.ts: export const enviro

海思Hi3519A初體驗(升級DEMO板開發環境更新CPU主頻)

拿到手的3519A demo板已經燒好了uboot,沒有核心和檔案系統,同時uboot也不是最新的。 所以需要先升級demo版的開發環境,即燒寫 uboot、kernel、fs,這部分按照手冊操作即可。 這裡需要提一下,板子自帶的uboot,CPU主頻是1200MHz,最新版已經支援1500

laravel 本地整合開發環境路由訪問The requested URL /welcome was not found on this server.

問題描述:新增根目錄以外的其他路徑無法訪問,提示: The requested URL /welcome was not found on this server. 經過搜尋找到問題根源,和使用的本地整合開發環境有關,在一下網址找到解決辦法,但具體原理不太清楚。 按照下

學習大資料的第一步-搭建Scala開發環境以及使用Intellij IDEA開發Scala程式

1、為什麼要學習Scala語言? 結合Spark處理大資料 這是Scala的一個主要應用,而且Spark也是那Scala寫的。 Java的指令碼語言版 可以直接寫Scala的指令碼,也可以在.sh直接使用Scala。 代替Java Sca

【scala程式設計】學習大資料的第一步-搭建Scala開發環境以及使用Intellij IDEA開發Scala程式

1、為什麼要學習Scala語言?結合Spark處理大資料 這是Scala的一個主要應用,而且Spark也是那Scala寫的。Java的指令碼語言版 可以直接寫Scala的指令碼,也可以在.sh直接使用Scala。代替Java Scala的程式設計風格更簡潔,當然也很可能降低可

Windows 搭建msys2+mingw32開發環境編譯安裝vlc

官網的幫助文件:Win32CompileMSYS 介紹 這個就不說了 安裝Windows工具 我使用了nodepad++和winrar,設定如下: 顯示行尾符:檢視->顯示符號->顯示行尾符 設定為unix行尾符:編輯->

深入體驗bash on windows在windows上搭建原生的linux開發環境酷!

今年微軟Build 2016大會最讓開發人員興奮的訊息之一,就是在Windows上可以原生執行Linux bash,對開發人員來說,這是一個喜聞樂見的訊息。 1 安裝 你必須安裝開發者預覽版本,才能使用windows的linux subsystem功能。 首先開啟你的Wi

ubuntu 使用g++gcc

1.指令vi yu.cpp       建立一個.cpp檔案,在檔案中編輯需要的程式碼       按I開始輸入, 輸完後按Esc,再輸入:wq儲存退出, 2.指令:g++ -c filename.cpp(當前路徑.cpp檔案)    // 只編譯,不連結,生成.o 檔案

零基礎新手的Python入門實戰寶典(二) —— 從哪裡開始?(搭建Python開發環境Python + Pycharm)

如果你之前看過其他教程,但是發現雲裡霧裡複雜的讓你頭暈眼花的話,沒錯,看這裡,本系列Python教程專為啥都不會的新手使用者打造,放寬心,大膽看,我就是說說書,你就當聽聽故事,輕鬆愉快走進程式設計的大門,“程式設計”不再神祕也不再遙不可及。只要你會最基本的電腦操