说明
最近需要测试一个工业互联网网关的项目,在网上找到了工业协议网关软件Neuron,决定从它开始自己的工作。今天先介绍一下如何在x86平台上编译Neuron。
Neuron简介
Neuron是EMQ(杭州映云科技有限公司)出品的,它在物联网和工业互联网领域算是个领先厂商。我以前上课用的MQTTX客户端就是该公司的产品。
以下介绍来自厂商的网站:
Neuron 是运行在各类物联网边缘网关硬件上的工业协议网关软件,旨在解决工业 4.0 背景下设备数据统一接入难的问题。通过将来自繁杂多样工业设备的不同协议类型数据转换为统一标准的物联网 MQTT 消息,实现设备与工业物联网系统之间、设备彼此之间的互联互通,进行远程的直接控制和信息获取,为智能生产制造提供数据支撑。
Neuron 支持同时为多个不同通讯协议设备、数十种工业协议进行一站式接入及 MQTT 协议转换,仅占用超低资源,即可以通过原生或容器的方式部署在 X86、ARM、RISC-V 和其他架构的物理机中。同时,用户可以通过基于 Web 的管理控制台实现在线的网关配置管理。其强大的性能使得它能够连接数百个工业设备,轻松处理超过 10,000 个数据点。
Neuron的安装
直接安装deb软件包
Neuron是可以直接用现成的deb软件包安装的。厂商提供的x86和ARM架构的不同软件包。
根据不同版本及架构下载安装包,例如:
$ wget https://www.emqx.com/en/downloads/neuron/2.5.3/neuron-2.5.3-linux-amd64.deb
安装后的版本,Neuron 提供了 30 个点(30 个连接和 30 个数据标签)的免费额度。可在不安装 EMQ 许可证的情况下,运行这些商业模块。超出免费额度后,则必须安装有效的试用版或官方 EMQ 许可证。
源代码编译
Neuron核心架构,仪表板和一些驱动模块(例如 modbus-tcp,mqtt 和 eKuiper 等)是在 LGPLv3 许可下开源的。无需安装 EMQ 许可证即可运行这些开源模块。不过很多工控的驱动模块都是闭源的。
我想对其驱动做一些扩展工作,所以需要对源代码进行编译。
第三方库的编译
首先需要根据https://github.com/emqx/neuron/blob/main/Install-dependencies.md 的介绍安装一些第三方库。
apt-get install libssl-dev openssl
git clone -b 1.2.15 https://github.com/HardySimpson/zlog.git cd zlog make && sudo make install
git clone https://github.com/neugates/jansson.git cd jansson && mkdir build && cd build cmake -DJANSSON_BUILD_DOCS=OFF -DJANSSON_EXAMPLES=OFF ..&& make && sudo make install
git clone -b v2.16.12 https://github.com/Mbed-TLS/mbedtls.git cd mbedtls && mkdir build && cd build cmake -DUSE_SHARED_MBEDTLS_LIBRARY=OFF -DENABLE_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && make && sudo make install
git clone -b neuron https://github.com/neugates/NanoSDK.git cd NanoSDK && mkdir build && cd build cmake -DBUILD_SHARED_LIBS=OFF -DNNG_TESTS=OFF -DNNG_ENABLE_SQLITE=ON -DNNG_ENABLE_TLS=ON .. && make && sudo make install
git clone -b v1.13.1 https://github.com/benmcollins/libjwt.git cd libjwt && mkdir build && cd build cmake -DENABLE_PIC=ON -DBUILD_SHARED_LIBS=OFF .. && make && sudo make install
git clone -b release-1.11.0 https://github.com/google/googletest.git cd googletest && mkdir build && cd build cmake .. && make && sudo make install
curl -o sqlite3.tar.gz https://www.sqlite.org/2022/sqlite-autoconf-3390000.tar.gz mkdir sqlite3 tar xzf sqlite3.tar.gz --strip-components=1 -C sqlite3 cd sqlite3 ./configure CFLAGS=-fPIC && make && sudo make install
源代码下载
安装完以上的第三方库之后,就可以下载Neuron的源代码并编译了。
git clone https://github.com/emqx/neuron cd neuron mkdir build && cd build cmake .. && make
CMakeLists 中有三个可选参数:
- CMAKE_BUILD_TYPE "Debug",默认编译 debug 版本,如果不需要调试可以改为release。
- DISABLE_WERROR,将所有的警告当作错误进行处理。
使用示例:cmake -DISABLE_WERROR=1 ..
- DISABLE_ASAN,选择是否开启 libasan 内存检测。如果想在其他电脑上分发最终版,建议选上。
安装 Dashboard
Neuron有一个基于网页的管理端,叫 neuron-dashboard, 它并不是Neuron源代码的一部分。到neuron-dashboard页面下载最新的 neuron-dashboard.zip
,解压后放到 Neuron 可执行目录下的 dist 目录中。
运行
完成了以上所有步骤,就可以直接运行程序了。
cd build ./neuron
程序启动后不会有任何提示信息。此时使用浏览器访问本机的7000端口,就可以看到管理端的界面了。默认的密码是admin/0000。
程序分发
可以使用ldd命令查看一下程序的依赖情况。
armdev@armdev-VirtualBox:~/neuron/neuron/build$ ldd neuron linux-vdso.so.1 (0x00007ffdb19aa000) libasan.so.5 => /lib/x86_64-linux-gnu/libasan.so.5 (0x00007f5a9091a000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5a90914000) libneuron-base.so => ./libneuron-base.so (0x00007f5a902f7000) libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00007f5a90175000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5a90026000) libzlog.so.1.2 => /usr/local/lib/libzlog.so.1.2 (0x00007f5a9000a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5a8ffe5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5a8fdf3000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f5a8fde9000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5a8fdce000) /lib64/ld-linux-x86-64.so.2 (0x00007f5a91533000)
这里的libasan文件是个辅助调试的库,如果不希望分发,可以在前面CMake的时候加上DISABLE_ASAN。libzlog也是需要分发的,别忘记。官方版本是不需要分发libsqlite3的,它可以是以静态库的方式嵌入了这个文件。