在MACOS上實現(xiàn)交叉編譯

在嵌入式開發(fā)過程中,設備的存儲空間和運算能力通常會比較低,這時候,比如要編譯一個linux的內(nèi)核,嵌入式設備就不能勝任了,所以,實現(xiàn)交叉編譯還是很必要的。通過交叉編譯,我們就能夠在我們的pc上編譯出能夠在嵌入式設備上使用的可執(zhí)行程序。

?? ? ? 下面,我將一步步講解如何在MAC OS上實現(xiàn)樹莓派(arm)的交叉編譯。

一。新建一個磁盤映像

?? ? ? MAC OS的文件系統(tǒng)默認是大小寫不敏感的,而交叉編譯工具鏈是基于大小寫敏感的文件系統(tǒng)的,所以我們不能直接把工具鏈安裝在原來的文件系統(tǒng)中,而是需要新建一個大小寫敏感的磁盤印象用于安裝工具鏈。

實現(xiàn)這一功能并不難,使用系統(tǒng)自帶的磁盤工具(disk utility

)就可以實現(xiàn)了。打開磁盤工具,然后 文件>新建>空白磁盤映像,然后在彈出窗口中設置名稱為arm-x(便于后續(xù)操作),大小至少為500M,格式為Mac OS擴展(區(qū)分大小寫,日志式)的映像(如下圖)。 ?



二。下載已經(jīng)編譯完的工具鏈

從下面的鏈接下載已經(jīng)編譯完的arm GNU Linux 工具鏈:

https://github.com/downloads/UnhandledException/ARMx/ARMx-2009q3-67.tar.bz2

如果你想自己一步步編譯,了解工具鏈中的具體元素的話,可以看一下下面這篇文檔:

https://github.com/UnhandledException/ARMx/wiki/Sourcery-G---Lite-for-ARM-GNU-Linux-(2009q3-67)-for-Mac-OS-X

三。解壓工具鏈壓縮包到磁盤映像

在終端進入壓縮包所在的目錄,執(zhí)行下面的指令即可:

(新建的磁盤映像默認是掛載的,如果沒有掛載的話請先手動掛載)

tar -zx -C /Volumes/arm-x/ --strip-components 1 -f ARMx-2009q3-67.tar.bz2

四。使用工具鏈

現(xiàn)在已經(jīng)能夠直接使用工具鏈了,比如我寫了一個hello.c程序,現(xiàn)在可以直接使用工具鏈對程序進行編譯。

? ? ? ? 在終端執(zhí)行:


?? ? ? ? /Volumes/arm-x/bin/arm-none-linux-gnueabi-gcc hello.c -o hello

? ? ? ? 就可以獲得一個名為hello的可執(zhí)行程序。這個程序在mac下是不能運行的,需要在arm處理器的設備上才能運行。

? ? ? 當然,如果你嫌輸入一大串路徑去調(diào)用arm-none-linux-gnueabi-gcc程序麻煩的話,可以把/Volumes/arm-x/bin目錄添加到PATH里去,這樣就能夠像使用系統(tǒng)命令一樣使用了。(添加環(huán)境變量的方法很多,建議把路徑添加到~/.profile文件中去,具體操作百度一下你就知道)

五。把hello程序上傳到樹莓派上

? ? ??如果你自己知道怎么把文件上傳到樹莓派上,那么請直接上傳吧。如果不會,我在這里提供兩種方法:

? ? ? ? 1.使用sftp:這種方法無需另外設置,可以直接把文件上傳到樹莓派,但每一次更改都需要重新上傳。

? ? ? ? ? ? 步驟:

sftp?pi@192.168.1.5?(ip地址根據(jù)你的地址進行更改)

?? ? ? ? ? ? ? ? ? ? 然后輸入密碼raspberry

? ? ? ? ? ? ? ? ? ? ? put /本地文件路徑? ? /上傳到樹莓派上的目錄

(例如:put /Users/icool/Desktop/hello . )

? ? ? 2.使用NFS:這種方法需要先進行配置,但配置好后使用十分方便??梢詫漭缮系奈募苯佑成涞絤ac上,這樣在mac上修改即可,無需再上傳。

? ? ? ? ? ? ? 具體步驟可以參考這篇文檔:

? ?http://server.zdnet.com.cn/server/2007/0831/482007.shtml

六。在樹莓派上執(zhí)行上傳的程序

ssh連接上樹莓派(或者任意方法,登陸上樹莓派即可)。

?? ? ? ? ? 然后進入hello程序所在目錄,執(zhí)行:

./hello

結(jié)果如下:

七。測試浮點程序


通過上一步可以發(fā)現(xiàn)交叉編譯得到的hello,world程序可以在樹莓派上正常運行,下面要檢驗一下浮點程序是否也可以正常運行。

先寫一個簡單的浮點程序:

? ? ? ?檢驗結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評論 25 709
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,621評論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,194評論 8 265
  • 桃花潭水深千尺, 南湘一紫高萬仞。 千尺難量簡友情, ...
    紅城客閱讀 465評論 11 19
  • 無數(shù)次在腦海中盤旋著是不是要寫點什么來警示為人父母或是祭奠您的死去。然而羞于啟齒,更是對您的尊重,一直只停...
    柳智慧閱讀 376評論 1 2

友情鏈接更多精彩內(nèi)容