論壇總覽 GD32 RISC-V 論壇 開始使用GD32 RISC-V Nano/Pico 深入淺出GD32 RISC-V Nano/Pico – (三) MapleBoard 工具鏈建置與使用

標籤: ,

正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
  • 作者
    文章
  • #582
    johnson
    管理員
    @johnson

    為什麼我們需要工具鏈?

    在嵌入式系統的開發中,工具鏈(toolchain)是銜接主機端(Host)以及目標板(Target)的重要橋樑。

    我們在主機端將應用程式(Application,AP)撰寫好後,可能是LED閃爍程式,或者進階一點的LCD顯示程式,需要有一個工具將我們撰寫的高階語言(如C語言),轉換成為處理機能夠讀懂的機械碼(Machine Code),而擔任這個重責大任的就是工具鏈。

    工具鏈首先將C程式碼的註解先去除(Preprocessing),產生沒有註解的C檔案,再將這個檔案與相依檔案(如gd32vf103.h)進行連結後,再依照不同目標平台架構(GD32是RISC-V)編譯成物件碼(Object Code)。

    這時候會產生如同”entry.o”這種檔案,工具鏈會再將物件碼與標準的C函式庫(或者不同硬體架構的標準函式庫)在進行連結(Loading)。

    由於標準含式庫在專案開發的過程中不會有所改變,因此可以直接用物件碼與AP做連結即可。

    最後,把連結好的程式碼輸出成ELF格式(Exectuable and Loadable Formate),如gd32vf103.elf。再將ELF檔案轉換成十六進制(.hex)以及二進制(.bin)檔案,並利用上傳工具將機器馬上傳到目標板上。

    於 Mpb-toolchain-Example/src 下的Makefile內容

    於 Mpb-toolchain-Example/src 下的Makefile內容

    認識工具鏈

    工具鏈一般包含

    • 編譯器
    • 連結器 (將原始碼/目的碼轉換成可執行程式檔)
    • 函式庫 (提供與作業系統之間的介面)

    除錯器這些工具一般一個接一個地運用,上一個工具的輸出即是下一個工具的輸入,因此得名,但這幾種工具也可以獨立不相依得進行使用。

    其中最知名的工具鏈就是GNU計畫的GNU toolchain

    我們的Mpb-toolchain也是源自於GNU專案衍伸出來的RISC-V GNU toolchain 並進行改寫的工具鏈專案。

    下載工具鏈

    前往 https://github.com/MapleBoard/mpb-toolchain

    下載我們的Mapleboard toolchain 以利GD32 RISC-V Nano/Pico的開發。

    首先建立一個資料夾(或者移動到任意資料夾)把整個原始碼下載下來。

    在終端視窗輸入:
    $ git clone https://github.com/MapleBoard/mpb-toolchain.git

    可以看到一個名為Mpb-toolchain的資料夾內包含所有工具鏈必要檔案。

    建置工具鏈

    下載好工具鏈後,請將終端視窗移動到riscv-gnu-toolchain資料夾內。 先安裝工具鏈鎖需要的相依套件:

    $ sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

    接著,建立一個build資料夾,並對工具鏈做基本的設定:
    $ mkdir build
    $ ./configure --prefix=pwd/build --with-arch=rv32imac --with-abi=ilp32

    注意第二行指令礙於html語法,pwd的地方使用” ` “(左上角ㄅ旁邊那顆按鍵) 作為前後綴,請確認是否如下圖所示:

    關於”pwd“的使用方法可以參考鳥哥的私房菜-第六章-Linux 檔案與目錄管理

     

    接下來安裝工具鏈:
    $ sudo make linux -j8

    安裝過程耗時較長,可以在最後執行make指令的時候增加”-j8″的參數來使用多線程進行建置。 若日後想要更新工具鏈的相依模組,可以輸入:
    $ git submodule foreach --recursive git pull

    使用工具鏈-設定環境變數

    建置完成後,我們需要把工具鏈的可執行檔路徑加入到系統的環境變數,也就是$PATH中。 我們要讓電腦重開機依然以使用工具鏈的指令,因此需要修改系統的.bash_rc檔案。 先將終端機工作目錄移動到使用者目錄底下,並用nano文字編輯器修改(亦可使用vi或vim編輯器):

    $ cd ~
    $ nano .bashrc

    進入如左圖的編輯畫面後,直接在最底端添加:
    export PATH=~/path_to_your_directory/riscv-gnu-toolchain/build/bin/:"$PATH"

    其中PATH=~/後面的路徑要依照使用者的命名而定,這裡只是舉例。

    新增完後,按下Ctrl+O(英文字母 歐)儲存,再按下Ctrl+X離開。 在終端機輸入. .bashrc

    可重新載入.bashrc的設定檔 輸入echo $PATH

    查看我們剛剛輸入的路徑是否已經寫入到系統環境變數。

    使用工具鏈-使用指令

    將指令加入系統環境變數後,只要在命令視窗中輸入riscv32-mapleboard-elf並按兩下”Tab”鍵,就會自動列出所有指令。

    這些指令中包含常見的gcc(編譯器), ar(組譯器), ld(連結器), objcopy(物件碼轉換器) 等等工具鏈必備的軟體。

    到這一步我們就可以使用終端視窗編譯我們的程式碼,只需要依照順序將原始碼進行編譯,組譯,連結,轉檔,最後在利用特定的上傳工具上傳到目標板上即可。

    但是這說還是很籠統,因此我們提供了一個工具鏈使用的範例程式供大家下載使用。

    關於工具鏈的範例以及範例的使用方法,請繼續閱讀

    深入淺出GD32 RISC-V Nano/Pico – (四) MapleBoard 工具鏈範例使用教學

正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
  • 需要以回覆此篇主題...