迅为 iTOP-4412 精英版开发板 mosquitto(MQTT协议) 移植及使用测试

  需要在 Linux 系统下先交叉编译好 mosquitto 再移植到开发板中,至于最后 PC 端使用 Linux 还是 Windows 都可以。
  注意事先要配置好交叉编译环境

一、下载依赖包

  编译 mosquitto 需要依赖 libuuid 和 openssl。因此需要下载下面三个文件,注意最好版本保持一致,其他不保证成功:

  • libuuid-1.0.3.tar.gz,下载链接:链接 1
  • openssl-1.0.2g.tar.gz,下载链接:链接 2
  • mosquitto-1.5.tar.gz,下载链接:链接 3

二、交叉编译

  以下编译均在已经配置好交叉编译环境的 Linux 系统下(我使用的是 Ubuntu 18.04,交叉编译包为 arm-linux-gcc-4.3.2.tar.gz)。

1. 交叉编译 libuuid

  • ① 在任意位置新建一个文件夹,命名为 mqtt,比如 /Document/mqtt ,将 libuuid-1.0.3.tar.gz 拷贝到该文件夹下,解压得到 /Document/mqtt/libuuid-1.0.3

tar -vxf libuuid-1.0.3.tar.gz

  • ② 在系统 /opt/ 下以管理员身份新建文件夹/mosquitto-arm:

mkdir -p /opt/mosquitto-arm

  • ③ 配置源码。进入 /Document/mqtt/libuuid-1.0.3/,输入以下指令:

./configure --prefix=/opt/mosquitto-arm/libuuid-1.0.3 CC=arm-none-linux-gnueabi-gcc --host=arm-linux

  • ④ 编译。停留在/Document/mqtt/libuuid-1.0.3/,输入:

make

  • ⑤ 安装。继续输入:

make install

  报错 Permission denied,增加管理员权限:

sudo make install

  报错 arm-linux-ranlib: command not found,错误来源解释:arm-linux-ranlib: command not found
  重新输入:

su

  报错su:认证失败,解决方案来源:su 认证失败
  需要重新更新 UNIX 密码:

sudo passwd

  重新输入 su,成功进入 root 模式,再次尝试 make install,此时不再报错:

  成功编译 libuuid:

2. 交叉编译 openssl

  • ① 进入/Document/mqtt ,将 openssl-1.0.2g.tar.gz 拷贝到该文件夹下,解压得到 /Document/mqtt/openssl-1.0.2g

tar -vxf openssl-1.0.2g.tar.gz cd openssl-1.0.2g

  如果解压有报错,可以尝试下列命令:

tar -vxf openssl-1.0.2g.tar.gz -C openssl-1.0.2g

  • ② 配置编译参数。进入/Document/mqtt/openssl-1.0.2g/,输入:

setarch i386 ./config no-asm shared --prefix=/opt/mosquitto-arm/openssl/

  运行结束可能会提示需要输入 make depend,照做就是,具体原因参考:make 、make clean、make depend的区别

  • ③ 修改 /Document/mqtt/openssll-1.0.2g下的 Makefile 文件内容,如下图所示,蓝色注释表示修改前的语句,箭头所指为修改后的结果:

CC= arm-none-linux-gnueabi-gcc
AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= arm-none-linux-gnueabi-ranlib
NM= arm-none-linux-gnueabi-nm

  • ④ 进入 root 模式,编译并安装

su
make
make install

  编译结束,在 /opt/mosquitto-arm/中得到一个新的文件夹 /openssl

3. 交叉编译 mosquitto

  • ① 进入 /Document/mqtt ,将 mosquitto-1.5.tar.gz 拷贝到该文件夹下,解压得到 /Document/mqtt/mosquitto-1.5

tar -vxf mosquitto-1.5.tar.gz cd mosquitto-1.5

  • ② 编译源码,进入/Document/mqtt/mosquitto-1.5/,输入下列指令:

make WITH_SRV=no CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ CFLAGS="-I/opt/mosquitto-arm/openssl/include -I/opt/mosquitto-arm/libuuid-1.0.3/include -I/opt/mosquitto-arm/openssl/lib -I/opt/mosquit/to-arm/libuuid-1.0.3/lib" LDFLAGS="-L/opt/mosquitto-arm/openssl/lib -L/opt/mosquitto-arm/libuuid-1.0.3/lib -lssl -lcrypto -luuid"

  • ③ 安装。输入下列指令之后,在/opt/mosquitto-arm/ 下得到文件夹 mosquitto-1.5 。至此,mosquitto 的交叉编译工作完成了!

三、iTOP-4412 移植 mosquitto

1. 准备依赖

  为了将 mosquitto 移植到开发板,需要将刚才交叉编译得到的一些文件进行打包。

  • ① 新建文件夹 /Doucument/mqtt-arm 作为打包地点。
  • ② 将 /opt/mosquitto-arm/mosquitto-1.5/etc/mosquitto/下的文件 mosquitto.conf.example 拷贝到 /Doucument/mqtt-arm/
  • ③ 将 /opt/mosquitto-arm/mosquitto-1.5/usr/local/bin/ 下的所有文件拷贝到 /Doucument/mqtt-arm/
  • ④ 将 /opt/mosquitto-arm/mosquitto-1.5/usr/local/sbin/ 下的mosquitto拷贝到 /Doucument/mqtt-arm/
  • ⑤ 将 /opt 下的三个文件夹 /libuuid-1.0.3/mosquitto-1.5/openssl全部拷贝到 /Doucument/mqtt-arm/

  至此,所有依赖准备完毕,/Document/mqtt-arm问价夹内的二层文件树结构如下图所示:

2. iTOP-4412 装载 mosquitto

  • ① 打包文件夹 /Document/mqtt-armmqtt-arm.tar.gz

tar -czf mqtt-arm.tar.gz mqtt-arm/

  • ② 挂载 U 盘,将mqtt-arm.tar.gz 拷贝到开发板的根目录,在超级终端输入:

cp /mnt/usb/mqtt-arm.tar.gz ./

  • ③ 解压得到文件夹 /mqtt-arm

tar -vxf mqtt-arm.tar.gz

  • ④ 拷贝 /mqtt-arm/ 中的 libuuid-1.0.3/lib/、mosquitto-1.5/lib/ 、openssl/lib/ 到开发板的 /lib 目录下。

cp -rf libuuid-1.0.3/lib/* mosquitto-1.5/usr/local/lib/* openssl/lib/* /lib/

  • ④ 拷贝 /mqtt-arm/ 中的mosquitto.conf.example 到开发板的 /etc 目录下。

cp mosquitto.conf.example /etc/mosquitto.conf

  • ⑤ 将 /mqtt-arm/ 剩余的文件全部放到开发板的 /bin 目录下。

mv mosquitto mosquitto_* /bin

  • ⑥ 打开开发板 /etc 目录下的 mosquitto.conf 文件,修改第 39 行,使其变为 user root

cd /etc
vi mosquitto.conf
上下键跳到第 39 行,按 i 进入插入模式,修改文本为 user root
按下 ESC 退出插入模式,输入冒号 : 后再输入 wq 保存退出 vi 编辑界面

  至此,MQTT 就成功地移植到 iTOP-4412 开发板中了。

四、PC 端测试 mosquitto

  这里提供 Ubuntu 和 Windows 下的配置。需要事先简单介绍的是 MQTT 协议的三个基本对象:发布者(Publisher)、代理(Broker,服务器)、订阅者(Subscriber)。三者传输 Message 的流程如下:

  由于开发板这边只有一个终端,因此 PC 端需要充当代理和发布者(订阅者)至少两个身份。

4.1 Ubuntu 配置及测试

  下载并安装 mosquitto。

sudo apt-get install mosquitto

  安装 mosquitto 客户端。

sudo apt-get install mosquitto-clients

(1)Ubuntu 充当服务器、发布者及订阅者

  启动 mosquitto 服务,命令如下:

service mosquitto start

  打开一个终端,订阅主题。

mosquitto_sub -h localhost -t "mqtt" -v
mosquitto_sub 表明为订阅者;
-h 表示服务器地址参数,localhost 表示服务器为本机,也可以直接输入本地 IP;
-t 表示话题(Topic),"mqtt" 为订阅的话题名;
-v 表示代码调试模式,可以输出更多的信息。

  打开另一个终端,发布主题。

mosquitto_pub -h localhost -t "mqtt" -m "Hello MQTT"
-h 表示服务器地址参数,localhost 表示服务器为本机,也可以直接输入本地 IP;
-t 表示话题(Topic),"mqtt" 为发布的话题名;
-m 表示发布的 Message 内容,此时发送的是字符串 “Hello MQTT"

  不出意外的话,订阅端的终端内就会打印 Hello MQTT 字样了,说明本机 MQTT 通信完成。

(2)Ubuntu 充当服务器、订阅者,开发板充当发布者

  启动 mosquitto 服务,命令如下:

service mosquitto start

  打开一个终端,订阅主题。

mosquitto_sub -h localhost -t "mqtt" -v

  在开发板的超级终端输入指令,发布主题。注意这里的 IP 地址需要是你的电脑的 IP 地址。Linux 下查看 IP 地址的指令为 ifconfig。

mosquitto_pub -h 192.168.1.110 -t "mqtt" -m "Hello Mqtt"

  不出意外的话,Ubuntu 订阅端的终端内就会打印 Hello Mqtt 字样了,说明 PC 机与开发板的 MQTT 通信完成。

(3)Ubuntu 充当服务器、订阅者,开发板充当发布者

  启动 mosquitto 服务,命令如下:

service mosquitto start

  在开发板的超级终端输入指令,订阅主题。

mosquitto_sub -h 192.168.1.110 -t "mqtt" -v

  打开一个终端,发布主题。

mosquitto_pub -h localhost -t "mqtt" -m "Hello Mqtt"

  不出意外的话,开发板超级终端内就会打印 Hello Mqtt 字样了,说明 PC 机与开发板的 MQTT 通信完成。

4.1 Windows 配置

  下载并安装 mosquitto-1.6.10a,下载链接:链接,注意对着自己 Windows的操作位数下载,比如我下载的就是 64 位 的。

  安装好之后,为了方便的在 cmd 里直接调用 mosquitto,还需要配置环境变量。搜索环境变量,在系统变量的 PATH 栏里编辑一个新的环境变量,路径设置为 mosquitto 的安装目录。

  配置好环境变量之后,打开 cmd,启动 mosquitto 服务器,检验是否安装成功。成功启动的画面如下图所示。

mosquitto -d -v

  之后的测试除了启动服务器的指令为上面的指令之外,订阅端和发布端的指令和 Ubuntu 测试时的是一模一样的,就不再展示了。

五、参考资料

猜你喜欢

转载自www.cnblogs.com/beta-1999/p/13378058.html