Crosstool-NG 紀錄 (續)

  我在上一篇「Crosstool-NG 紀錄」說明了ct-ng的安裝與使用它的基本流程,在這一篇我會說明一下如何組織工作目錄,然後直接跑一次範例。

上一篇忘記給參考文獻啦,在這:交叉編譯詳解
如果需要知道比較詳細的設定說明,再請自行 study 一下囉~

註:我的系統是 Ubuntu 12.04 LTS,ct-ng 是以全域安裝

<1> 建一個目錄 /my_ctchain

注意:如果你是使用全域安裝,請注意不要在你的 home 下執行ct-ng 某sample ct-ng menuconfig,否則它所產生的隱藏檔 .config 會覆蓋掉Ubuntu檔案瀏覽器Nautilus的 .config 檔~ 下次開機時,要進桌面會有錯誤發生哦!(受害者在這裡~~~)
  • 開一個目錄 /my_ctchain,在該目錄下 list 出範例清單,然後選用 arm-cortex_a8-linux-gnueabi 這個配置範例
    • ~$ makedir my_ctchain
    • ~$ cd my_ctchain/
    • ~/my_ctchain$ ct-ng list-samples
    • ~/my_ctchain$ ct-ng arm-cortex_a8-linux-gnueabi
    • ~/my_ctchain$ ls -al
      • 你會看到 .config 產生出來了
      • .config 儲存的內容,就是你 ct-ng menuconfig 進去選單後看到的設定內容
    • ~my_ctchain$ ct-ng menuconfig
      •  [ Paths and misc options  ---> ] 看一下,有幾個選項跟工作目錄設定有關
        • (${HOME}/src) Local tarballs directory
        • (${CT_TOP_DIR}/.build) Working directory
        • (${HOME}/x-tools/${CT_TARGET}) Prefix directory
      • Local tarballs directory
        • 從網路上(自動)下載回來的一些 source 的 tarbll,都放在這個目錄下
      • Working directory
        • 建置時的工作目錄,例如 tarball 解壓縮後的 source code 就會丟進這裡
      • Prefix directory
        • 建置目標的路徑

<2> 規劃建置工作目錄

根據以上的基本了解,ct-ng預設會去 home 下的 /src 目錄找 tarball。建置結果會放在 home 目錄下的 /x-tools。可是這樣感覺好亂,我們就自己更改「工作目錄的組織」,把東西統一集中在 ~/my_ctchain 下就好了啊!

    <2.1> 先在 ~/my_ctchain 中建一下放 tarball 的目錄 /src
  • ~/my_ctchain$ mkdir src
  • ~/my_ctchain/src$
    • 你如果有準備好一些建置時要用的 tarballs,可先丟進來。ct-ng 在建置交叉工具鏈時,依照你的設定從網路上下載回來的 tarballs 就會放在這裡
      • 例如,我們稍後在 [Operating System] 設定中,選擇使用自訂的 Linux kernel 版本,那麼就要將kernel的 source tarball - 如 linux-3.14.26.tar.gz 先丟進來
    <2.2> 在 menuconfig 中,設定一下:
  • ~/my_ctchain$ ct-ng menuconfig
  • (${HOME}/my_ctchain/src) Local tarballs directory 
  • (${HOME}/my_ctchain/ct-ng-1.20.0_build) Working directory
  • (${HOME}/my_ctchain/x-tools/${CT_TARGET}) Prefix directory

***********************************************************************
* 接下來的配置,只列出應設定的重點,詳細說明請見 help 或參見本文參考文獻。
* 其他未列出的設定項目,我也不是全部知道在幹嘛~ 在需要的時候也是得上網
* 找一下說明~
* kernel, C-lib, binutils, 與 gcc 等東西的版本,可依照你的需求自己設定
***********************************************************************

<3> ct-ng 建置工作參數

  • Paths and misc options  --->
    • [*] Debug crosstool-NG
    • [*]   Save intermediate steps
    • [*]   Interactive shell on failed commands
    • (${HOME}/my_ctchain/src) Local tarballs directory
    • (${HOME}/my_ctchain/ct-ng-1.20.0_build) Working directory
    • (${HOME}/my_ctchain/x-tools/${CT_TARGET}) Prefix directory
    • (4) Number of parallel jobs  ( 4 = CPU核心數x2 )

<4> 交叉工具鏈建置參數

  • 以下紅色為"自訂",藍色為 arm-cortex_a8-linux-gnueabi配置檔的"預設值"
  • Target options  --->
    • Target Architecture (arm)  --->
    • [*] Use the MMU
    • Endianness: (Little endian)  --->
    • Bitness: (32-bit)  ---> 
    • (armv7-a) Architecture level
    • (cortex-a8) Emit assembly for CPU
    • (cortex-a8) Tune for CPU
    • (neon) Use specific FPU
    • Floating point: (hardware (FPU))  --->  // 若不確定就選 software
    • (-O) Target CFLAGS
     註: Target Options 通常可以在 CPU vendor 的 wiki 或手冊找到,但若有配置範例,它已幫你配置大部分了
  • Operating System  --->
    • Target OS (linux)  --->
    • Linux kernel version (custom tarball or directory)  --->
    • (${HOME}/my_ctchain/src/linux-3.14.26.tar.gz)Path to custom source, tarball or directory
     註: Linux 的 kernel 版本可以自訂,先去 https://www.kernel.org/ 下載 kernel 的 tarball 放到 /src 下
    • Binary utilities  --->
      • binutils version (2.22)  --->
    • C-library  --->
      • C library (glibc)  --->
      • glibc version (2.19)  --->
      • Threading implementation to use: (native)  --->
    • C compiler  ---> 
      • C compiler (gcc)  --->
      • [*] Show Linaro versions
      • gcc version (linaro-4.7-2014.01)  --->
      • [*] C++

    <5> 開始建置

    • ~/my_ctchain$ ct-ng build V=2    // V=2是在建置過程中顯示詳細訊息, 可不加
    • 建置完後你就可以在 ~/my_ctchain/xtools/arm-cortex_a8-linux-gnueabi/bin 中看到交叉工具囉~

    <6> 後記

    • Toolchain options  --->  中有一個 Tuple’s vendor string 的設定,可讓你自己填寫交叉工具檔名命名規則中的 vendor可上網搜尋一下用法~
      • 格式:arch-vendor-kernel-system
      • 範例
        • (my_abc) Tuple's vendor string
        • arm-my_abc-linux-gnu
    • 關於「建置發生錯誤」時,應該如何恢復上一建置步驟,請見這裡

    以上,就是使用 crosstool-ng 的使用紀錄,很簡短的摘要。希望對剛接觸 ct-ng 的朋友有點幫助哦!

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



    simen

    An enthusiastic engineer with a passion for learning. After completing my academic journey, I worked as an engineer in Hsinchu Science Park. Later, I ventured into academia to teach at a university. However, I have now returned to the industry as an engineer, again.

    2 Comments

    1. 感謝大大的分享!
      講解得非常詳細,受益良多

      ReplyDelete
      Replies
      1. 不會喔, 我也是做一點記錄而已啦

        Delete
    Post a Comment
    Previous Post Next Post