天天看點

樹莓派12:交叉編譯的概念,交叉編譯工具鍊安裝,項目運作

交叉編譯的概念,工具鍊安裝,項目運作

1.交叉編譯的概念:

交叉編譯是什麼?

編譯:是在一個平台上生成該平台上的可執行代碼

交叉編譯: 是在一個平台上生成另一個平台上的可執行代碼。

(我們在windows上面編寫C51代碼,并編譯成可執行代碼,xx.hex,但在c51上面運作,不在windows上運作)

(我們需要在linux上面編寫樹莓派代碼,并編譯成可執行代碼,如:a.out,但在樹莓派上運作,不在linux上運作)

C51,STM32:交叉編譯發生在keil(內建環境上面)

既然我們已經有了主機編譯器,那為什麼還要交叉編譯呢?

有時是因為目的平台上不允許或不能夠安裝我們所需要的編譯器,

比如:C51

1.因為目的平台上的資源貧乏,無法運作我們所需要編譯器

2.因為目的平台還沒有建立,連作業系統都沒有,根本談不上運作什麼編譯器。作業系統也是代碼,也要編譯。

既然可以交叉編譯,那還要主機編譯幹嗎?

交叉編譯是不得已而為之!與主機編譯相比,交叉編譯受的限制更多,雖然在理論上我們可以做任何形式的交叉編譯,但事實上,由于受到專利、版權、技術的限制,并不總是能夠進行交叉編譯,尤其是在業餘條件下!舉例來說,我們至今無法生成惠普公司專有的som格式的可執行檔案,是以我們根本無法做目的平台為HPPA-HPUX的交叉編譯。

平台運作需要至少兩樣東西:

bootloader(啟動引導代碼)以及作業系統核心

主控端(host) :編輯和編譯程式的平台,一般是基于X86的PC機,通常也被稱為主機。

目标機(target):使用者開發的系統,通常都是非X86平台。host編譯得到的可執行代碼在target上運作。

交叉編譯需要用到的工具?

交叉編譯器(交叉編譯工具鍊)

2.樹莓派(或者其它平台)交叉編譯工具鍊的安裝

交叉編譯工具鍊的安裝

舉例:使用keil進行編譯的時候需要對交叉編譯器(交叉編譯工具鍊)進行選型,C51,STM32;

代碼的移植性高:是指一段代碼編譯後可以在不同的平台上運作;比如:C51,STM32,代碼的修改部分不是很多

我們需要用到樹莓派的交叉工具鍊:

下載下傳網址:

樹莓派交叉編譯工具鍊

tools----code

将Windows下的壓縮包拉至Linux下,并移動到建好的pi檔案夾

//也可以從共享檔案夾拷貝到工作目錄

在終端執行以下操作:

cd pi       //進入檔案夾,
ls          //顯示 tools-master.zip
unzip tools-master  //解壓檔案夾
。。。      //等待
cd tools-master
ls   //顯示檔案夾
cd arm-bcm2708  
ls
cd gcc-linaro-arm-linux-gnueabihf-raspbian//選擇32位編輯器
ls
cd bin
ls   //可以看到一堆綠色的可執行檔案
./arm-linux-gnueabihf-gcc -v //去執行該檔案
//---------------過程太過繁瑣
//1.臨時有效:配置環境變量
//PATH 環境變量:目的是省去敲寫前面的亂七八糟的檔案夾
echo $PATH  //接下來配置環境變量
pwd  //顯示目前絕對路徑
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dazai/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
  //配置環境變量
 cd      //回到根目錄
 arm-linux-gnueabihf-gcc -v  //用來編譯樹莓派可執行檔案
 //二gcc是用來編譯本地可執行檔案
 //之是以是臨時,是因為如果你再打開一個終端視窗,就木得了
2.永久有效:修改.bashrc 隐藏檔案
修改工作目錄下的.bashrc 隐藏檔案,配置指令終端的
//在根目錄下:cd
vi .bashrc   //或者
gedit .bashrc
//将:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dazai/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
//放到106行的fi下面
//之後儲存退出
source .bashrc   //使其生效
//之後再打開任何一個終端視窗都含有(認識):arm-linux-gnueabihf-gcc


           

至此,樹莓派編輯器(交叉編譯工具鍊),安裝完成。

3.交叉編譯伺服器用戶端:

一個簡單的程式:

#include <stdio.h>
int main()
{
	printf("hello\n");
	return 0;
}
           
gcc text.c -o text_1//編譯
file text_1   //檢視編譯後的檔案可執行在哪些系統上
           
樹莓派12:交叉編譯的概念,交叉編譯工具鍊安裝,項目運作

怎樣把text.c放到樹莓派上去運作,我們用到交叉編譯工具:

arm-linux-gnueabihf-gcc text.c -o text_2
file text_2
           
樹莓派12:交叉編譯的概念,交叉編譯工具鍊安裝,項目運作

将text_2可執行檔案複制到樹莓派作業系統

linux終端下:

scp text_2 [email protected]:   //注意: 後面跟路徑,可以不寫
//密碼:raspberry
           

樹莓派作業系統下:

樹莓派12:交叉編譯的概念,交叉編譯工具鍊安裝,項目運作

通過以上交叉編譯,可實作将上位機書寫的程式編譯成樹莓派能夠運作的可執行程式。

繼續閱讀