[心得] 跌跌撞撞的E680開發環境建置歷程-part2
先大概提一下建置toolchain的大致步驟,雖然這應該很多人知道,
不過我還是提一下讓完全沒接觸過的人有個基本概念。
建置toolchain 最粗略的就是作以下的步驟:
1.設定安裝 linux header
2.建置binutil(用Host的compiler)
3.建立bootstrap compiler (好像也有人稱為 1st stage compiler)
此時的compiler只支援最基本的C語言
4.用前面的binutil, compiler
建置C library(glibc 或 newlib 或 uLibc)
5.用前面的binutil, compiler, C library建置真正以後要用的cross compiler
此時就可以選擇再加上其他程式語言的compiler
(嵌入式環境一般也頂多加上C++而已)
而這些步驟要做的事情其實也差不多(除了linux header以外)
1.) 抓source code, 解壓縮之
2.) 找patch,打補釘之
3.) 建立build-<套件名稱> 目錄
4.) cd build-<套件名稱>
5.) ./configure 下參數
6.) make
對了稍微提一下我的Host環境, ubuntu linux 8.04 x64
因為有兩個失敗的地方就是跟ubuntu預設值有關
其實我一開始就是要用完全手動的方式建置toolchain,不過吃足了苦頭。
因為linux header, binutil, gcc, glib 不是隨便任何版本都可以拿來組合在一起的
中間亂七八糟的try and error我也快記不清楚了
我大概講一下我認為值得注意的部分
1.不要選用太新甚至最新的版本,因為根本沒有人出patch,
除非湊巧這個版本加上這個平台沒有問題,否則就是有bug要修
可是我們都不是GCC開發人員也不是駭客,沒辦法自己修改source code
最好去參考那些現成的toolchain(像我之前提到的 GNUARM, WINARM等等)
它們採用的gcc, binutil, C library版本
至少可以確定已知有什麼版本的組合是有人建置成功的
否則就是要自己花時間去try
像我的經驗是binutil 2.17是可以不打任何patch就可以通過編譯的
(但我後來有看到有人出 bintuil 2.17 的patch)
2.編譯GCC的時候注意Host系統上現在用的GCC版本,盡量不要差太多
一開始編譯GCC-3.3 一直失敗,原因是ubuntu 8.04預設用的是GCC-4
後來老老實實的去裝GCC-3.3,把gcc的符號連結改指向 gcc-3.3
才得以通過編譯
3.這跟前一個其是算同一類,注意Host系統上有沒有缺相依的套件
像是如果要編譯GCC-4, 我記得系統上要有libogmp
要編譯glibc別忘了還要抓對應版本的glibc-linuxthreads
還有glibc 2.4開始把一些處理器的支援分離出來,所以glibc-ports的也要抓
(連帶也影響configure script參數)
由於純手動建置還得自己找patch,不然完全沒輒。
而且每次要./configure 真的會累死人,所以我後來改用crosstool套件來建置
好累,下一篇我只寫使用crosstool的注意事項。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.165.67.138
推
06/25 06:52, , 1F
06/25 06:52, 1F
推
06/25 22:19, , 2F
06/25 22:19, 2F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章