日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

树莓派学习笔记——交叉编译工具链

發(fā)布時(shí)間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派学习笔记——交叉编译工具链 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0.前言

【1】為什么要使用交叉編譯
??? 交叉編譯工具較快開(kāi)發(fā)的速度。樹(shù)莓派中已經(jīng)安裝了gcc工具鏈,可在樹(shù)莓派中直接編譯源代碼生成可執(zhí)行文件。于此同時(shí),PC機(jī)上也可使用gcc工具鏈生成可執(zhí)行代碼,但是和樹(shù)莓派上的gcc工具不同,PC機(jī)上的gcc工具生成intel或amd芯片上可執(zhí)行的代碼,但樹(shù)莓派卻是arm系列的芯片,顯然存在不小的差異。那么使用交叉工具鏈便可在PC機(jī)上開(kāi)發(fā)樹(shù)莓派中可執(zhí)行程序。 ????雖然樹(shù)莓派的主頻可達(dá)700MHz遠(yuǎn)高于一般的嵌入式系統(tǒng),但相比于PC機(jī)其性能還是差些,使用交叉工具鏈可節(jié)約開(kāi)發(fā)時(shí)間。在編譯鏈接同等規(guī)模的代碼時(shí),PC機(jī)所用的時(shí)間應(yīng)少于樹(shù)莓派所用時(shí)間,通過(guò)交叉編譯的方法提高效率。

【2】PC機(jī)環(huán)境 ubuntu 14.04 amd64 ? ? 請(qǐng)注意32位系統(tǒng)和64位系統(tǒng)存在差異,請(qǐng)注意博文中相關(guān)章節(jié)的描述。本文的程序在ubunut 14.04 amd64系統(tǒng),lubuntu 14.04 i386系統(tǒng)中測(cè)試通過(guò)(硬盤(pán)安裝,非虛擬機(jī)環(huán)境)。

1.設(shè)置交叉工具鏈

【1】下載必要的軟件和工具 ????sudo?apt-get?install?build-essential git
【2】clone交叉工具鏈
??? 在home路徑下建立一個(gè)文件夾取名為rpi
??? mkdir rpi
??? 進(jìn)入該目錄并執(zhí)行clone操作(更正一處錯(cuò)誤)
? ? cd rpi
? ? git clone git://github.com/raspberrypi/tools.git
??? 請(qǐng)注意clone的時(shí)間較長(zhǎng)請(qǐng)耐心等待。clone完成之后可進(jìn)入以下目錄查看工具鏈的具體內(nèi)容。
????cd ~/rpi/tools/arm-bcm2708/
【特別提醒】 克隆完成之后可以通過(guò)pull更新tools cd ~/rpi/tools git pull origin
??? 該目錄中存在4個(gè)文件夾,本例使用gcc-linaro-arm-linux-gnueabihf-raspbian?或?gcc-linaro-arm-linux-gnueabihf-raspbian-x64。前者對(duì)應(yīng)32位系統(tǒng)后者對(duì)應(yīng)64位系統(tǒng)。
????arm-bcm2708hardfp-linux-gnueabi??
????gcc-linaro-arm-linux-gnueabihf-raspbian ????arm-bcm2708-linux-gnueabi????????
????gcc-linaro-arm-linux-gnueabihf-raspbian-x64
【3】加入環(huán)境環(huán)境變量
??? 在/.bashrc文件中加入gcc交叉工具鏈目錄。
??? sudo gedit ~/.bashrc
??? 在該文件最后加入交叉工具鏈所在目錄。請(qǐng)注意~符號(hào)表示HOME路徑,.bashrc為隱藏文件。
? ? 【32位系統(tǒng)】 ????export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin ? ? 【64位系統(tǒng)】
????export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
? ? 請(qǐng)注意PATH代表環(huán)境變量,:冒號(hào)代表追加。 ? ? 保存并退出文件,接著執(zhí)行以下指令以便立即更新當(dāng)前控制臺(tái)所包含的環(huán)境變量。
????source?.bashrc

【4】簡(jiǎn)單測(cè)試
??? 為了測(cè)試交叉工具鏈?zhǔn)欠癜惭b成功,可在控制臺(tái)中輸入
????arm-linux-gnueabihf-gcc -v ??? 控制臺(tái)中輸出內(nèi)容如下,次步驟可證明交叉工具鏈安裝完成且環(huán)境變量設(shè)置無(wú)誤。

圖1?arm-linux-gnueabihf-gcc版本信息

2.簡(jiǎn)單的例子

??? 編寫(xiě)一個(gè)測(cè)試文件,在PC機(jī)上完成編譯然后通過(guò)FTP上傳到樹(shù)莓派中并執(zhí)行。
? ? 【測(cè)試代碼】 ? ? 文件名為hello-world.c,該例子僅測(cè)試交叉編譯是否成功并簡(jiǎn)單測(cè)試了浮點(diǎn)數(shù)功能。
[cpp]?view plaincopy
  • #include?<stdio.h>??
  • int?main(void)??
  • {??
  • ????float?pi?=?3.14;??????
  • ????printf("Hello?World\n");??
  • ????printf("%.2f\n",2*pi);??
  • }??

  • ? ? 【交叉編譯——簡(jiǎn)單指令】
    ??? cd進(jìn)入hello-world.c所在目錄,輸入以下指令以生成可執(zhí)行文件。請(qǐng)注意該可執(zhí)行文件不能在PC機(jī)上運(yùn)行。 ????arm-linux-gnueabihf-gcc?hello-world.c -o hello-world ??? 最終可在hello-world.c的同目錄中生成hello-world可執(zhí)行文件。
    ? ? 【交叉編譯——makefile】
    ??? 當(dāng)然也可在該目錄下建立makefile文件,簡(jiǎn)單的makefile文件如下
    [plain]?view plaincopy
  • CC=arm-linux-gnueabihf-gcc??
  • hello-world:hello-world.o??
  • clean:??
  • ????rm?-rf?hello-world.o?hello-world??

  • ??? 在makefile文件中使用了至少兩條隱含規(guī)則,CC為默認(rèn)工具鏈;*.o文件由同名的*.c文件生成。
    ??? 那么在控制臺(tái)中輸入make即可生成可執(zhí)行文件。

    ? ? 【FTP上傳】 ??? 可在ubuntu中安裝filezilla軟件,該軟件具有ubuntu版本可通過(guò)ubuntu軟件中心直接安裝。ubuntu版本和windows使用方法相同。
    圖2 使用FileZilla上傳文件

    ? ? 【SSH登陸執(zhí)行】
    ??? 假設(shè)raspberry的IP地址為192.168.1.107,可使用以下指令登陸raspberry
    ??? ssh pi@192.168.1.107
    ??? 登陸之后進(jìn)入可執(zhí)行文件所在目錄,修改該文件的執(zhí)行權(quán)限。
    ??? sudo chmod 755 hello-world
    ??? 該文件的所有者為pi,所有者pi對(duì)于該可執(zhí)行文件具有可寫(xiě)可讀可執(zhí)行權(quán)限(7),755中的后兩個(gè)55為可讀與可執(zhí)行,本例中對(duì)于hello-world用處不大。
    ??? 輸入以下指令便可運(yùn)行該文件
    ??? ./hello-world
    ??? 控制臺(tái)輸出結(jié)果,至此可完全證明交叉工具鏈工作正常。

    圖3 樹(shù)莓派中執(zhí)行結(jié)果

    3.總結(jié)

    ??? 最近也時(shí)工作需要重新學(xué)習(xí)了交叉工具鏈的安裝和使用。網(wǎng)上閱讀了很多關(guān)于樹(shù)莓派交叉工具鏈的資料,反復(fù)嘗試總是出現(xiàn)問(wèn)題,可能為樹(shù)莓派版本和交叉工具鏈版本差異產(chǎn)生的問(wèn)題。希望這篇博文可以幫助各位,如果存在問(wèn)題請(qǐng)留言。

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的树莓派学习笔记——交叉编译工具链的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。