树莓派学习笔记——交叉编译工具链
生活随笔
收集整理的這篇文章主要介紹了
树莓派学习笔记——交叉编译工具链
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0.前言
【1】為什么要使用交叉編譯??? 交叉編譯工具較快開發的速度。樹莓派中已經安裝了gcc工具鏈,可在樹莓派中直接編譯源代碼生成可執行文件。于此同時,PC機上也可使用gcc工具鏈生成可執行代碼,但是和樹莓派上的gcc工具不同,PC機上的gcc工具生成intel或amd芯片上可執行的代碼,但樹莓派卻是arm系列的芯片,顯然存在不小的差異。那么使用交叉工具鏈便可在PC機上開發樹莓派中可執行程序。 ????雖然樹莓派的主頻可達700MHz遠高于一般的嵌入式系統,但相比于PC機其性能還是差些,使用交叉工具鏈可節約開發時間。在編譯鏈接同等規模的代碼時,PC機所用的時間應少于樹莓派所用時間,通過交叉編譯的方法提高效率。
【2】PC機環境 ubuntu 14.04 amd64 ? ? 請注意32位系統和64位系統存在差異,請注意博文中相關章節的描述。本文的程序在ubunut 14.04 amd64系統,lubuntu 14.04 i386系統中測試通過(硬盤安裝,非虛擬機環境)。
1.設置交叉工具鏈
【1】下載必要的軟件和工具 ????sudo?apt-get?install?build-essential git【2】clone交叉工具鏈
??? 在home路徑下建立一個文件夾取名為rpi
??? mkdir rpi
??? 進入該目錄并執行clone操作(更正一處錯誤)
? ? cd rpi
? ? git clone git://github.com/raspberrypi/tools.git
??? 請注意clone的時間較長請耐心等待。clone完成之后可進入以下目錄查看工具鏈的具體內容。
????cd ~/rpi/tools/arm-bcm2708/
【特別提醒】 克隆完成之后可以通過pull更新tools cd ~/rpi/tools git pull origin
??? 該目錄中存在4個文件夾,本例使用gcc-linaro-arm-linux-gnueabihf-raspbian?或?gcc-linaro-arm-linux-gnueabihf-raspbian-x64。前者對應32位系統后者對應64位系統。
????arm-bcm2708hardfp-linux-gnueabi??
????gcc-linaro-arm-linux-gnueabihf-raspbian ????arm-bcm2708-linux-gnueabi????????
????gcc-linaro-arm-linux-gnueabihf-raspbian-x64
【3】加入環境環境變量
??? 在/.bashrc文件中加入gcc交叉工具鏈目錄。
??? sudo gedit ~/.bashrc
??? 在該文件最后加入交叉工具鏈所在目錄。請注意~符號表示HOME路徑,.bashrc為隱藏文件。
? ? 【32位系統】 ????export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin ? ? 【64位系統】
????export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
? ? 請注意PATH代表環境變量,:冒號代表追加。 ? ? 保存并退出文件,接著執行以下指令以便立即更新當前控制臺所包含的環境變量。
????source?.bashrc
【4】簡單測試
??? 為了測試交叉工具鏈是否安裝成功,可在控制臺中輸入
????arm-linux-gnueabihf-gcc -v ??? 控制臺中輸出內容如下,次步驟可證明交叉工具鏈安裝完成且環境變量設置無誤。
圖1?arm-linux-gnueabihf-gcc版本信息
2.簡單的例子
??? 編寫一個測試文件,在PC機上完成編譯然后通過FTP上傳到樹莓派中并執行。? ? 【測試代碼】 ? ? 文件名為hello-world.c,該例子僅測試交叉編譯是否成功并簡單測試了浮點數功能。
[cpp]?view plaincopy
? ? 【交叉編譯——簡單指令】
??? cd進入hello-world.c所在目錄,輸入以下指令以生成可執行文件。請注意該可執行文件不能在PC機上運行。 ????arm-linux-gnueabihf-gcc?hello-world.c -o hello-world ??? 最終可在hello-world.c的同目錄中生成hello-world可執行文件。
? ? 【交叉編譯——makefile】
??? 當然也可在該目錄下建立makefile文件,簡單的makefile文件如下
[plain]?view plaincopy
??? 在makefile文件中使用了至少兩條隱含規則,CC為默認工具鏈;*.o文件由同名的*.c文件生成。
??? 那么在控制臺中輸入make即可生成可執行文件。
? ? 【FTP上傳】 ??? 可在ubuntu中安裝filezilla軟件,該軟件具有ubuntu版本可通過ubuntu軟件中心直接安裝。ubuntu版本和windows使用方法相同。
圖2 使用FileZilla上傳文件
? ? 【SSH登陸執行】
??? 假設raspberry的IP地址為192.168.1.107,可使用以下指令登陸raspberry
??? ssh pi@192.168.1.107
??? 登陸之后進入可執行文件所在目錄,修改該文件的執行權限。
??? sudo chmod 755 hello-world
??? 該文件的所有者為pi,所有者pi對于該可執行文件具有可寫可讀可執行權限(7),755中的后兩個55為可讀與可執行,本例中對于hello-world用處不大。
??? 輸入以下指令便可運行該文件
??? ./hello-world
??? 控制臺輸出結果,至此可完全證明交叉工具鏈工作正常。
圖3 樹莓派中執行結果
3.總結
??? 最近也時工作需要重新學習了交叉工具鏈的安裝和使用。網上閱讀了很多關于樹莓派交叉工具鏈的資料,反復嘗試總是出現問題,可能為樹莓派版本和交叉工具鏈版本差異產生的問題。希望這篇博文可以幫助各位,如果存在問題請留言。《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的树莓派学习笔记——交叉编译工具链的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lisp语言: 在Windows下搭建C
- 下一篇: 树莓派linux驱动学习之LED控制