Tool Chain
想要參與GNU/Linux的嵌入式系統開發,第一步你就需要有toolchain等工具;如果沒有,就像是你想要寫程式,但是你卻沒有編譯器等工具一樣會無從發揮起。通常在GNU/Linux的PC上的開發工具都是屬於native toolchain,也就是在這台PC上編譯後的結果只能夠在同一種架構上的PC上去執行。
但是對於嵌入式系統的開發而言,我們通常不會用這種native toolchain,因為如果要在target board上去編譯建置的話,記憶體/儲存空間/CPU資源都太有限了,並且建置編譯過程會有需多target board上執行期用不到的工具,對系統空間有許多的負擔,所以在嵌入式系統都會用cross-compiling的方式,也就是在你目前的電腦去建置編譯,然後編譯完之後在移到target board上面運行。
(來源 : free-electrons )
如上圖所示,編譯環境是x86,target board上的執行環境有x86和ARM兩種,所以同一套原始碼需要經過兩種toolchain的編譯,對於x86 target board,因為同屬於x86系列,所以只要用Native toolchain去編譯,然後在將Binary 檔案移到x86 target board上執行。但是另外一塊ARM target board因為執行環境本身不是x86,所以需要用到cross-compiling的方式去編譯原始碼,編譯完之後才能在ARM的目標環境執行。
在這種cross-compiling toolchain的環境下有三個名詞必須要區分清楚:
- build machine
- host machine
- target machine
主要有底下這四種toolchain建置方式:
- Native Build Build,Host和Target都是在同一種架構底下,通常都是在同一台電腦編譯以及執行。
- Cross Build 在你的Host PC先建立一個toolchain,然後用它來cross compile你的Binary,然後放到不同架構的target board上執行。通常在嵌入式系統上都會用這種架構。
- Cross-native build 在你的Host PC建立一個不同環境的toolchain,然後移到target board上去編譯和執行source code。
- Canadian build 先在架構A上面去建置一個適用於架構B的toolchain,然後將這個toolchain移到架構B的電腦上去編譯適用於架構C的Binary, 然後將其放到架構C上面去執行。 (來源 : free-electrons )