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ファイル名が重複しないように下記のように次のように名前を付けてください
[wc_highlight color=”gray”]package_YOURNAME_PACKAGENAME_index.json[/wc_highlight] 最初の[wc_highlight color=”gray”]package_[/wc_highlight]と最後の[wc_highlight color=”gray”]_index.json[/wc_highlight]は必ず付けてください(付けないとIDEが認識できません)。 [wc_highlight color=”gray”]YOURNAME_PACKAGENAME[/wc_highlight]は自由に付けも良いですが、ドメイン名を付けることをおすすめします。
[wc_highlight color=”gray”]package_arduino.cc_index.json[/wc_highlight] または
[wc_highlight color=”gray”]package_example.com_avr_boards_index.json[/wc_highlight] URLは定期的にチェックされます

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

JSONインディックスのルートは [wc_highlight color=”gray”]packages[/wc_highlight]の配列です
[wc_highlight color=”gray”]

{
  "packages": [
      PACKAGE_XXXX
   ]
}
[wc_highlight color=”gray”]PACKAGE_XXXX [/wc_highlight] の中にメタデータとして [wc_highlight color=”gray”] PLATFORMS [/wc_highlight] と [wc_highlight color=”gray”] TOOLS [/wc_highlight]が必要です
[wc_highlight color=”gray”]
{
  "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,
   ],
}
[/wc_highlight]
  • [wc_highlight color=”gray”] name [/wc_highlight] コア(core)をインストールするフォルダ。ベンダーフォルダーと一致する必要あり
  • [wc_highlight color=”gray”] maintainer [/wc_highlight] ボードマネージャに表示されるベンダー名
  • [wc_highlight color=”gray”]websiteURL[/wc_highlight] ボードマネージャに表示される More infoリンク
  • [wc_highlight color=”gray”]email[/wc_highlight]ベンダーのメールアドレス

ツール定義

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

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

例えば、Arduinoではavr-gcc(コンパイラ)とavrdude(アップローダー)の2つのツールを使っています
JSONで書くとこのようになります
[code lang=”javascript” collapse=”false” toolbar=”true”] {
"name": "avr-gcc",
"version": "4.8.1-arduino5",
"systems": [
{
"host": "i386-apple-darwin11",
"url": "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": "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": "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": "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"
}
] },
[/code] [wc_highlight color=”gray”] name [/wc_highlight]と[wc_highlight color=”gray”] version [/wc_highlight] は各ツールの名前とバージョンです。各ツールは 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用のツールは [wc_highlight color=”gray”] array [/wc_highlight]配列として含めることもできます。
例えば前述の [wc_highlight color=”gray”] avr-gcc [/wc_highlight]の場合は下記のようになります

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

IDEは[wc_highlight color=”gray”] host [/wc_highlight]を参照して正しい値が選択します
その他のフィールド

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

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

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

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

例えば avr-gcc 4.8.1 のフォルダには [wc_highlight color=”gray”] {runtime.tools.avr-gcc-4.8.1-arduino5.path} [/wc_highlight] または [wc_highlight color=”gray”] {runtime.tools.avr-gcc.path}. [/wc_highlight]が使われます。

プラットフォーム定義

最後に[wc_highlight color=”gray”] PLATFORMS [/wc_highlight]がどのように作られているか見てみましょう
[code lang=”javascript” collapse=”false” toolbar=”true”] {
"name": "Arduino AVR Boards",
"architecture": "avr",
"version": "1.6.6",
"category": "Arduino",
"help": {
"online": "www.arduino.cc/en/Reference/HomePage"
},
"url": "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" }
] },
[/code] この例では一つの [wc_highlight color=”gray”] PACKAGE [/wc_highlight] MyBoard があります。パッケージはAVRアーキテクチャ互換です。 [wc_highlight color=”gray”] PACKAGE [/wc_highlight] には2つのバージョンがあり、1.00 と 1.01 です。 [wc_highlight color=”gray”] TOOLS [/wc_highlight]セクションは空(ブランク)なのでインストール不要という意味になります。
この例によって作られたボードマネージャの画面は下記のとおりです。
Boards Manager screenshot

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

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


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

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

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

package_index.json を読む。JSONインディックファイルは[wc_highlight color=”gray”] package [/wc_highlight]  の配列になっている。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のアーカイブ