在嵌入式開發(fā)過程中游岳,設(shè)備的存儲(chǔ)空間和運(yùn)算能力通常會(huì)比較低政敢,這時(shí)候,比如要編譯一個(gè)linux的內(nèi)核胚迫,嵌入式設(shè)備就不能勝任了喷户,所以,實(shí)現(xiàn)交叉編譯還是很必要的访锻。通過交叉編譯褪尝,我們就能夠在我們的pc上編譯出能夠在嵌入式設(shè)備上使用的可執(zhí)行程序。
?? ? ? 下面期犬,我將一步步講解如何在MAC OS上實(shí)現(xiàn)樹莓派(arm)的交叉編譯河哑。
一。新建一個(gè)磁盤映像
?? ? ? MAC OS的文件系統(tǒng)默認(rèn)是大小寫不敏感的哭懈,而交叉編譯工具鏈?zhǔn)腔诖笮懨舾械奈募到y(tǒng)的灾馒,所以我們不能直接把工具鏈安裝在原來的文件系統(tǒng)中,而是需要新建一個(gè)大小寫敏感的磁盤印象用于安裝工具鏈遣总。
實(shí)現(xiàn)這一功能并不難睬罗,使用系統(tǒng)自帶的磁盤工具(disk utility
)就可以實(shí)現(xiàn)了。打開磁盤工具旭斥,然后 文件>新建>空白磁盤映像容达,然后在彈出窗口中設(shè)置名稱為arm-x(便于后續(xù)操作),大小至少為500M垂券,格式為Mac OS擴(kuò)展(區(qū)分大小寫花盐,日志式)的映像(如下圖)。 ?
二菇爪。下載已經(jīng)編譯完的工具鏈
從下面的鏈接下載已經(jīng)編譯完的arm GNU Linux 工具鏈:
https://github.com/downloads/UnhandledException/ARMx/ARMx-2009q3-67.tar.bz2
如果你想自己一步步編譯算芯,了解工具鏈中的具體元素的話,可以看一下下面這篇文檔:
三凳宙。解壓工具鏈壓縮包到磁盤映像
在終端進(jìn)入壓縮包所在的目錄熙揍,執(zhí)行下面的指令即可:
(新建的磁盤映像默認(rèn)是掛載的,如果沒有掛載的話請(qǐng)先手動(dòng)掛載)
tar -zx -C /Volumes/arm-x/ --strip-components 1 -f ARMx-2009q3-67.tar.bz2
四氏涩。使用工具鏈
現(xiàn)在已經(jīng)能夠直接使用工具鏈了届囚,比如我寫了一個(gè)hello.c程序,現(xiàn)在可以直接使用工具鏈對(duì)程序進(jìn)行編譯是尖。
? ? ? ? 在終端執(zhí)行:
?? ? ? ? /Volumes/arm-x/bin/arm-none-linux-gnueabi-gcc hello.c -o hello
? ? ? ? 就可以獲得一個(gè)名為hello的可執(zhí)行程序意系。這個(gè)程序在mac下是不能運(yùn)行的,需要在arm處理器的設(shè)備上才能運(yùn)行饺汹。
? ? ? 當(dāng)然蛔添,如果你嫌輸入一大串路徑去調(diào)用arm-none-linux-gnueabi-gcc程序麻煩的話,可以把/Volumes/arm-x/bin目錄添加到PATH里去,這樣就能夠像使用系統(tǒng)命令一樣使用了作郭。(添加環(huán)境變量的方法很多陨囊,建議把路徑添加到~/.profile文件中去,具體操作百度一下你就知道)
五夹攒。把hello程序上傳到樹莓派上
? ? ??如果你自己知道怎么把文件上傳到樹莓派上蜘醋,那么請(qǐng)直接上傳吧。如果不會(huì)咏尝,我在這里提供兩種方法:
? ? ? ? 1.使用sftp:這種方法無需另外設(shè)置压语,可以直接把文件上傳到樹莓派,但每一次更改都需要重新上傳编检。
? ? ? ? ? ? 步驟:
sftp?pi@192.168.1.5?(ip地址根據(jù)你的地址進(jìn)行更改)
?? ? ? ? ? ? ? ? ? ? 然后輸入密碼raspberry
? ? ? ? ? ? ? ? ? ? ? put /本地文件路徑? ? /上傳到樹莓派上的目錄
(例如:put /Users/icool/Desktop/hello . )
? ? ? 2.使用NFS:這種方法需要先進(jìn)行配置胎食,但配置好后使用十分方便≡识可以將樹莓派上的文件直接映射到mac上厕怜,這樣在mac上修改即可,無需再上傳蕾总。
? ? ? ? ? ? ? 具體步驟可以參考這篇文檔:
? ?http://server.zdnet.com.cn/server/2007/0831/482007.shtml
六粥航。在樹莓派上執(zhí)行上傳的程序
ssh連接上樹莓派(或者任意方法,登陸上樹莓派即可)生百。
?? ? ? ? ? 然后進(jìn)入hello程序所在目錄递雀,執(zhí)行:
./hello
結(jié)果如下:
七。測試浮點(diǎn)程序
通過上一步可以發(fā)現(xiàn)交叉編譯得到的hello蚀浆,world程序可以在樹莓派上正常運(yùn)行缀程,下面要檢驗(yàn)一下浮點(diǎn)程序是否也可以正常運(yùn)行。
先寫一個(gè)簡單的浮點(diǎn)程序:
? ? ? ?檢驗(yàn)結(jié)果: