我在上一篇「Crosstool-NG 紀錄」說明了ct-ng的安裝與使用它的基本流程,在這一篇我會說明一下如何組織工作目錄,然後直接跑一次範例。
上一篇忘記給參考文獻啦,在這:交叉編譯詳解
如果需要知道比較詳細的設定說明,再請自行 study 一下囉~
註:我的系統是 Ubuntu 12.04 LTS,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
- 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
- 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 粉絲專頁持續追蹤最新文章!
本文沒有版權,歡迎轉載。
如您喜歡本部落格,歡迎至 E. E.狂想曲 Facebook 粉絲專頁持續追蹤最新文章!
感謝大大的分享!
ReplyDelete講解得非常詳細,受益良多
不會喔, 我也是做一點記錄而已啦
Delete