歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下搭建樹莓派交叉編譯環境

Linux下搭建樹莓派交叉編譯環境

日期:2017/2/28 13:49:08   编辑:Linux教程

本學期選了嵌入式開發課程,所以第一步就是要准備環境。硬件環境自不必說,購買了樹莓派二代、sd卡,讀卡器、路由器、網線這些都是以前就有的。軟件環境的搭建包括如下幾步:

1.搭建虛擬機Linux環境

2.燒錄樹莓派系統

3.在虛擬機Linux環境中搭建本地開發與編譯環境

4.在虛擬機Linux上搭建交叉編譯環境

5.開發一段簡單的程序,通過本地編譯後,再進行交叉編譯。之後將編譯好的程序放到樹莓派上執行進行測試。

具體步驟:

1.搭建虛擬機Linux

理論上說,在windows環境下如果也能找到滿足要求的交叉編譯工具鏈,那麼也可以不裝Linux。但是考慮到windows環境下的工具比較難找,而且嵌入式系統本身也是基於Linux的特定版本,進行交叉編譯時在兼容性上更不容易出現問題,所以還是需要先安裝一個Linux環境。我采用的是virtualbox虛擬機軟件。virtualbox是一個輕量級的虛擬機軟件,安裝起來比較方便,使用中也還算穩定。安裝過程很簡單,此處略過。在virtualbox中加載Ubuntu安裝鏡像文件*.iso,啟動後安裝,過程略。

2.燒錄樹莓派的映像文件,使之可以正常啟動。

根據手冊的說明,需要將從樹莓派官網下載的系統映像文件raspbian-jessie.img 燒錄到sd卡上,以使樹莓派可以正常使用。在這裡我開始犯了一個錯誤。想到燒錄文件,習慣性的采用了windows下的常用軟件ultraiso,燒錄完成後插到樹莓派上加電。沒有任何輸出,讓我一度不知道哪裡出錯。後來嚴格按照手冊裡說的Linux命令:sudo dd if=raspbian-jessie.img of=/dev/sdb bs=2M 進行燒錄,系統可以正常啟動了。

分析:ultraiso屬於文件刻錄的性質,但其並不改變卡/磁盤的分區結構。所以刻錄完的sd卡分區格式不符合要求。而dd命令屬於塊數據輸出,在燒錄數據的同時也變更了sd卡的分區格式。

此外,此步驟還發生了一點意外。開始我燒錄了一個不帶桌面的精簡版系統。當使用sudo apt-get install lxde命令添加桌面時,報空間不足,無法安裝。於是重新燒錄標准版,但啟動到一半時系統中斷死機。在想不出理由的情況下,使用sudo fdisk刪除sd卡上所有分區,重新燒錄,終於成功了。

系統啟動後,需要考慮的是主機與目標機的連接問題。樹莓派系統默認是開著ssh服務的。所以當用網線連接到路由器,並獲得ip後,用命令ssh [email protected]是可以連接目標機的。但考慮到有圖形界面還是要更方便一些。於是安裝vnc服務,方法是命令:sudo apt-get install tightvncserver ,之後執行tightvncserver即開啟了vnc遠程桌面服務。此時用vnc客戶端工具即可進行可視化操作。

3.在Linux下搭建本地開發環境

通常Linux的大多數發行版默認包含gcc等工具,但為了方便,我們也可以安裝eclipse的Linux版本。使用此類IDE工具可以提高開發效率。

方法是,在Linux下執行 sudo apt-get install eclipse

安裝完成後可以看到eclipse的啟動圖標。正常情況下可以順利啟動eclipse。此時的eclipse默認是java開發環境,為了開發c程序,我們還需要增加一些插件。方法是:在eclipse的help-install new software菜單中指定網址:http://download.eclipse.org/releases/indigo ,選擇collaboration-Mylyn Context Connector: c/c++ Development,這樣就把開發c/c++項目的插件安裝上了。之後還需要執行一下sudo apt-get install build-essential,把編譯環境需要用到的文件裝上。就完成了本地開發環境的搭建。

正常啟動eclipse後,可以在new 菜單中看到c/c++項目,如下圖

4.搭建交叉編譯環境

通常網上已有經過驗證的交叉編譯工具鏈,需要下載下來即可。首先安裝git工具:sudo apt-get install git,之後下載:git clone git://github.com/raspberrypi/tools.git

等待下載完成,即可看到包含了若干種類的編譯工具。我的Linux是64位版本,所以使用gcc-linaro-arm-Linux-gnueabihf-raspbian-x64/bin/arm-Linux-gnueabihf-gcc即可。

加入環境變量,編輯.bashrc文件,在末尾加入export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-Linux-gnueabihf-raspbian-x64/bin

實驗例子,寫一段c代碼

本地執行成功,之後進行交叉編譯:

arm-Linux-gnueabihf-gcc tst.c –o tst 生成tst執行文件,傳輸到目標平台:

sftp [email protected] 連接後,用put /home/xx/workspace/rr/tst /home/pi/tst

執行成功

5.直接使用eclipse進行目標平台編譯

使用手工方式(寫c代碼、寫makefile文件、手工編譯等)還是比較繁瑣的,另外也容易出錯。既然集成開發環境可以編譯本地代碼,自然也可以進行交叉編譯。於是經過一番探索,完成了這個步驟。

首先在項目屬性的c/c++ Build的Settings菜單中,點Manage Configurations,增加一項新配置(我這裡起名ARM)並激活,修改GCC C Compiler和GCC C Linker中的命令,采用前面提到過的arm-Linux-gnueabihf-gcc。注意此處用了絕對路徑,因為之前加環境變量PATH是加到了bash.rc中,如果加到.profile中就不用這麼麻煩了。

之後,Project-Build All,成功。

Copyright © Linux教程網 All Rights Reserved