2021年11月22日 星期一

Yocto Project 如何編譯出 ToolChain,如何使用 Toolchain編譯

 Yocto 目前已經是各大IC廠在使用的專案類型,與之相似的,有OpenWRT 或是 BuildRoot

今天要介紹如何從Yocto Project 編譯出ToolChain,並且會說明如何使用ToolChain,最後會說明如何編譯一個簡單的Hello World.

如何編譯出ToolChain
首先我們可以使用以下的Command來編譯出 ToolChain
bitbake meta-toolchain

編譯完成後,在 build/tmp/deploy/ 資料夾底下,會多出 sdk 資料夾,而裡面會有 ToolChain安裝檔,如下圖:








如何安裝ToolChain

把上面編譯出來的ToolChain安裝檔,執行並且加上參數 -h ,可以看到此安裝檔的使用說明,如下所示:

./oecore-x86_64-aarch64-toolchain-nodistro.0.sh -h
Usage: oecore-x86_64-aarch64-toolchain-nodistro.0.sh [-y] [-d <dir>]
  -y         Automatic yes to all prompts
  -d <dir>   Install the SDK to <dir>
======== Extensible SDK only options ============
  -n         Do not prepare the build system
  -p         Publish mode (implies -n)
======== Advanced DEBUGGING ONLY OPTIONS ========
  -S         Save relocation scripts
  -R         Do not relocate executables
  -D         use set -x to see what is going on
  -l         list files that will be extracted

如果沒有使用 "-d" 來指定安裝路徑,則系統預設會安裝在 /usr/local/oecore-x86_64/
簡單的安裝指令如下,會把ToolChain安裝在 /opt/ 路徑下:
./oecore-x86_64-aarch64-toolchain-nodistro.0.sh -d /opt/

可以看到 /opt/ 底下有一些檔案,有一些是環境變數設定檔,而ToolChain都在 sysroot資料夾底下

如何編譯可以放在開發版上的 HelloWorld 程式
假設剛剛我們把ToolChain安裝在 /opt/ 底下,我們可以先使用下面指令來設定一些環境變數
source /opt/environment-setup-aarch64-poky-linux

環境變數設定好之後,變數 $CC 會是預設的ToolChain執行檔,印出 $CC 這個變數,可以看到如下圖片:




接著先撰寫好簡單的helloWorld.c 小程式,用下面的Command編譯,就可以編譯出開發板可以Run的小程式
# 
$CC helloWorld.c -o hello


由這邊也可以發現,當要自己加入Package 到 Yocto Project,通常這個Package的 Makefile裡面,不能指定CC的值,不然編譯會出問題,關於這個議題,我再開一篇文章來講解如何加一個Package到 Yocto Project...