hiraga
2017年6月5日 15時33分
いつもお世話になっております、平賀と申します。
Node.jsとnpmでインストールした「serialport」をユーザーランドに追加したのですが以下のようなエラーが出てしまい、nodejsでのシリアル通信ができません。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/usr/lib/node_modules/serialport/node_modules/bindings/bindings.js:83
throw e
^
Error: /usr/lib/node_modules/serialport/build/Release/serialport.node: cannot open shared object fi
le: No such file or directory
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at bindings (/usr/lib/node_modules/serialport/node_modules/bindings/bindings.js:76:44)
at Object. (/usr/lib/node_modules/serialport/lib/bindings.js:3:35)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
npmでインストールした他のパッケージは問題無く使用できています。
また、tip、minicomでのシリアル通信は問題無く行えました。
開発環境はATDE5で、使用しているのはArmadillo IoT G2です。
ATDE5のnodeはv0.10.29、npmはv1.4.14で、armadilloのnodejsはv0.10.29です。
Node.jsのインストールは「https://users.atmark-techno.com/blog/53/1644」を、
npmでのインストールは「https://users.atmark-techno.com/blog/53/2061」を参考に行いました。
どのようにすればNode.jsでシリアル通信が出来るでしょうか?
ご教授お願いいたします。
コメント
at_koseki
古関です。
> ATDE側でクロスでインストールしたものをatmark-dist/romfsにコピーするかしたら動きませんでしょうか。
> [ATDE]$ export AR=arm-linux-gnueabi-ar
> [ATDE]$ export CC=arm-linux-gnueabi-gcc
> [ATDE]$ export CXX=arm-linux-gnueabi-g++
> [ATDE]$ export LINK=arm-linux-gnueabi-g++
> [ATDE]$ export npm_config_arch=arm
> [ATDE]$ npm install serialport --arch=i386 --target_arch=arm
をこちらでも試して見ましたがArmadill-IoT G2で動きました。
hiraga
hiraga
at_koseki
古関です。
webで検索して出てきたものを
修正しただけですが、ソースを添付します。
拡張子jsがシステムの都合上添付できないので、txtになっています。
CON1アドオンインターフェースに RS232Cアドオンモジュール を接続して、
対向機から何か文字を入力すると、Armadillo側に表示されました。
ファイル | ファイルの説明 |
---|---|
serial.js_.txt |
hiraga
at_koseki
2017年6月15日 11時32分
古関です。
「serialport」に含まれるファイルに
cソースから生成したオブジェクトファイルがいくつかあるようです。
- serialport.o
- serialport_poller.o
- serialport_unix.o
ATDE(x86)でインストールしたものをG2(ARM)側にコピーしているだけなので
オブジェクトファイルがx86用で、動かないとかじゃないでしょうか。
[ATDE]$ file node_modules/serialport/build/Release/obj.target/serialport/src/serialport.o
node_modules/serialport/build/Release/obj.target/serialport/src/serialport.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
実際にシリアルにアクセスする部分はc言語で書くことで、処理を効率化しているのですかね。
rubygemのserialもそうだった覚えがあります。
G2をSDブートでdebian起動して、ARMのネイティブ環境でserialportをインストールし、atmark-dist/romfsにコピーするか、
ATDE側でクロスでインストールしたものをatmark-dist/romfsにコピーするかしたら動きませんでしょうか。
前者はATDEと同じやり方でできると思います。
後者は以下のような手順でできないでしょうか。
[ATDE]$ export AR=arm-linux-gnueabi-ar
[ATDE]$ export CC=arm-linux-gnueabi-gcc
[ATDE]$ export CXX=arm-linux-gnueabi-g++
[ATDE]$ export LINK=arm-linux-gnueabi-g++
[ATDE]$ export npm_config_arch=arm
[ATDE]$ npm install serialport --arch=i386 --target_arch=arm