Crosstool-NG 紀錄


最近在弄板子, 雖然 vendor 提供的 SDK 已經有給 cross toolchain
不過, 內心還是想自己做做看
結果, 我發現要純手工地準備一套 toolchain 真的會哭臉....
我也沒那時間在那耗~~
所以, 只好藉助工具的幫忙啦~~  以下做點重點紀錄

工具鏈 (Toolchain)

就是你要做一支程式所需要的工具集合,像編譯器、連結器、C 函式庫這一類的東西。

交叉工具鏈 (Cross Toolchain)

如果你要在 x86 的 PC 上寫一支跑在 arm 架構上的程式,那你就需要在 x86 的 PC 上準備一套給該架構使用的工具鏈。就是說,你可以在 A 平台,透過交叉工具鏈的協助,開發給 B 平台用的程式。

為了區別本地工具鏈,croos toolchin 工具的檔名大多會加前綴字(prefix),例如 arm-linux-gcc

獲得交叉工具鏈的 5 種方法

  1. 使用 vendor 提供的 toochain (常附在 SDK 或 BSP 中)
  2. 專案或社群所製作好的 toolchain (例如為 ARM特別校調的 Linaro)
  3. 使用 Linux 發行版提供的 cross toolchain
    $ sudo apt-get install gcc-arm-linux-gnueabi
  4. 使用工具鏈製作工具來做 (例如 crosstool-ng。有些根檔案建置系統也可順便做 crosstool chain 的建置, 像 Buildroot, PTXdist, OpenEmbedded 等, 以上我都沒用過)
  5. 純手動,自己準備 binutils, gcc, glibc/eglibc/uclibc, gcc, Linux kernel headers 等。有試著自己要做,但功力實在太弱,一堆錯誤不知道要搞到何年何月.... 最後直接投降!
如果真要自己弄,藉由 crosstool-ng 這種工具的協助來建置 toolchain 似乎是很常見的做法

安裝 crosstool-ng 

  • 我的host系統是 Ubuntu
  • 下載最新版的 crosstool-ng
    • 注意一開頭有個檔案的檔名會提示你最新版本號: 例如 00-LATEST-is-1.20.0
    • 當然你可下載自己需要的版本
  • 全域安裝
    • $ ./configure --prefix=/opt/crosstool-ng
    • $ make
    • $ sudo make instal
    • prefix 就是安裝的路徑
  • 本地安裝
    • $ ./configure --enable-local
    • $ make
    • $ make install
  • 安裝時可能會出現缺這個套件、那個套件的錯誤,看缺什麼就 apt-get install 一下即可,下面列出名字比較不直覺的套件名稱
    • 缺 makeinfo:裝 texinfo
    • 缺 GNU awk:裝 gawk
    • error: could not find curses header... kconfig frontends:裝 libncurses5-dev
  • 裝完可修改 .bashrc 中的 PATH 環境變數,例如
    • PATH=$PATH:/opt/crosstool-ng/bin
  • ct-ng 就是 crosstool-ng 的指令,例如可用如下指令查看說明
    • $ ct-ng help

使用 crosstool-ng 的基本流程

  還沒用過之前,會覺得是不是會很難用。但用過之後,我是覺得還蠻容易的。反正就兩件事情,一件事情就是「crosstool-ng 自己本身的設定,例如工作目錄、編譯錯誤要不要直接退出之類的」,另一個就是「cross toolchain 要怎麼編出來的設定」。最重要的是,crosstool-ng 已經提供一堆不同架構的設定範例,你可以直接套用一個範例來建置,或是套用後再自己修改、然後建置,修改可以用 menuconfig 選單式的作法,很方便。基本流程如下:
  • $ ct-ng list-samples
    • 例如我選 arm-cortex_a8-linux-gnueabi
  • $ ct-ng show-arm-cortex_a8-linux-gnueabi
    • 可看一下這個設定範例的主要參數
  • $ ct-ng arm-cortex_a8-linux-gnueabi
    • 直接套用此範例檔
  • $ ct-ng menuconfig
    • 進入選單,勾勾選選的,cook 一下自己要的設定
  • $ ct-ng build
    • 然後就建置了,建置時間不等(數十分鐘,我用 i7 + VM 跑 50 分鐘,這個值僅供參考而已,反正你執行建置後,可以先去洗個澡、大便之類的都沒問題)
那進 menuconfig 之後,大概要設定些什麼....
這個下次要說「組織工作目錄」的時候再補完~ 有點想睡啦!!


本文沒有版權,歡迎轉載。
如您喜歡本部落格,歡迎至 E. E.狂想曲 Facebook 粉絲專頁持續追蹤最新文章!

沒有留言

技術提供:Blogger.