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 -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
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
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教程專為啥都不會的新手使用者打造,放寬心,大膽看,我就是說說書,你就當聽聽故事,輕鬆愉快走進程式設計的大門,“程式設計”不再神祕也不再遙不可及。只要你會最基本的電腦操