[心得] 跌跌撞撞的E680開發環境建置歷程-part2

看板LinuxDev作者 (蛇尾傭兵叢雲劾)時間17年前 (2008/06/25 00:24), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
先大概提一下建置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
我也是try了很多 最後受不了直接用crosstool一次搞定 XD
06/25 06:52, 1F

06/25 22:19, , 2F
真是受益良多阿! 好文 :)
06/25 22:19, 2F
文章代碼(AID): #18OH-qw1 (LinuxDev)
文章代碼(AID): #18OH-qw1 (LinuxDev)