本帖最后由 水精灵 于 2024-12-19 16:24 编辑

Mosquitto是一个开源的MQTT消息代理(broker)软件,它遵循MQTT协议,允许设备之间高效、可靠地交换消息。作为一个轻量级的消息中间件,Mosquitto支持QoS(服务质量)等级,支持发布/订阅模式,适用于嵌入式系统和低功耗设备。其小巧的体积和简洁的架构使其成为许多嵌入式应用的理想选择,特别是在资源受限的开发板上运行时。
将Mosquitto移植到嵌入式开发板上,能够使这些嵌入式设备具备完整的消息中间件功能。这对于需要进行远程数据交换、设备控制和实时监控的物联网项目尤其重要。例如,在智能家居或环境监控系统中,开发板通过Mosquitto与其他设备或系统进行通信,可以大大提升系统的灵活性和扩展性。
这篇文章将详细介绍如何将Mosquitto及其所依赖的OpenSSL、libuuid库移植到ARM开发板,并在开发板上简单运行MQTT服务。
交叉编译libuuid库
1.下载地址。
https://sourceforge.net/projects/libuuid/files/

2.拷贝源码到开发环境/home/elf/work目录下解压。
elf@ubuntu:~/work$ tar zxvf libuuid-1.0.3.tar.gz
elf@ubuntu:~/work$ cd libuuid-1.0.3/

3.创建install文件夹用来存放编译安装后的库。
elf@ubuntu:~/work/libuuid-1.0.3$ mkdir install

4.执行环境变量。
elf@ubuntu:~/work/openssl-1.0.2g$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

5.生成Makefile。
elf@ubuntu:~/work/libuuid-1.0.3$ ./configure --host=arm-poky-linux-gnueabi --prefix=$(pwd)/install

6.编译。
elf@ubuntu:~/work/libuuid-1.0.3$ make

7.安装。
elf@ubuntu:~/work/libuuid-1.0.3$ make install

8.查看安装目录下的文件并打包。
elf@ubuntu:~/work/libuuid-1.0.3$ cd install/
elf@ubuntu:~/work/libuuid-1.0.3/install$ ls
include  lib
elf@ubuntu:~/work/libuuid-1.0.3/install$ tar cvjf libuuid.tar.bz2 *

交叉编译OpenSSL库
1.下载地址。
https://openssl-library.org/source/old/1.0.2/index.html

2.拷贝源码到开发环境/home/elf/work目录下解压。
elf@ubuntu:~/work$ tar zxvf openssl-1.0.2g.tar.gz
elf@ubuntu:~/work$ cd openssl-1.0.2g/

3.创建install文件夹用来存放编译安装后的库。
elf@ubuntu:~/work/openssl-1.0.2g$ mkdir install

4.生成Makefile。
elf@ubuntu:~/work/openssl-1.0.2g$ ./config no-asm shared --prefix=$(pwd)/install

5.修改Makefile。
注释掉第62行;第63行去掉“-m64”。
图片1.png
注释掉第180行。
图片2.png

6.执行环境变量。
elf@ubuntu:~/work/openssl-1.0.2g$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

7.编译。
elf@ubuntu:~/work/openssl-1.0.2g$ make

8.安装。
elf@ubuntu:~/work/openssl-1.0.2g$ make install

9.查看安装目录下的文件并打包。
elf@ubuntu:~/work/openssl-1.0.2g$ cd install/
elf@ubuntu:~/work/openssl-1.0.2g/install$ ls
bin  include  lib  ssl
elf@ubuntu:~/work/openssl-1.0.2g/install$ tar cvjf openssl.tar.bz2 *

交叉编译Mosquitto库
1.下载地址。
https://mosquitto.org/files/source/

2.拷贝源码到开发环境/home/elf/work目录下解压。
elf@ubuntu:~/work/mosquitto-1.5.1$ tar zxvf mosquitto-1.5.1.tar.gz
elf@ubuntu:~/work/mosquitto-1.5.1$ cd mosquitto-1.5.1/

3.创建install文件夹用来存放编译安装后的库。
elf@ubuntu:~/work/mosquitto-1.5.1$ mkdir install

4.执行环境变量。
elf@ubuntu:~/work/mosquitto-1.5.1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

5.编译。
elf@ubuntu:~/work/mosquitto-1.5.1$ make WITH_SRV=no CFLAGS="-I /home/elf/work/openssl-1.0.2g/install/include -I /home/elf/work/openssl-1.0.2g/install/lib -I /home/elf/work/openssl-1.0.2g/install/include/openssl -I /home/elf/work/libuuid-1.0.3/install/include -I /home/elf/work/libuuid-1.0.3/install/lib" LDFLAGS="-L /home/elf/work/openssl-1.0.2g/install/lib -L /home/elf/work/libuuid-1.0.3/install/lib -lssl -lcrypto -luuid" CROSS_COMPILE=" "

6.安装。
elf@ubuntu:~/work/mosquitto-1.5.1$ make DESTDIR=$(pwd)/install install

7.查看安装目录下的文件。
elf@ubuntu:~/work/mosquitto-1.5.1$ cd install
elf@ubuntu:~/work/mosquitto-1.5.1/install$ ls
etc  usr
elf@ubuntu:~/work/mosquitto-1.5.1/install$ tar cvjf mosquitto.tar.bz2 *

移植到开发板
1.将libuuid.tar.bz2、openssl.tar.bz2、mosquitto.tar.bz2压缩包通过U盘拷贝到开发板根目录下解压。
root@ELF1:~# cp /run/media/sda1/libuuid.tar.bz2 /
root@ELF1:~# cp /run/media/sda1/openssl.tar.bz2 /
root@ELF1:~# cp /run/media/sda1/mosquitto.tar.bz2 /
root@ELF1:~# cd /
root@ELF1:/# tar mxvf libuuid.tar.bz2
root@ELF1:/# tar mxvf openssl.tar.bz2
root@ELF1:/# tar mxvf mosquitto.tar.bz2

2.将/usr/local/lib、/usr/local/bin、/usr/local/sbin文件夹下所有文件复制到根目录/lib文件夹下。
root@ELF1:/# cd usr/local/
root@ELF1:/usr/local# cp -rf ./lib/* /lib
root@ELF1:/usr/local# cp -rf ./bin/* /bin
root@ELF1:/usr/local# cp -rf ./sbin/* /bin

3.将/etc/mosquitto/文件夹下mosquitto.conf.example文件复制到根目录/etc下并重命名为mosquitto.conf。
root@ELF1:/usr/local# cd /etc/mosquitto/
root@ELF1:/etc/mosquitto# cp mosquitto.conf.example /etc/mosquitto.conf

4.修改/etc/mosquitto.conf文件,在第40行下添加user root。
root@ELF1:/etc/mosquitto# vi /etc/mosquitto.conf
图片3.png
保存退出。

简单测试
1.打开两个串口终端,一个串口登录,一个网口登录。

2.启动mosquitto服务。
root@ELF1:~# mosquitto -d -c /etc/mosquitto.conf

3.一端订阅test主题。
root@ELF1:~# mosquitto_sub -t test

4.一端发布test主题。
root@ELF1:~# mosquitto_pub -t test -m "hello world"
图片4.png
可以看到订阅端接收到发布端的“hello world”消息,测试成功。


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.5  © 2001-2013 Comsenz Inc.