Arduino IDE 1.6.x package_index.jsonフォーマット仕様

この記事は Arduino IDE 1.6.x package_index.json format specification を翻訳し、簡潔にアレンジしたものです

Arduino IDE 1.6.4 以降、Arduino IDE ボードマネージャはサードパーティ製のハードウェアを自なと動的にインストールするために環境設定ダイアログにシンプルなURLを入力できるようになりました
このURLはサードパーティによって提供され、利用可能なボードとアーカイブをJSONファイルで指定することができます。また、ボードマネージャは新しいボードがリリースされたときに簡単にアップデートできる機能を持っています

JSONインディックスファイルの名前の付け方

他のメーカーとJSONファイル名が重複しないように下記のように次のように名前を付けてください

package_YOURNAME_PACKAGENAME_index.json

最初のpackage_と最後の_index.jsonは必ず付けてください(付けないとIDEが認識できません)。 YOURNAME_PACKAGENAMEは自由に付けも良いですが、ドメイン名を付けることをおすすめします。

package_arduino.cc_index.json

または

package_example.com_avr_boards_index.json

URLは定期的にチェックされます

JSONインディックスファイルの内容

JSONインディックスのルートは packagesの配列です

{
  "packages": [
      PACKAGE_XXXX
   ]
}

PACKAGE_XXXX の中にメタデータとして  PLATFORMS と  TOOLS が必要です

{
  "name": "arduino",
  "maintainer": "Arduino LLC",
  "websiteURL": "http://www.arduino.cc/",
  "email": "packages@arduino.cc",

  "platforms": [
      PLATFORM_AVR,
      PLATFORM_ARM,
      PLATFORM_XXXXX,
      PLATFORM_YYYYY,
  ],

  "tools": [
      TOOLS_COMPILER_AVR,
      TOOLS_UPLOADER_AVR,
      TOOLS_COMPILER_ARM,
      TOOLS_XXXXXXX,
      TOOLS_YYYYYYY,
   ],
}

  •  name コア(core)をインストールするフォルダ。ベンダーフォルダーと一致する必要あり
  •  maintainer ボードマネージャに表示されるベンダー名
  • websiteURL ボードマネージャに表示される More infoリンク
  • emailベンダーのメールアドレス

ツール定義

各ツールのバイナリ配布情報を書きます。ツールには次のものがあります。

  • コンパイラツールチェインa compiler toolchain
  • アップローダー an uploader
  • ファイルプリプロセッサ a file preprocessor
  • デバッガ a debugger
  • ファームウェアアップグレードのためのプログラム a program that performs a firmware upgrade

例えば、Arduinoではavr-gcc(コンパイラ)とavrdude(アップローダー)の2つのツールを使っています

JSONで書くとこのようになります

  {
          "name": "avr-gcc",
          "version": "4.8.1-arduino5",
          "systems": [
            {
              "host": "i386-apple-darwin11",
              "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2",
              "archiveFileName": "avr-gcc-4.8.1-arduino5-i386-apple-darwin11.tar.bz2",
              "size": "24437400",
              "checksum": "SHA-256:111b3ef00d737d069eb237a8933406cbb928e4698689e24663cffef07688a901"
            },
            {
              "host": "x86_64-linux-gnu",
              "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2",
              "archiveFileName": "avr-gcc-4.8.1-arduino5-x86_64-pc-linux-gnu.tar.bz2",
              "size": "27093036",
              "checksum": "SHA-256:9054fcc174397a419ba56c4ce1bfcbcad275a6a080cc144905acc9b0351ee9cc"
            },
            {
              "host": "i686-linux-gnu",
              "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2",
              "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-pc-linux-gnu.tar.bz2",
              "size": "25882375",
              "checksum": "SHA-256:7648b7f549b37191da0b0be53bae791b652f82ac3cb4e7877f85075aaf32141f"
            },
            {
              "host": "i686-mingw32",
              "url": "http://downloads.arduino.cc/tools/avr-gcc-4.8.1-arduino5-i686-mingw32.zip",
              "archiveFileName": "avr-gcc-4.8.1-arduino5-i686-mingw32.zip",
              "size": "46044779",
              "checksum": "SHA-256:d4303226a7b41d3c445d901b5aa5903458def3fc7b7ff4ffef37cabeb37d424d"
            }
          ]
        },

name version は各ツールの名前とバージョンです。各ツールは vendor , name , version を一組にしてユニーク(一意)であり、例えば同じツールの中に違うバージョンを含めることができます。

同じツールの中に違うバージョンがある例

  • (arduino, avr-gcc, 4.8.1-arduino2)
  • (arduino, avr-gcc, 4.8.1-arduino3)
  • (arduino, avr-gcc, 4.8.1-arduino5)
  • (arduino, avrdude, 5.11)
  • (arduino, avrdude, 6.0)
  • (arduino, avrdude, 6.1)
  • …..

違うOS用のツールは  array 配列として含めることもできます。

例えば前述の  avr-gcc の場合は下記のようになります

  • Linux 64-bit (x86_64-linux-gnu),
  • Linux 32-bit (i686-linux-gnu),
  • Windows (i686-mingw32),
  • Mac (i386-apple-darwin11)

IDEは host を参照して正しい値が選択します

その他のフィールド

  • url:  ツールのアーカイブをダウンロードするURL
  • archiveFileName:  ダウンロードしたアーカイブの保存する時のファイル名  (ウェブサーバーによってはダウンロード時にファイル名を取得できない場合があるため)
  • size: アーカイブのサイズをバイトで表したもの
  • checksum: アーカイブのチェックサム。ファイルは破損チェックに使用。書式は  ALGORITH:CHECKSUM , 現在のところMD5,SHA-1,SHA-256がサポートされます。SHA-256がおすすめです。 Unix系またはMacOSXならターミナルから shasum -a 256 filename でSHA-256のチェックサムを生成できます。Windowsなら md5deep やオンラインサービスが利用してチェックサムを生成できます。

platform.txt によるツールパスの決定方法

IDEによってダウンロードされ、展開されたアーカイブは platform.txt の下記のプロパティに従ってフォルダに保存されます。

  • {runtime.tools.TOOLNAME-VERSION.path}
  • {runtime.tools.TOOLNAME.path}

例えば avr-gcc 4.8.1 のフォルダには  {runtime.tools.avr-gcc-4.8.1-arduino5.path} または  {runtime.tools.avr-gcc.path}. が使われます。

プラットフォーム定義

最後に PLATFORMS がどのように作られているか見てみましょう

{
          "name": "Arduino AVR Boards",
          "architecture": "avr",
          "version": "1.6.6",
          "category": "Arduino",
          "help": {
            "online": "http://www.arduino.cc/en/Reference/HomePage"
          },
          "url": "http://downloads.arduino.cc/cores/avr-1.6.6.tar.bz2",
          "archiveFileName": "avr-1.6.6.tar.bz2",
          "checksum": "SHA-256:08ad5db4978ebea22344edc5d77dce0923d8a644da7a14dc8072e883c76058d8",
          "size": "4876916",
          "boards": [
            {"name": "Arduino Yún"},
            {"name": "Arduino Uno"},
            {"name": "Arduino Diecimila"},
            {"name": "Arduino Nano"},
            {"name": "Arduino Mega"},
            {"name": "Arduino MegaADK"},
            {"name": "Arduino Leonardo"},
          ],
          "toolsDependencies": [
            { "packager": "arduino", "name": "avr-gcc", "version": "4.8.1-arduino5" },
            { "packager": "arduino", "name": "avrdude", "version": "6.0.1-arduino5" }
          ]
        },

この例では一つの PACKAGE MyBoard があります。パッケージはAVRアーキテクチャ互換です。 PACKAGE には2つのバージョンがあり、1.00 と 1.01 です。 TOOLS セクションは空(ブランク)なのでインストール不要という意味になります。

この例によって作られたボードマネージャの画面は下記のとおりです。

Boards Manager screenshot

インストールアーカイブの構造

インストールするアーカイブはボードサポートファイルを含みます。サポートされるフォーマットは .zip, .tar.bz2, tar.gz です。コアアーカイブのフォルダ構造は標準的な手動インストールによる Arduino 1.5+ 互換ハードウェアフォルダ構造と若干異なります。アーキテクチャ(例えば avr や arm)フォルダは削除し、すべてのファイルとフォルダは1階層上のフォルダに移動しなければなりません

ボードマネージャに新しいボードを追加したら、ぜひ非公式サードパーティ製ボードサポートURLに登録してください


 

ここから独自に解析した内容です

オフィシャルの JSON インディックス

標準のJSONインデックの格納場所は dist フォルダの中

package_index.json を読む。JSONインディックファイルは package  の配列になっている。Arduino IDE 1.6.5-r2 付属のJSONインディックスは全部で943行

1つのパッケージに ATMEL AVRとSAM、INTEL GalileoとEdisonが入っている

JSON Editor Onlineで見たところ

ボードマネージャで設定を見るとバージョンが1.6.2~1.6.7まで6個あることが分かる

platform バージョン 1.6.7 を展開したところ

architectureで指定されたavrフォルダはダウンロード時に自動的に生成されるようだ

→ダウンロードさせるアーカイブにはアーキテクチャフォルダを含めないように指示がされている

アーキテクチャ avr と sam で2種類のダウンロード先が指定されている

avrアーキテクチャで定義されているボードは20種類。自作派にはUno,Diecimila,Pro,Miniくらいしか興味がないかも

以下はakafuguのもの

ここの情報はボードマネージャに表示される。ただ、表示されるだけに使われているようだ。

Akafugu とSeeedのJSONインディックスを追加してみる

ボードマネージャに追加されたボード

ボードメニューにボードが追加された

インストールされたコアの場所

  • GNU/Linuxes: ~/.arduino15/packages/
  • Windows: %APPDATA%\Arduino15\packages\
  • MacOSXes: ~/Library/Arduino15/packages/

akafuguのボードをインストールすると、ベクダーフォルダーが作られてアーカイブが展開される
%AppData%\Roaming\Arduino15\packages + ベンダーフォルダー

このベンダーフォルダー名はJSONインディックスから取得されている

\akafugu\hardware\avr\ にダウンロードされたアーカイブが展開される

akafuguのアーカイブ

オフィシャルのavrアーキテクチャのアーカイブ

Seeedのアーカイブ