Mbed OS version of IoT.js implementation running on GR-PEACH
ビルド方法
ビルド環境セットアップ
Host PC要件 : Ubuntu 16.04 (64-bit)
1. 以下のコマンドを実行し、下表に示すツールをインストールします。
$ sudo apt update $ sudo apt upgrade $ sudo apt install [Package]
Package | Version |
build-essential | 12.1ubuntu2 |
gyp | 0.1+20150913git1f374df9-1ubuntu1 |
mercurial | 3.7.3-1ubuntu1 |
cmake | 3.5.1-1ubuntu3 |
git | 1:2.7.4-0ubuntu1.4 |
python2.7 | 2.7.12-1ubuntu016.04.3 |
valgrind | 1:3.11.0-1ubuntu4.2 |
python-pip | 8.1.1-2ubuntu0.4 |
2. 以下のコマンドを実行してMbed OS用ビルドツール mbed CLIをインストールします。
$ sudo -H pip install mbed-cli
3. GNU Arm Embedded Toolchainをインストールします。
- 下記URLからLinux用パッケージ (gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2) をダウンロードしてください。
https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2?revision=2cc92fb5-3e0e-402d-9197-bdfc8224d8a5?product=GNU%20Arm%20Embedded%20Toolchain,64-bit,,Linux,6-2017-q2-update
- ダウンロードしたファイルを任意のディレクトリに展開します。
(以下、展開先を${TOOLCHAIN}と記載します)
tar xjf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
- ツールチェインのパスを設定します。
環境変数を使用する場合
$ export GCC_ARM_ROOT=${TOOLCHAIN}/gcc-arm-none-eabi-6-2017-q2-update/bin $ export PATH=$GCC_ARM_ROOT:$PATH
mbed CLIで指定する場合
$ mbed config -G GCC_ARM_PATH $GCC_ARM_ROOT
iotjs環境のビルド
1. 本プログラムのクローン
下記コマンドを実行し、本プログラムをクローンしてください。
$ hg clone https://HinoNaka@os.mbed.com/users/HinoNaka/code/GR-PEACH_mbed-os-iotjs/
クローンが正常に終了すると、GR-PEACH_mbed-os-iotjs という名称のディレクトリが生成されますので、下記コマンドで当該ディレクトリへ移動してください。
$ cd GR-PEACH_mbed-os-iotjs
(Optional)
GR-PEACH-mbed-os-iotjsディレクトリを指す環境変数 ROOTを設定してください。以降の記載は本環境変数が設定されているものとします。
$ export ROOT=$(PWD)
2. 作業用ディレクトリ(e.g. work)を作成し、当該ディレクトリに移動してください。
$ mkdir -p work $ cd work
(Optional)
作業用ディレクトリを指す環境変数 WORK を設定してください。以降の記載は本環境変数 が設定されているものとします。
$ export WORK=$(PWD)
3. iotjsのソースツリーを取得します。
$ git clone https://github.com/pando-project/iotjs
クローンが正常に終了するとiotjsというディレクトリが生成されますので、当該ディレクトリに移動してください。
$cd iotjs
コミットID: acae9c8b2d40e7598b8d39b630b79113ce880a7e を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)
$ git checkout -b posix acae9c8b2d40e7598b8d39b630b79113ce880a7e
4. mbed-osセットアップ
Mbed OSソースツリーを格納するフォルダを生成し、当該フォルダへ移動します。
$ mkdir -p $(WORK)/iotjs/src/platform/mbedos5 $ cd $(WORK)/iotjs/src/platform/mbedos5
Mbed OSのソースツリーをクローンします。
$ git clone -b mbed-os-5.9 https://github.com/ARMmbed/mbed-os.git
クローンが正常に終了するとmbed-osというディレクトリが生成されますので、当該ディレクトリに移動してください。
$ cd mbed-os
コミットID: 50bd61a4a72332baa6b1bac6caccb44dc5423309 を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)
$ git checkout -b posix 50bd61a4a72332baa6b1bac6caccb44dc5423309
5. sd-driverの取得
下記コマンドでmbedos5ディレクトリへ移動します。
$ cd $(WORK)/iotjs/src/platform/mbedos5
sd-driverをクローンします。
$ git clone https://github.com/ARMmbed/sd-driver.git
クローンが正常終了するとsd-driverディレクトリが生成されますので、当該ディレクトリへ移動します。
$ cd sd-driver
コミットID: c8ae38fb291e086232566b0f1372cfb69c277e84 を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)
$ git checkout -b posix c8ae38fb291e086232566b0f1372cfb69c277e84
6. mbed-gr-libsの取得
下記コマンドでmbedos5ディレクトリへ移動します。
$ cd $(WORK)/iotjs/src/platform/mbedos5
mbed-gr-libsをクローンします。
$ git clone https://github.com/d-kato/mbed-gr-libs
クローンが正常終了するとmbed-gr-libsディレクトリが生成されますので、当該ディレクトリへ移動します。
$ cd mbed-gr-libs
コミットID: d921d611d596ecaebaab49070ef82450c583309c を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)
$ git checkout -b posix d921d611d596ecaebaab49070ef82450c583309c
7. AsciiFONTの取得
下記コマンドでmbedos5ディレクトリへ移動します。
$ cd $(WORK)/iotjs/src/platform/mbedos5
AsciiFONTライブラリを追加します。
$ mbed add https://os.mbed.com/teams/Renesas/code/AsciiFont/
8. iotjs環境のビルド
下記コマンドでiotjs環境のビルドディレクトリに移動し、ビルドを実行します。
$ cd $(WORK)/iotjs $ ./tools/build.py --no-snapshot
9. GR-PEACH用コードのコピー
(Optional) 既存のiotjs環境に上書きする場合、下記コマンドを実行してください。
$ rm -rf $(WORK)/iotjs/deps/posix $ rm -rf $(WORK)/iotjs/src/ext-modules $ rm -rf $(WORK)/iotjs/src/platform/mbedos5/iotjs_def.h
下記コマンドでGR-PEACH用コードをコピーします。
$ cp -pr $(ROOT)/src/iotjs/* $(WORK)/iotjs/
10. lwipパッチ適用
以下コマンドでlwipパッチを適用します。
$ cd $(WORK)/iotjs/src/platform/mbedos5/mbed-os $ git apply lwip_improve.patch
11. ESP32 TRNG対応パッチ適用
以下コマンドでESP32のTRNGを活用するためのパッチを適用します。
$ cd $(WORK)/iotjs/src/platform/mbedos5/mbed-os $ git apply trng_support.patch
12. Mbed OS版iotjs環境のビルド
下記コマンドを実行してMbed OS版iotjs環境をビルドします。
(リリースビルドの場合)
$ cd $(WORK)/iotjs/src/platform/mbedos5 $ make clean; make DEBUG=0
(デバッグビルドの場合)
$ cd $(WORK)/iotjs/src/platform/mbedos5 $ make clean; make DEBUG=1
13. ビルドが正常に終了すると、以下の通りバイナリが生成されます。
(リリースビルドの場合)
$ ls -l ${WORK}/iotjs/src/platform/mbedos5/BUILD/RZ_A1H/GCC_ARM-RELEASE/iotjs.bin
(デバッグビルドの場合)
$ ls -l ${WORK}/iotjs/src/platform/mbedos5/BUILD/RZ_A1H/GCC_ARM-DEBUG/iotjs.bin
実行方法
1. GR-PEACHにmicro SDカードを挿入します。
2. GR-PEACHのEthernetポートから遠い側のUSBポートとHost PCをマイクロUSBケーブルで接続します。
3. Host PCでGR-PEACHが『mbed:』ドライブとして認識されたら、iotjs.binをmbedドライブにコピーします。
4. ターミナルS/Wを立上げ、『mbed Serial Port』と接続します。
シリアルポートは下記設定としてください。
Baud rate | 115200 | |||
Data | 8 bit | |||
Parity | none | |||
Stop | 1 bit | |||
Flow control | none |
5. 正常に書込みが終了したらGR-PEACHのRESETボタンを押下します。
6. ターミナルS/W上に下記メッセージが表示されます。
7. Enterキーを押下してコード入力モードに移行します。
8. 実行するJavascriptコードをターミナルソフトウェアに貼り付けてEnterキーを押下すると、実行開始します。Javascriptコード例については、test/case.txtを参照ください。
Revision 4:52c937978bb3, committed 2019-07-18
- Comitter:
- Osamu Nakamura
- Date:
- Thu Jul 18 10:43:16 2019 +0900
- Parent:
- 3:b4a4111c9e15
- Commit message:
- Remove unnecessary documents
Changed in this revision
--- a/doc/lbg[N«̧äÉ¢Ä.txt Thu Jul 18 10:23:07 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -================================== - lbg[N«̧äÉ墀 -================================== - -javascript ©çlbg[N«ð§ä·éû@É¢ÄLqµÜ·B - -¡ nic W [ - - nodejs â iotjs ÅÍWÀ³êĢȢAlbg[N«ð§ä·é½ßÌ -nic W [ðWÀµÄ¢Ü·B - - -¡ nic W [Ì@\ - - nic W [ÉͺLÌ@\ª èÜ·B - - Eenumerate - {[hÉÚ³ê½ NIC êð澵ܷB - Eifup - IPAmaskAgatewayA(dns)ðwèµÄlbg[NÖÚ±µÜ·B - Eifdown - lbg[N©çØfµÜ·B - Eifconfig - óÔð澵ܷB - Entpdate - C^[lbgƯúµÜ·B - - ÁÉwèªÈ¢êÍ javascript ÌæªÉÌR[hðÜßĨ±Æð -¨©ßµÜ·B - - var nic = require('nic'); - var eth = nic.enumerate().ETHERNET; - if( eth ) { - eth.ifup(); // DHCP - eth.ntpdate({ server: "ntp.nict.jp" }); // ¯ú - } - - nic W [ÌÚ×É¢ÄÍAudoc/api/nic.htmlvð²¾³¢B - - Èã
--- a/doc/rhû@.txt Thu Jul 18 10:23:07 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -============== - rhû@ -============== - -¡XVð - - 2018N0827ú i1jÓÌèðXV - 2018N1220ú i2jÓÌèðXV - svÈèÌíE® - 2019N0201ú iotjsÌæ¾³ðÏXiàeÍÏXȵj - i3jÓÌèðXV - -¡rh«\z - - ®ìmF« - OS : Ubuntu 16.04 - - 1) pbP[WXgÌXV - sudo apt update - - 2) CXg[ÏÝpbP[WÌXV - sudo apt upgrade - - 3) pbP[WÌÇÁ - sudo apt install [package] - - ypackagez : yversionz - build-essential : 12.1ubuntu2 - gyp : 0.1+20150913git1f374df9-1ubuntu1 - mercurial : 3.7.3-1ubuntu1 - cmake : 3.5.1-1ubuntu3 - git : 1:2.7.4-0ubuntu1.4 - python2.7 : 2.7.12-1ubuntu0~16.04.3 - valgrind : 1:3.11.0-1ubuntu4.2 - python-pip : 8.1.1-2ubuntu0.4 - - 4) Mbed CLI ÌCXg[ - sudo -H pip install mbed-cli - - 5) gcc-arm-none-eabi ÌCXg[i2j - ȺÌURL©ç gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 ð - _E[hµÜ·B - https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads - - _E[hµ½t@CðCÓÌfBNgÉðµÜ·B - tar xjf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 - - pXÌÝèðs¢Ü·B - # «Ïðgp·éê - export GCC_ARM_ROOT=ðæÌpX/gcc-arm-none-eabi-6-2017-q2-update/bin - export PATH=$GCC_ARM_ROOT:$PATH - - # Mbed CLI Åwè·éê - mbed config -G GCC_ARM_PATH $GCC_ARM_ROOT - - -¡rhû@É墀 - - ºLÌR}hÅJ«Ì\zErhðs¢Ü·B - - # ìÆfBNgì¬ - export WORK=${HOME}/work - mkdir -p ${WORK} - cd ${WORK} - - # iotjsæ¾ - git clone https://github.com/pando-project/iotjs - cd iotjs - git checkout -b posix acae9c8b2d40e7598b8d39b630b79113ce880a7e - - # mbed-osæ¾ - mkdir -p ${WORK}/iotjs/src/platform/mbedos5 - cd ${WORK}/iotjs/src/platform/mbedos5 - - git clone -b mbed-os-5.9 https://github.com/ARMmbed/mbed-os.git - cd mbed-os - git checkout -b posix 50bd61a4a72332baa6b1bac6caccb44dc5423309 - - # sd-driveræ¾ - cd ${WORK}/iotjs/src/platform/mbedos5 - git clone https://github.com/ARMmbed/sd-driver.git - cd sd-driver - git checkout -b posix c8ae38fb291e086232566b0f1372cfb69c277e84 - - # mbed-gr-libsæ¾i1j - cd ${WORK}/iotjs/src/platform/mbedos5 - git clone https://github.com/d-kato/mbed-gr-libs - cd mbed-gr-libs - git checkout -b posix d921d611d596ecaebaab49070ef82450c583309c - - # AsciiFontæ¾i3j - cd ${WORK}/iotjs/src/platform/mbedos5 - mbed add https://os.mbed.com/teams/Renesas/code/AsciiFont/ - - # iotjsrh - cd ${WORK}/iotjs - ./tools/build.py --no-snapshot - - # \[XR[hðzui3j - # ù¶Ì«Éã«·éêÍAȺÌt@CíðÀsµÄ¾³¢B - rm -rf ${WORK}/iotjs/deps/posix - rm -rf ${WORK}/iotjs/src/ext-modules - rm ${WORK}/iotjs/src/platform/mbedos5/iotjs_def.h - - # [CDROM]Ì src/iotjs/* ð iotjs/ Éã«Rs[ - cp -pr [CDROM]/src/iotjs/* ${WORK}/iotjs/ - - # lwippb`Kp - cd ${WORK}/iotjs/src/platform/mbedos5/mbed-os - git apply lwip_improve.patch - - # Mbed TLS Å Wireless Camera Shield ÉÚ³êÄ¢é ESP32 Ì^«¶í - # ðgp·éêÍȺÌèðÀsµÄ¾³¢Bi2j - cd ${WORK}/iotjs/src/platform/mbedos5/mbed-os - git apply trng_support.patch - - ##ym[gz - ## Wireless Camera Shield ðÚ±¹¸É IoT.js ð®ì³¹½¢êâA - ## ESP32 pb`ðKpµÈ¢êÍAºLQÓÌÏXðsÁÄÄrhµÄ¾³¢B - t@CpXFiotjs / src / platform / mbedos5 / Makefile - 35sÚ: - ÏXOj --cmake-param=-DENABLE_MODULE_VIDEO=ON \ - ÏXãj --cmake-param=-DENABLE_MODULE_VIDEO=OFF \ - t@CpXFiotjs / src / platform / mbedos5 / mbed_app.json - 107sÚ: - ÏXOj "ENABLE_MODULE_VIDEO=1", - ÏXãj "ENABLE_MODULE_VIDEO=0", - - # mbed«ü¯rh - cd ${WORK}/iotjs/src/platform/mbedos5 - make clean; make DEBUG=0 - ¦debugrh·éêÍ DEBUG=1 Ƶľ³¢ - - # GR-PEACH É«ÞoCit@CªÈºÉ¶¬³êÜ· - ls -l ${WORK}/iotjs/src/platform/mbedos5/BUILD/RZ_A1H/GCC_ARM/iotjs.bin - - - Èã
--- a/doc/W [Îóµ.txt Thu Jul 18 10:23:07 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -====================== - W [Îóµ -====================== - -1) ÎW [É墀 -~~~~~~~~~~~~~~~~~~~~~~~~~ - IoT.js ÌW [inodejsÌW [Éj̤¿ - ºLW [É¢ĮìmF𮹵ĢܷB - - assert, buffer, console, dgram, dns, events, fs, - http, https, module, net, stream, timers, tls, process - - ãLÈOÌá¦Î BLE ÈÇÌW [ÉÍεĢܹñB - -2) API Reference É墀 -~~~~~~~~~~~~~~~~~~~~~~~~~ - »ÝgpÌ IoT.js Ìo[WÍȺÉÈèÜ·B - - IoT.js version - Wed Jul 4 12:03:55 2018 - commit : acae9c8b2d40e7598b8d39b630b79113ce880a7e - - ãLo[WÌeW [Ì API dlÉ¢ÄÍAȺð²Qƾ³¢B - - IoT.js API Reference - https://github.com/pando-project/iotjs/blob/acae9c8b2d40e7598b8d39b630b79113ce880a7e/docs/api/IoT.js-API-reference.md - - Èã
Binary file doc/ÚAÖê.xlsx has changed
--- a/doc/gpû@.txt Thu Jul 18 10:23:07 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -============ - gpû@ -============ - -gpû@É¢ÄÍAºLÌhL gðQƵľ³¢B - - - test/case.txt - - - Èã
--- a/doc/§À.txt Thu Jul 18 10:23:07 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -============ - §À -============ - -»ÝAȺ̧Àª èÜ·B - -¡§À - -1) POSIX/LINUX ÖÌÚAóµÉ墀 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ÚAÖÍ IoT.js ð®ì³¹é½ßÉKvÈàÌÌÝÆÈèÜ·B - POSIX/LINUX ÌÖdlÉ®SεĢéí¯ÅÍ èܹñB - ÚAóµÚ×É¢ÄÍAºLÌhL gðQƵľ³¢B - - - ÚAÖê.xlsx - - -2) Åå\PbgÉ墀 -~~~~~~~~~~~~~~~~~~~~~~~~~ - LWIP ÉÄgpÂ\È\PbgâTCYðºLÝèt@CÉÄ - ÝèµÄ¢Ü·B - ÝèðÏX·éêÍÝèt@CðÒWµÄÄrhµÄ¾³¢B - - t@CpXF - iotjs / src / platform / mbedos5 / mbed_app.json - - 161: "target_overrides": { - +1: "*": { - +1: "lwip.socket-max": 60, - +1: "lwip.tcp-server-max": 60, - +1: "lwip.tcp-socket-max": 60, - +1: "lwip.udp-socket-max": 60, - +1: "lwip.pbuf-pool-size": 10, - +1: "lwip.pbuf-pool-bufsize": 1072, - +1: "lwip.mem-size": 3200 - +1: } - +1: } - - -3) IPv6 É墀 -~~~~~~~~~~~~~~~~ - mbed-os(5.9.3)ÌftHgÝèÍIPv6ª³øÉÈÁĢܷB - IPv6ðLøÉ·éêͺLÝèt@CðÒWµÄÄrhµÄ¾³¢B - ¦È¨ IPv6 ðLøɵ½êÌe¿ÍͨæÑ®ìÉ¢ÄÍ¢mFÅ·B - - t@CpXF - iotjs / src / platform / mbedos5 / mbed_app.json - - 161: "target_overrides": { - +1: "*": { - <ÇÁ>: "lwip.ipv6-enabled": true, - +1: "lwip.socket-max": 60, - +1: "lwip.tcp-server-max": 60, - +1: "lwip.tcp-socket-max": 60, - +1: "lwip.udp-socket-max": 60, - +1: "lwip.pbuf-pool-size": 10, - +1: "lwip.pbuf-pool-bufsize": 1072, - +1: "lwip.mem-size": 3200 - +1: } - +1: } - - -4) lbg[N«̧äÉ墀 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - »óAlbg[NÖÌÚ±Í EthernetInterface NXÖ}bsO³êé -foCX(GR-Peach ÌêÍI{[hÌfoCX)ÌÝðT|[gµÄ¢Ü·B - javascript ©ç§ä·éû@É¢ÄÍAºLÌhL gðQƵľ³¢B - - - lbg[N«̧äÉ¢Ä.txt - - -5) JELCḐäÉ墀 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - videoW [(J)ÆdisplayW [(LCD)ð¯Égp·éêA - display.openLCD() ðÀsãÉ video.openCMOSCamera() ðÀsµÄ¾³¢B - - ܽAlcd.start() Ì format Ìwè¢ÄAeC[ÉεÄñÀsÌÝ - LøÉÈèÜ·B - ññÚÈ~ÍñÆÙÈé format ðwèµÄàAñÌÝèªLøÉÈèÜ·B - - áj - lcd.startSync(0, buf, 'rgb565'); - lcd.stopSync(0); - lcd.startSync(0, buf, 'rgb888'); // format Í 'rgb565' ÉÈèÜ· - - -6) IoT.js IWiÌ http(https) W [ÌâèÉ墀 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IoT.js IWiÌ http(https) W [ÉÄAêñÌ SOCKET ÊMÅÍè«ê - È¢TCYÌf[^ðMµæ¤Æ·éÆAññÚÈ~ÉM³êéf[^ðÜÞÌæ - ªMOÉðú (jó) ³êĵܤ±Æªí©èܵ½B - - ±Ìâèðñð·é½ßAÌÎôðs¢Üµ½B - - 1. IoT.js IWiÌMÖ write() ðI[o[ChµA»ÌÖàÅ - f[^ð 究ßêñÌ SOCKET ÊMÅè«êéTCYɪµÄ¨B - ªµ½f[^ðIWiÌMÖÉn·B - - 4096 oCg²Æɪ - - [UR[h©çÍ write() ÖÍgXyAg - 2. POSIX wÌ SOCKET ÖÌMÍAøÅwè³ê½TCYªðèØéÜÅ - [v·éB - - ãL 1. ðÀ»·é½ßAhttp(s) W [ðgp·éêÍ fixup W [ð - Ìæ¤É require µÄ¾³¢B - - - http W [ðgp·éêF - - require('fixup')('http'); // http ð require ·é¼OÉÇL - // http W [ðC·éAÌÓ - var http = require('http'); - - - https W [ðgp·éêF - - require('fixup')('https'); // https ð require ·é¼OÉÇL - // https W [ðC·éAÌÓ - var https = require('https'); - - ±ÌLqð·éÆ IoT.js IWiÌMÖªu«·¦çêÜ·B - - Èã