2012年12月24日 星期一

Raspberry Pi:Cross-compiler (update)

有鑒於 Raspberry Pi 的 CPU 和 RAM 的效能限制,在編譯大型檔案時需要耗費相當長的時間。(像我自己就傻傻地直接在 Raspberry Pi 上編譯 ZMQ...)因此通常在開發嵌入式系統的程式時,通常都會在其他電腦上透過 Cross-compiler 的方式編譯給板子執行的程式。

官方的 Wiki 的 Cross-compiler 說明中,已經有提供了官方預先 build 好的 cross-compiler 程式提供開發者使用,省去大量時間去下載、設定、編譯 crosstool-NG、Linaro GCC,之後才得到能用的 cross-compiler。

在此就簡單說明(真的超簡單)如何在 Linux 底下,建立 Cross-compiler 環境,幫我們可愛的 Raspberry Pi 編譯給它執行的程式!


※注意※
經測試後,Pre-build 的 cross-compiler 僅適用於 32-bit Linux,64-bit 需自行手動編譯。


1. 用 Linux 系統下指令抓取 tools
$ git clone git://github.com/raspberrypi/tools.git

2. 下載完後,依需求設定 PATH 環境路徑,方便往後呼叫程式。
$ export PATH=$PATH:/home/yourname/<cross-compiler path>/bin


使用範例


做完上面步驟後,進入 tools/arm-bcm2708/ 目錄會發現有三個子目路,分別為不同參數所產生出來的 cross-compiler,請依照需求,以及 RPi 所使用的 OS 做選擇。

首先我先寫一個簡單的 Hello World,儲存在 /tmp/hello.c,之後編譯程式
$ arm-linux-gnueabihf-gcc /tmp/hello.c -o hello

完成後和一般 gcc 一樣,會產生 hello 的可執行檔,不過這是要給 Raspberry Pi 執行的程式。Raspberry Pi 所使用的 CPU 是 ARMv6,除非你的 cross-compiler 環境和 Raspberry Pi 雷同,不然這隻程式是沒辦法執行的。

之後請複製到 Raspberry Pi 中,個人是以 scp 進行遠端複製,執行!


看到 Hello World,表示程式碼成功透過 cross-compiler 將程式編譯成給 Raspberry Pi 執行的程式。


手動建置 Cross-compiler


如果覺得這個方式真的太過於簡單、想嘗試練習自行建置 Cross-compiler,或是和我一樣,是以 64-bit Linux 做為開發環境的話,請參考以下網頁建置 cross-compiler 編譯環境。

1. 官方 Wiki (RPi Linaro GCC Compilation

2. How to build a cross compiler for your Raspberry Pi

沒有留言:

張貼留言