玩轉開發板之交叉編譯器安裝

2021-07-24 06:50:10 字數 3891 閱讀 7665

玩轉開發板之交叉編譯器安裝

在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的**,我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在乙個平台上生成另乙個平台上的可執行**。這裡需要注意的是所謂平台,實際上包含兩個概念:體系結構(architecture)、作業系統(operating system)。同乙個體系結構可以執行不同的作業系統;同樣,同乙個作業系統也可以在不同的體系結構上執行。舉例來說,我們常說的x86 linux平台實際上是intel x86體系結構和linux for x86作業系統的統稱;而x86 winnt平台實際上是intel x86體系結構和windows nt for x86作業系統的簡稱。

有時是因為目的平台上不允許或不能夠安裝我們所需要的編譯器,而我們又需要這個編譯器的某些特徵;有時是因為目的平台上的資源貧乏,無法執行我們所需要編譯器;有時又是因為目的平台還沒有建立,連作業系統都沒有,根本談不上執行什麼編譯器。

一、交叉編譯器介紹

交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。我們常用的計算機軟體,都需要通過編譯的方式,把使用高階計算機語言編寫的**(比如c**)編譯(compile)成計算機可以識別和執行的二進位制**。比如,我們在windows平台上,可使用visual c++開發環境,編寫程式並編譯成可執行程式。這種方式下,我們使用pc平台上的windows工具開發針對windows本身的可執行程式,這種編譯過程稱為native compilation,中文可理解為本機編譯。然而,在進行嵌入式系統的開發時,執行程式的目標平台通常具有有限的儲存空間和運算能力,比如常見的 arm 平台,其一般的靜態儲存空間大概是16到32mb,而cpu的主頻大概在100mhz到500mhz之間。這種情況下,在arm平台上進行本機編譯就不太可能了,這是因為一般的編譯工具鏈(compilation tool chain)需要很大的儲存空間,並需要很強的cpu運算能力。為了解決這個問題,交叉編譯工具就應運而生了。通過交叉編譯工具,我們就可以在cpu能力很強、儲存控制項足夠的主機平台上(比如pc上)編譯出針對其他平台的可執行程式。 

要進行交叉編譯,我們需要在主機平台上安裝對應的交叉編譯工具鏈(cross compilation tool chain),然後用這個交叉編譯工具鏈編譯我們的源**,最終生成可在目標平台上執行的**。常見的交叉編譯例子如下: 

1、在windows pc上,利用ads(arm 開發環境),使用armcc編譯器,則可編譯出針對arm cpu的可執行**。

2、在linux pc上,利用arm-linux-gcc編譯器,可編譯出針對linux arm平台的可執行**。 

3、在windows pc上,利用cygwin環境,執行arm-elf-gcc編譯器,可編譯出針對arm cpu的可執行**。

二、交叉編譯器安裝以及測試

1.準備交叉編譯器原始碼包

首先進入**我們會發現很多版本,我們找到build-root-2012.08.tar.bz2,複製鏈結。

然後我們進入虛擬機器,進行如下操作。

[wangchao2@localhost opt]$chmod  777  /opt  #設定opt的許可權

[wangchao2@localhost opt]$wget  build-root-2012.08.tar.bz2 #獲取壓縮包檔案

[wangchao2@localhost opt]$tar -xjf   build-root-2012.08.tar.bz2#解壓壓縮包檔案

[wangchao2@localhost opt]$cd    build-root-2012.08

[wangchao2@localhost build-root-2012.08]$ls

2.開始配置編譯安裝

[wangchao2@localhost build-root-2012.08] $ export term=vt100 防止make menuconfig出現亂碼

[wangchao2@localhost build-root-2012.08]$ make menuconfig 進行builroot配置

[wangchao2@localhost build-root-2012.08]$ make 

編譯的過程中可能會提示缺少某些命令(譬如g++,makeinfo,ncurses),這時就使用yum或rpm命令安裝缺少的相應rpm包。

buildroot-2012.08 make menuconfig 選項配置說明

********************===

target architecture (arm (little endian)) --->

target architecture variant (arm920t) ---> 根據自己的cpu來選擇

target abi (eabi) --->

build options --->

($(topdir)/dl) download dir

($(topdir)/arm920t) host dir

[*] prefer static libraries

其它選項都不要選,如果是要設定值的地方就使用預設值

toolchain ---> 

kernel headers (linux 2.6 (manually specified version)) --->

(2.6.37) linux version 選定核心版本為2.6.37

... ...

[*] enable compiler tls support 

[*] enable mmu support

[*] use software floating point by default

[*] enable large file (files > 2 gb) support

[*] enable ipv6 support

[*] enable rpc support

[*] enable wchar support

[*] enable c++ support 

其它選項都不要選,如果是要設定值的地方就使用預設值

system configuration ---> 

init system (none) ---> 把busbyox編譯去掉

這裡面所有的都不要選,如果是要設定值的地方就使用預設值

package selection for the target --->

這裡面所有的選項都不要選,除了:

libraries --->

compression and decompression --->

[*] lzo

-*- zlib

host utilities --->

這裡面所有的選項都不要選

filesystem images --->

這裡面所有的選項都不要選

bootloaders --->

這裡面所有的選項都不要選

kernel ---

這裡面所有的選項都不要選

3.交叉編譯器測試

首先我們先寫乙個hello.程式

#include

int main()

然後我們用交叉編譯器來編譯這個c檔案,然後用file命令檢視檔案屬性,會看到這個檔案在arm下執行,就代表配置完成,具體如下:

[wangchao2@localhost ~]$ /home/wangchao2/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc hello.c -o hello

[wangchao2@localhost ~]$ file hello

hello: elf 32-bit lsb executable, arm, version 1 (sysv), dynamically linked (uses shared libs), not stripped

[wangchao2@localhost ~]$

ubuntu安裝交叉編譯器 安裝交叉編譯器

2 安裝方法二 1 安裝方法一 開啟ubuntu終端 使用sudo apt list gcc arm 可以檢視所有的交叉編譯器,假設安裝gcc arm linux gnueabihf,則使用sudo apt get install gcc arm linux gnueabihf就裝好了。參考 2 安...

ARM交叉編譯器安裝

安裝arm交叉編譯器 zshh shaohua arm arm資料 cd exynos4412 lzy1 zshh zshh shaohua arm arm資料 exynos4412 lzy1 ls cross compile datasheet doc images rootfs schemati...

安裝GCC交叉編譯器

照著這個文件安裝 2.解壓,並放置在自己需要的資料夾內 1 sudo tar zxvf gcc linaro arm linux gnueabihf 4.9.tar.gz 3.配置環境變數path 1.編輯bash.bashrc檔案 1 sudo gedit bashrc 2.在檔案中新增變數 1 ...