建立 gnu tool chain
之前都是用建好的 tool chain, 完全不知道如何去建立一個 tool chain. 所以此文章就紀錄如何去建立特定平台的 tool chain. 補充一下: 這邊使用的 tool chain 也相當於 cross-compiler. 這邊以 linux, glibc, GNU GCC 和 GNU Binutils 作為 tool chain 的要件 參考 reference 與自己的想法所寫. 1. 概述 根據 [1] , tool chain 主要可分成compiler, assembler 與 linker. compiler: 編譯程式並產生 assemble code. 如 GNU compiler collection(gcc) assembler: 把 assemble code 轉換為特定平台上的 object code. 如 GNU binutils linker: 把 object code files 合併起來以及加入所需的library links 基於上述便產生出一個執行檔. 然而對於執行在 target Operating System 的程式來說還需要 C library, 如 glibc, newlib, etc. 而對 C Library 來說則又需要 kernel header files. 來確認 kernel 有提供那些功能. 了解構成要件後, 接著看一個 tool chain 要件之間需求關聯. 其由結果往前推導 [1] : 對於最後的編譯器(cross-compiler) 需要 C library, 並知道如何使用 APIs 與 crt(c runtime) files, 但是 編譯 C library 是需要一個 compiler 由於 1 & 2 彼此互相需要. 為了解決此問題. 就先編譯一個不需要 C library 的精簡編譯器 (stripped-down compiler). 相依關係又變為 編譯 C library 是需要一個 compiler, 但是 stripped-down compiler 需要 C li...