關於 Arduino Ameba 的 100 篇 - 如何升級更換 toolchain (1/100)


Toolchain

屬於程式的開發工具. 每個不同的 CPU 都會有其相對應的 toolchain.

Arduino 走的是 open source, 所以會使用最常用的開源工具 - GNU.

網路上找到一篇關於 GNU 開發工具 , 可以參考


另外有關 GNU toolchain 的深入部分, 可以參考 Jim Huang 的這份投影片
http://www.slideshare.net/jserv/how-a-compiler-works-gnu-toolchain?from_action=save



Ameba 的 CPU 是 ARM 的 Cortex-M3, 和 Arduino DUE 使用的相同

在網路上有個 ARM 的社群, 開發 給 ARM 使用的 embedded GCC

目前 Arduino 和 ARM mbed 都是使用這套 toolchain

https://launchpad.net/gcc-arm-embedded

其中 6.0 應該也快出來了.


Arduino 安裝後 toolchain 的位置


windows  會放在 :

     C:/Users/<使用者名稱>/AppData/Local/Arduino15/packages/<平台安裝package名稱>/tools/arm-none-eabi-gcc/4.8.3-2014q1 下


MAC OS 會放在 :


     /Users/<使用者名稱>/Library/Arduino15/packages/<平台安裝package名稱>/tools/arm-none-eabi-gcc/4.8.3-2014q1 下


升級更換

(1) 一個最簡單的方式是, 假裝他還是 4.8.3, 直接更換上述目錄下的檔案. 
(2) 自製 JSON 檔

Arduino JSON 檔設定

在安裝時, 會要求輸入 偏好設定 -> 額外的板子管理員網址

如果有去看這的話, 這是一個 JSON 格式的檔案. (ASCII 明文 )


toolsDependencies : 這邊定義了我們要安裝哪些 package


"toolsDependencies": [
            {
              "packager": "realtek",
              "name": "arm-none-eabi-gcc",
              "version": "4.8.3-2014q1"
            },
            {
              "packager": "realtek",
              "name": "ameba_tools",
              "version": "1.0.6"
            }
          ]
而在 tools 這邊, 你可以看到

     name / version 和前面相同, 而且安裝後會以這兩個為目錄名稱

     host :  有四種
             i686-mingw32 :                  windows
             x86_64-apple-darwin :    MAC OSX
             x86_64-pc-linux-gnu :      Linux 64 bit
             i686-pc-linux-gnu :            Linux 32 bit

     archiveFileName: 檔案名稱

      url : 下載位置

      checksum : 用 SHA256 做全檔 checksum

      size : 檔案大小


"tools": [
        {
           "name":"arm-none-eabi-gcc",
           "version":"4.8.3-2014q1",
           "systems":[
              {
                 "host":"i686-mingw32",
                 "archiveFileName":"gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz",
                 "url":"http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-windows.tar.gz",
                 "checksum":"SHA-256:fd8c111c861144f932728e00abd3f7d1107e186eb9cd6083a54c7236ea78b7c2",
                 "size":"84537449"
              },
              {
                 "host":"x86_64-apple-darwin",
                 "url":"http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz",
                 "archiveFileName":"gcc-arm-none-eabi-4.8.3-2014q1-mac.tar.gz",
                 "checksum":"SHA-256:3598acf21600f17a8e4a4e8e193dc422b894dc09384759b270b2ece5facb59c2",
                 "size":"52518522"
              },
              {
                 "host":"x86_64-pc-linux-gnu",
                 "url":"http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz",
                 "archiveFileName":"gcc-arm-none-eabi-4.8.3-2014q1-linux64.tar.gz",
                 "checksum":"SHA-256:d23f6626148396d6ec42a5b4d928955a703e0757829195fa71a939e5b86eecf6",
                 "size":"51395093"
              },
              {
                 "host":"i686-pc-linux-gnu",
                 "url":"http://downloads.arduino.cc/gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz",
                 "archiveFileName":"gcc-arm-none-eabi-4.8.3-2014q1-linux32.tar.gz",
                 "checksum":"SHA-256:ba1994235f69c526c564f65343f22ddbc9822b2ea8c5ee07dd79d89f6ace2498",
                 "size":"51029223"
              }
           ]
        },
新 toolchain json 檔 -

   (先補一個 windows 的, 之後來試 MACOS)


{
"name":"arm-none-eabi-gcc",
"version":"5.2.1-2015q4",
"systems":[
{
"host":"i686-mingw32",
"archiveFileName":"arm-none-eabi-gcc-5.2.1-2015q4-win32.tar.gz",
"url":"https://github.com/neojou/arduino-ameba/raw/master/release/arm-none-eabi-gcc-5.2.1-2015q4-win32.tar.gz",
"checksum":"SHA-256:0938e98f0fff7540e69143de11e00cb917d84912f9b60752859af81d5bd054cd",
"size":"77056145"
}
]
},


有趣的是, 修改之後, 發生一個 compiler error
Google 了一下, 發現的確也有人有同樣問題, 所以我也反應上去了 ^_^

https://github.com/arduino/Arduino/issues/4002

讓我想起以前一個和型態宣告有關的 bug

http://www.cnblogs.com/nightwatcher/p/3253485.html

也難怪 toolchain 越檢查越嚴格了.


修正後可以正常動作.

PS1: 用 5.2.1 build 大小差不多 41K, 原本的大概 42K, 的確會小一點.
PS2: 下回補上 mac os 的並連同 compiler 參數調整.


留言

熱門文章