MQTT移植记录
前言
正点原子STM32MP157开发板移植MQTT,搞了半天遇到各种坑 学习记录移植过程遇到的问题
一、移植前准备
二、libuuid移植(版本1.0.3)
1.解压进入目录
2.配置
配置输出目录和交叉编译工具
./configure --prefix=/home/zhousong/linux/mqtt2/build/libuuid CC=arm-none-linux-gnueabihf-gcc --host=arm-linux
3.编译安装
编译
make
安装
make install
4.安装结果
目标路径下生成的文件
三、openssl移植(版本3.0.14)
1.解压进入目录
2.配置
配置输出目录以及生成动态链接库
./config no-asm shared --prefix=/home/zhousong/linux/mqtt2/build/openssl
--prefix :指定 make install 后生成目录的路径,即新建的openssl目录
shared :生成动态链接库。
no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码 是对 arm 格式不支持的
修改Makefile配置交叉编译工具
修改Makefile去掉-m32和-m64(网上都这么说的我没看到m32)
可以使用命令也可以手动修改
sed -i "s/-m64//g" Makefile
3.编译安装
编译
make
安装
make install
4.安装结果
四、cJson移植(版本1.7.17)
好多文章都没写这个,一开始编译mosquitto就报缺少这个头文件。。。。。
1.解压进入目录
2.修改Makefile
修改安装目录
3.编译
编译时指定交叉编译工具
make CC=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
4.安装
make install
5.安装结果
五、mosquitto移植(版本2.0.18)
1.解压进入目录
2.编译
编译时关闭WITH_SRVSRV、配置编译工具、头文件(前面编译出来的库)、动态链接(前面编译出来的库)
make WITH_SRVSRV=no CC=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-g++ CFLAGS="-I /home/zhousong/linux/mqtt2/build/openssl/include -I /home/zhousong/linux/mqtt2/build/libuuid/include -I /home/zhousong/linux/mqtt2/build/cjson/include" LDFLAGS="-L /home/zhousong/linux/mqtt2/build/openssl/lib64 -L /home/zhousong/linux/mqtt2/build/libuuid/lib -L /home/zhousong/linux/mqtt2/build/cjson/lib -lssl -lcrypto -luuid"
3.安装
安装选择安装路径(也可以在前面选择,与openssl libuuid一致)
make DESTDIR=/home/zhousong/linux/mqtt2/build/mqtt install
4.安装结果
六、目录结构
七、测试
1.将生成的目录文件放入nfs服务器
2.配置环境变量
修改文件/etc/profile,将如下加入到文件中
#mqtt
export MQTT_ROOT=/home/zhousong/mqtt/mqtt
export OPENSSL_ROOT=/home/zhousong/mqtt/openssl
export LIBUUID_ROOT=/home/zhousong/mqtt/libuuid
export CJSON_ROOT=/home/zhousong/mqtt/cjson
export PATH=$PATH:$MQTT_ROOT/usr/local/bin:$MQTT_ROOT/usr/local/sbin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MQTT_ROOT/usr/local/lib:$OPENSSL_ROOT/lib64:$LIBUUID_ROOT/lib:$CJSON_ROOT/lib
3.测试
开启三个ssh远程连接
连接1,启动代理服务
mosquitto -v
查看进程,进程运行中
连接2,订阅主题为tiger的消息
mosquitto_sub -v -t tiger
查看进程
连接3,发布主题为tiger的消息
mosquitto_pub -t tiger -m hello!!!
八、实现多设备通信
前提是开发板能够联网
1.命令使用说明
发布消息:
使用 mosquitto_pub 命令来发布消息到 broker.emqx.io 上的指定主题。
mosquitto_pub -h broker.emqx.io -p <port> -u <username> -P <password> -t <topic> -m "<message>"
-h broker.emqx.io: MQTT 代理的主机名或IP地址。
-p <port>: MQTT 代理的端口号,默认是 1883。
-u <username>: 如果 MQTT 代理需要用户名认证,可以使用此选项指定用户名。
-P <password>: 对应的密码。
-t <topic>: 指定发布消息的主题。
-m "<message>": 要发布的消息内容,需用双引号包裹。
示例:
发布消息到 test/topic 主题:
mosquitto_pub -h broker.emqx.io -p 1883 -u your_username -P your_password -t "test/topic" -m "Hello, MQTT!"
订阅消息:
使用 mosquitto_sub 命令来订阅 broker.emqx.io 上的指定主题,并接收消息。
mosquitto_sub -h broker.emqx.io -p <port> -u <username> -P <password> -t <topic>
-h broker.emqx.io: MQTT 代理的主机名或IP地址。
-p <port>: MQTT 代理的端口号,默认是 1883。
-u <username>: 如果 MQTT 代理需要用户名认证,可以使用此选项指定用户名。
-P <password>: 对应的密码。
-t <topic>: 指定订阅的主题。
示例:
订阅 test/topic 主题:
mosquitto_sub -h broker.emqx.io -p 1883 -u your_username -P your_password -t "test/topic"
2.验证
开发板订阅tiger_msg的主题消息
mosquitto_sub -h broker.emqx.io -p 1883 -t "tiger_msg"
开发板发送主题消息
mosquitto_pub -h broker.emqx.io -p 1883 -t tiger_msg -m "I am Linux msg"