迅为 iTOP-4412 精英版开发板 mosquitto(MQTT协议) 移植及使用测试
Posted beta-1999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迅为 iTOP-4412 精英版开发板 mosquitto(MQTT协议) 移植及使用测试相关的知识,希望对你有一定的参考价值。
??需要在 Linux 系统下先交叉编译好 mosquitto 再移植到开发板中,至于最后 PC 端使用 Linux 还是 Windows 都可以。
??注意事先要配置好交叉编译环境
一、下载依赖包
??编译 mosquitto 需要依赖 libuuid 和 openssl。因此需要下载下面三个文件,注意最好版本保持一致,其他不保证成功:
二、交叉编译
??以下编译均在已经配置好交叉编译环境的 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-arm 为 mqtt-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 测试时的是一模一样的,就不再展示了。
五、参考资料
以上是关于迅为 iTOP-4412 精英版开发板 mosquitto(MQTT协议) 移植及使用测试的主要内容,如果未能解决你的问题,请参考以下文章
转载技术分享 JLINKv9在迅为iTOP-4412精英板上的应用