×

Node-REDが動作しない時の解析方法

2019-05-13

Raspberry Piで動作しているLazuriteのNode-RED用ライブラリは、以下の構成で動作しています。

 

5 Node-RED node-red-contrib-lazurite Node-REDのLazurite Node
4 Node-RED / 共有ライブラリインタフェース V8 Node用C言語アクセラレータ
3 Linux共有ライブラリ SO liblazurite
2 Linuxローダブルカーネルモジュール KO lazdriver.ko
1 ハードウエア Lazurite Pi Gateway

下位レイヤから順番に動作状況を確認していく必要があります。

1.ハードウエア

ハードウエア単体での評価はこんなんです。2. linuxローダブルカーネルモジュールの動作と合わせて、動作の確認をしてください。

2. Linuxローダブルカーネルモジュール

2−1.ローダブルカーネルモジュールの作成

ソースコード: /home/pi/driver/LazDriver

lazdriver.koが存在している必要があります。

ない場合は、makeコマンドを実行すると、lazdriver.koが作成されます。正しく作成できない場合は、LazuriteInstallerのsetup.shが正常に終了していない可能性があります。

pi@raspberrypi:~/driver/LazDriver $ make
echo drv-lazurite.c subghz_api.c aes/aes.c mach.c  arib_lazurite.c macl.c phy/phy_ml7396.c hwif/hal-lzpi.c  hwif/random-lzpi.c  hwif/spi-lzpi.c hwif/i2c-lzpi.c 
drv-lazurite.c subghz_api.c aes/aes.c mach.c arib_lazurite.c macl.c phy/phy_ml7396.c hwif/hal-lzpi.c hwif/random-lzpi.c hwif/spi-lzpi.c hwif/i2c-lzpi.c
make -C /lib/modules/4.9.80-v7+/build SUBDIRS=/home/pi/driver/LazDriver modules
make[1]: Entering directory '/home/pi/linux'
  CC [M]  /home/pi/driver/LazDriver/drv-lazurite.o
  CC [M]  /home/pi/driver/LazDriver/subghz_api.o
  CC [M]  /home/pi/driver/LazDriver/aes/aes.o
  CC [M]  /home/pi/driver/LazDriver/mach.o
  CC [M]  /home/pi/driver/LazDriver/arib_lazurite.o
  CC [M]  /home/pi/driver/LazDriver/macl.o
  CC [M]  /home/pi/driver/LazDriver/phy/phy_ml7396.o
  CC [M]  /home/pi/driver/LazDriver/hwif/hal-lzpi.o
  CC [M]  /home/pi/driver/LazDriver/hwif/random-lzpi.o
  CC [M]  /home/pi/driver/LazDriver/hwif/spi-lzpi.o
  CC [M]  /home/pi/driver/LazDriver/hwif/i2c-lzpi.o
  LD [M]  /home/pi/driver/LazDriver/lazdriver.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/pi/driver/LazDriver/lazdriver.mod.o
  LD [M]  /home/pi/driver/LazDriver/lazdriver.ko
make[1]: Leaving directory '/home/pi/linux'
make -C /lib/modules/4.9.80-v7+/build SUBDIRS=/home/pi/driver/LazDriver modules
make[1]: Entering directory '/home/pi/linux'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory '/home/pi/linux'

pi@raspberrypi:~/driver/LazDriver $ ls lazdriver.ko 
lazdriver.ko

2-2. モジュールのロード

モジュールのロードして、ログメッセージを表示すると以下のようになります。

「Lazurite MAC address: 001d 1290 0004 2f74」の部分は、無線モジュールにシールが貼ってあるMACアドレスの内容が表示されます。

pi@raspberrypi:~/driver/LazDriver $ sudo insmod lazdriver.ko
pi@raspberrypi:~/driver/LazDriver $ tail -n 5 /var/log/syslog
May 13 14:20:52 raspberrypi kernel: [340227.419024] [HAL] lzpi_rf_main_th thread start pid=29772
May 13 14:20:52 raspberrypi kernel: [340227.419103] [HAL] lzpi_rx_led_thr thread start pid=29773
May 13 14:20:52 raspberrypi kernel: [340227.419173] [HAL] lzpi_tx_led_thr thread start pid=29774
May 13 14:20:52 raspberrypi kernel: [340227.420963] Lazurite MAC address: 001d 1290 0004 2f74
May 13 14:20:52 raspberrypi kernel: [340227.420969] [drv-lazurite] End of init

正常に動作しているlazurite.koをrmmodによりLinuxカーネルからアンロードし、/var/log/syslogのログメッセージを表示すると以下のようになります。

pi@raspberrypi:~/driver/LazDriver $ sudo rmmod lazdriver
pi@raspberrypi:~/driver/LazDriver $ tail -n 5 /var/log/syslog
May 13 14:25:00 raspberrypi kernel: [340475.754542] [HAL] rf_main_thread thread end
May 13 14:25:00 raspberrypi kernel: [340475.754650] [HAL] tx_led_thread thread end
May 13 14:25:00 raspberrypi kernel: [340475.754704] [HAL] rx_led_thread thread end
May 13 14:25:00 raspberrypi kernel: [340475.764800] spi_remove
May 13 14:25:00 raspberrypi kernel: [340475.765064] [drv-lazurite] exit remove
pi@raspberrypi:~/driver/LazDriver $

ここまでの作業で問題がある場合は、ハードウエアの故障、もしくは正しく環境設定が行えていない可能性があります。
LazuriteInstallerのsetup.shでLazuriteをインストールするための環境設定から行ってください。

手順はこちら

3.Linux共有ライブラリ

ソースコード: /home/pi/driver/liblazurite/lib

ソースコードのパスに入り、makeコマンドを実行すると以下のようになります。

pi@raspberrypi:~/driver/liblazurite/lib $ make
g++ -shared -fPIC -o liblazurite.so dyliblazurite.cpp
sudo cp liblazurite.so /usr/lib
g++ -c dyliblazurite.cpp -o liblazurite.o
ar r liblazurite.a liblazurite.o
ar: creating liblazurite.a
pi@raspberrypi:~/driver/liblazurite/lib $ 

 

ここまで終わると、「/usr/lib」にliblazurite.soが保存されているのが確認できます。

 

pi@raspberrypi:~/driver/liblazurite/lib $ ls /usr/lib/liblazurite.so
/usr/lib/liblazurite.so

共有ライブライブラリの動作確認をするためには、

「/home/pi/driver/liblazurite/sample」のファイルを使用してください。

例えば、以下のようにサンプルソフトウエアをビルドした後に、sample_rx_raw 26を実行すると、MACアドレスを表示した後にデータの受信を行います。

pi@raspberrypi:~/driver/liblazurite/sample $ make
g++ -I./ -o sample_tx64 sample_tx64.cpp -L/usr/lib -llazurite
g++ -I./ -o sample_tx sample_tx.cpp -L/usr/lib -llazurite
g++ -I./ -o sample_rx_raw sample_rx_raw.cpp -L/usr/lib -llazurite
g++ -I./ -o sample_rx_payload sample_rx_payload.cpp -L/usr/lib -llazurite
./samp g++ -I./ -o sample_rx_link sample_rx_link.cpp -L/usr/lib -llazurite
r ra g++ -I./ -o sample_rx_promiscuous sample_rx_promiscuous.cpp -L/usr/lib -llazurite
pi@raspberrypi:~/driver/liblazurite/sample $ ./sample_rx_raw 26
short address:: 2f74
mac address:: 001d1290 00042f74

4. と5. V8とnode-red-contrib-lazurite

node-red-contrib-lazuriteは、C言語のアクセラレータとlazuriteノードで構成されています。

C言語のアクセラレータは、「.node-red/node_modules/node-red-contrib-lazurite/build/Relase/lazurite_wrap.node」がオブジェクトになっています。

ない場合は、「.node-red/node_modules/node-red-contrib-lazurite」のフォルダで、「node-gyp rebuild」を実行してください。

node-gyp rebuildを実行すると、以下のようになります。

pi@raspberrypi:~/.node-red/node_modules/node-red-contrib-lazurite $ node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using node-gyp@3.8.0
gyp info using node@8.15.1 | linux | arm
gyp info spawn /usr/bin/python2
gyp info spawn args [ '/usr/lib/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/pi/.node-red/node_modules/node-red-contrib-lazurite/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/lib/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/pi/.node-gyp/8.15.1/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/pi/.node-gyp/8.15.1',
gyp info spawn args   '-Dnode_gyp_dir=/usr/lib/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/pi/.node-gyp/8.15.1/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/pi/.node-red/node_modules/node-red-contrib-lazurite',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/pi/.node-red/node_modules/node-red-contrib-lazurite/build'
  CXX(target) Release/obj.target/lazurite_wrap/nodes/lazurite/lazurite_wrap.o
  SOLINK_MODULE(target) Release/obj.target/lazurite_wrap.node
  COPY Release/lazurite_wrap.node
make: Leaving directory '/home/pi/.node-red/node_modules/node-red-contrib-lazurite/build'
gyp info ok 

これが正常に実行できない場合は、Node-REDのインストールが正しくできていない可能性があります。
こちらを参考に、正しくnode-redのインストールを行ってください。

node-gypがインストールできていない時は、「npm install -g node-gyp」でインストールすることができます。Node-REDに対応した正しいNode.jsとそれに対応したnpmパッケージをインストールした上で、node-gypのインストールを行ってください。