君正X2670-【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker

46 阅读6分钟

1.mosquitto官网进行下载:mosquitto.org/download/

2. mosquitto 的交叉编译

2.1 openssl库交叉编译见

君正X2670-编译libcurl/openssl/wpa_supplicant库1.编译libcurl库 1.1下载c - 掘金

2.2 CJson库交叉编译

下载地址:codeload.github.com/DaveGamble/… 交叉编译:

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
CMAKE_PATH=$(LOCAL_PATH)
LOCAL_MODULE:= CJSON_1_7_17
LOCAL_MODULE_TAGS :=optional
include $(BUILD_CMAKE_DEVICE)
rm -rf ./out/product/x2670halley.v10_nand_5.10-eng/obj/packages/example/lvgl_demo
make CJSON_1_7_17

2.2 mosquitto 交叉编译

2.2.1 解压缩、进入源码目录

tar zxf mosquitto-2.0.22.tar.gz
cd mosquitto-2.0.22

2.2.2 修改config.mk,指定依赖库的头文件路径、库路径,并且指定安装目。 在 config.mk 中,在ARCH:=$(shell uname -p)语句下面添加下面语句

# 指定ssl库、cJSON库的头文件和库文件                                                                                                                                                                  
CFLAGS += -I/root/rc26/rc26/packages/example/lvgl_demo/openssl-openssl-3.3.4/install/include -I/root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include                           
LDFLAGS+= -L/root/rc26/rc26/packages/example/lvgl_demo/openssl-openssl-3.3.4/install/lib -L/root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib  -lssl -lcrypto -dl               
                                                                                                                                                                                                      
# 指定安装目录                                                                                                                                                                                        
DESTDIR=/root/rc26/rc26/packages/example/lvgl_demo/mosquitto-2.0.22/result 

2.2.3 在根目录新增Build.mk,内容如下

LOCAL_PATH := $(my-dir)
include $(CLEAR_VARS)
CMAKE_PATH=$(LOCAL_PATH)
LOCAL_MODULE:= mosquitto_2_0_22
LOCAL_MODULE_TAGS :=optional
include $(BUILD_CMAKE_DEVICE)

2.2.4 开始编译

make mosquitto_2_0_22

编译结果如下:

Install the project...                                                                                                                                                                                
-- Install configuration: "Release"                                                                                                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquittopp.so.2.0.22                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquittopp.so.1                                                                                          
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquittopp.so                                                                                            
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/include/mosquittopp.h                                                                                            
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquitto.so.2.0.22                                                                                       
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquitto.so.1                                                                                            
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/libmosquitto.so                                                                                              
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/include/mosquitto.h                                                                                              
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/include/mqtt_protocol.h                                                                                          
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/bin/mosquitto_pub                                                                                                
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/bin/mosquitto_sub                                                                                                
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/bin/mosquitto_rr                                                                                                 
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/sbin/mosquitto                                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/include/mosquitto_broker.h                                                                                       
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/include/mosquitto_plugin.h                                                                                       
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/bin/mosquitto_ctrl                                                                                               
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/bin/mosquitto_passwd                                                                                             
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/mosquitto_dynamic_security.so                                                                                
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_ctrl.1                                                                                  
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_ctrl_dynsec.1                                                                           
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_passwd.1                                                                                
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_pub.1                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_sub.1                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man1/mosquitto_rr.1                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man3/libmosquitto.3                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man5/mosquitto.conf.5                                                                                  
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man7/mosquitto-tls.7                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man7/mqtt.7                                                                                            
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/share/man/man8/mosquitto.8                                                                                       
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/etc/mosquitto/mosquitto.conf                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/etc/mosquitto/aclfile.example                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/etc/mosquitto/pskfile.example                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/etc/mosquitto/pwfile.example                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/pkgconfig/libmosquitto.pc                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/sysroot/usr/lib/pkgconfig/libmosquittopp.pc                                                                                  
make[1]: Leaving directory '/root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/obj/packages/example/lvgl_demo/mosquitto-2.0.22/mosquitto_2_0_22'                                               
make[1]: Entering directory '/root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/obj/packages/example/lvgl_demo/mosquitto-2.0.22/mosquitto_2_0_22'                                              
Install the project...                                                                                                                                                                                
-- Install configuration: "Release"                                                                                                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquittopp.so.2.0.22                                                                                      
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquittopp.so.1                                                                                           
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquittopp.so                                                                                             
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include/mosquittopp.h                                                                                             
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquitto.so.2.0.22                                                                                        
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquitto.so.1                                                                                             
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/libmosquitto.so                                                                                               
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include/mosquitto.h                                                                                               
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include/mqtt_protocol.h                                                                                           
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/bin/mosquitto_pub                                                                                                 
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/bin/mosquitto_sub                                                                                                 
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/bin/mosquitto_rr                                                                                                  
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/sbin/mosquitto                                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include/mosquitto_broker.h                                                                                        
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/include/mosquitto_plugin.h                                                                                        
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/bin/mosquitto_ctrl                                                                                                
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/bin/mosquitto_passwd                                                                                              
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/mosquitto_dynamic_security.so                                                                                 
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_ctrl.1                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_ctrl_dynsec.1                                                                            
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_passwd.1                                                                                 
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_pub.1                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_sub.1                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man1/mosquitto_rr.1                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man3/libmosquitto.3                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man5/mosquitto.conf.5                                                                                   
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man7/mosquitto-tls.7                                                                                    
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man7/mqtt.7                                                                                             
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/share/man/man8/mosquitto.8                                                                                        
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/etc/mosquitto/mosquitto.conf                                                                                      
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/etc/mosquitto/aclfile.example                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/etc/mosquitto/pskfile.example                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/etc/mosquitto/pwfile.example                                                                                      
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/pkgconfig/libmosquitto.pc                                                                                     
-- Up-to-date: /root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/system/usr/lib/pkgconfig/libmosquittopp.pc                                                                                   
make[1]: Leaving directory '/root/rc26/rc26/out/product/x2670halley.v10_nand_5.10-eng/obj/packages/example/lvgl_demo/mosquitto-2.0.22/mosquitto_2_0_22'                                               
/root/rc26/rc26                                                                                                                                                                                       
install -D /dev/null out/product/x2670halley.v10_nand_5.10-eng/obj/packages/example/lvgl_demo/mosquitto-2.0.22/mosquitto_2_0_22/.stampinstall                                                         
mkdir -p out/product/x2670halley.v10_nand_5.10-eng/obj/DEPANNER/mosquitto_2_0_22-intermediate/                                                                                                        
install -D /dev/null out/product/x2670halley.v10_nand_5.10-eng/obj/DEPANNER/mosquitto_2_0_22-intermediate/stamp_build                                                                                 
mkdir -p out/product/x2670halley.v10_nand_5.10-eng/obj/DEPANNER/mosquitto_2_0_22-intermediate/                                                                                                        
install -D /dev/null out/product/x2670halley.v10_nand_5.10-eng/obj/DEPANNER/mosquitto_2_0_22-intermediate/stamp_install    

2.3. mosquitto 的使用教程

2.3.1 mosquitto 部署到嵌入式开发板

opensslcJSONmosquitto编译生成的可执行文件、so库文件等拷贝到嵌入式板子上面的/usr/bin/usr/sbin/usr/lib目录下面

2.3.2 运行 mosquitto (MQTT Broker)

  • 在编译结果目录mosquitto-2.0.22_result/usr/local/sbin中存在mosquitto的可执行文件,mosquitto就是我们要部署的 MQTT Broker(MQTT代理),将它运行之后,我们就可以通过MQTT客户端进行发布/订阅了。
  • 然后,添加 mosquitto 配置文件,在当前目录新建文件mosquitto.conf,内容如下:
# 设置 Mosquitto 服务器监听所有网络接口(通过 0.0.0.0 指定)上的 1883 端口.
listener 1883 0.0.0.0

# 设置运行 Mosquitto 服务时使用的用户为 root。
# 这通常不是一个安全的做法,因为通常推荐使用一个权限较低的专用用户账户来运行服务以减少潜在的安全风险。
user root

# 允许匿名用户连接到 MQTT 服务器。这意味着客户端无需提供用户名和密码即可连接并发布、订阅消息。
allow_anonymous true

# 指定 Mosquitto 服务运行时生成的进程 ID 文件位置。
#pid_file /var/run/mosquitto.pid

# 开启持久化模式,意味着在服务器重启后,一些会话状态和保留消息等信息会被保存下来
#persistence true

# 设置持久化数据存储的位置,在本例中是 /tmp 目录。
#persistence_location /tmp

# 指定日志输出方式为写入文件,并设定日志文件的路径为 /tmp/mosquitto.log。
#log_dest file /tmp/mosquitto.log

# 指定包含其他配置文件的目录,当 Mosquitto 启动时,会加载此目录下的所有 .conf 结尾的文件作为附加配置。
#include_dir /mnt/mosquitto/etc/mosquitto/conf.d/

#max_inflight_messages 1024
#max_queued_messages 5120
#message_size_limit 2048000
#set_tcp_nodelay true
  • 最后,运行 mosquitto-c 是指定 mosquitto 配置文件mosquitto.conf 的路径(根据自己的设置):
/usr/sbin # ./mosquitto -c ./mosquitto.conf                                                                                                                                                           
31539551: Warning: Mosquitto should not be run as root/administrator.                                                                                                                                 
31539551: mosquitto version 2.0.22 starting                                                                                                                                                           
31539551: Config loaded from ./mosquitto.conf.                                                                                                                                                        
31539551: Opening ipv4 listen socket on port 1883.                                                                                                                                                    
31539551: mosquitto version 2.0.22 running                            

2.4 运行 mosquitto_sub 订阅消息

运行 mosquitto_sub 订阅消息,命令如下,-v表示打印发布的消息,-h 指定运行MQTT Broker的主机ip,-t 指定要订阅的主题(Topic):

/usr/bin # ./mosquitto_sub -v -h 127.0.0.1 -t /server/fromArm 

2.5 运行 mosquitto_pub 发布消息

运行 mosquitto_pub 发布消息,命令如下,-h 指定运行MQTT Broker的主机ip,-t 指定要发布的主题(Topic),-m 指定要发送的消息,

./mosquitto_pub -h 127.0.0.1 -t /server/fromArm -m {"data":"hello world!"}

也可以使用-f选项指定文件,将文件内容发布:

./mosquitto_pub -h 192.168.3.227 -t /server/fromArm -f 

执行结果如下

./mosquitto_sub -v -h 127.0.0.1 -t /server/fromArm                                                                                                                                         
/server/fromArm {data:hello world!} 

原始博客 【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker_mosquitto下载-CSDN博客