MQTT移植ARM开发

MQTT移植和使用

说明:
MQTT有三个关系
发布者 --------> 服务器 ------ > 订阅者

安装服务器
apt-get install mosquitto
安装客户端
apt-get install mosquitto-clients

一般情况下,服务器是不需要移植,直接在阿里云上使用命令安装就行,客户端一般是需要移植到开发板作为发布者或订阅者

1.移植

参考迅为电子的imx6ull开发板使用手册

先说明路径存放的东西,要不后面容易懵逼

1.存放下载的源码及解压后的文件的目录
/home/embedfire/MQTT
2.存放交叉编译好的文件、库
/opt/mosquitto-arm
3.存放最终拷贝到开发板的文件
/home/embedfire/mqtt-arm

说明:其实3里面的文件就是从2里面拷贝出来的
这些目录大家刚开始是没有的,大家不要着急,后面一步步创建,这里提前让大家有个总体认识

1.下载源码 (mosquitto uuid openssl)

https://mosquitto.org/files/source/

https://sourceforge.net/projects/libuuid/files/libuuid-1.0.3.tar.gz/download?use_mirror=udomain
https://www.oschina.net/news/59772/openssl-1-0-2

2.在Ubuntu上建立目录,存放下载的源码,并且解压

在这里插入图片描述

3.在/opt目录下创建目录存放我们交叉编译好的头文件、库

在这里插入图片描述

说明:等会我们交叉编译完后的库就是存放在这里,这里的东西就是我们最终需要拷贝到开发板上的,做好这些准备工作就可以交叉编译我们下载的源码了

4.交叉编译 uuid 库

在前面我们已经把下载好的源码放在了~/MQTT目录下,并且解压了
1.进入解压后的目录
在这里插入图片描述

2.配置
./configure–prefix=/opt/mosquitto-arm/libuuid-1.0.3 CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --host=arm-linux
参数说明:
configure–prefix=/opt/mosquitto-arm/libuuid-1.0.3 指定安装路径,就是前面准备好的路径
CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc 设置交叉编译器
–host=arm-linux设置是arm

3.make
4.make install 安装
5.现象
成功之后就可以在/opt/mosquitto-arm 下得到一个 libuuid 的文件夹

5.交叉编译 openssl 库

1.进入解压后的目录
在这里插入图片描述

2.配置

  1. setarch i386 ./config no-asm shared --prefix=/opt/mosquitto-arm/openssl/
    参数说明:
    setarch i386说明是32为CPU
    shared :生成动态连接库
    –prefix=/opt/mosquitto-arm/openssl/ 安装路径
    2.如果 Makefile 中有 -m32 和-m64 就删掉 -m32 和-m64

3.修改Makefile 里面的编译器参数如下
在这里插入图片描述

CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
AR=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar $(ARFLAGS) r
RANLIB=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ranlib
NM=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-nm

4.make
5.make insatll
安装成功后会在我们设置/opt/mosquitto-arm 下得到一个 openssl 的文件夹

6.交叉编译 mosquitto

1.进入解压后的目录
在这里插入图片描述

2.编译
make WITH_SRV=no
CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-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”
主要是指明编译C和C++的交叉编译器,依赖库的路径和头文件路径

3.安装
make DESTDIR=/opt/mosquitto-arm/mosquitto-1.5 install

4.现象
/opt/mosquitto-arm 下得到一个 mosquitto-1.5 的文件夹

好了到这里就把所有的库交叉编译完成了,下面就只需要拷贝过去到开发板即可,大家不要被这些移植吓到!!!!!

补充:
1.这是我下载源码和解压后的全部文件
在这里插入图片描述

2.这是我安装所有交叉编译好的库
在这里插入图片描述

7.把编译好的库拷贝到开发板

为了不搞乱我们编译好的库,我们就先创建个目录
在这里插入图片描述

我们在这个目录下把我们最终需要的库拷贝过来,最后考到开发板上
1.先看最终的文件
在这里插入图片描述

其实就是我们交叉编译的三个库,另外我们在这moqsuitto库里面拿出点东西来,方便我们后面操作,那么就来看具体操作
2.进入cd /opt/mosquitto-arm目录拷贝三个库到我们前面新创建的目录下
cp -rf libuuid-1.0.3/ mosquitto-1.5/ openssl/ /home/embedfire/mqtt-arm

3.进入/opt/mosquitto-arm/mosquitto-1.5/etc/mosquitto拷贝下面圈起来文件到/home/embedfire/mqtt-arm
在这里插入图片描述

4.进入/opt/mosquitto-arm/mosquitto-1.5/usr/local/bin把下面的所有文件拷贝过去/home/embedfire/mqtt-arm

在这里插入图片描述

5.进入/opt/mosquitto-arm/mosquitto-1.5/usr/local/sbin拷贝下面文件到/home/embedfire/mqtt-arm

在这里插入图片描述

6.打包
我们回到我们创建的目录下
在这里插入图片描述

可以看到全部拷贝过来了,那么我们就把这些全部打包起来传给开发板
回到前一个目录 ,打包
cd …
tar -czf mqtt-arm.tar.gz mqtt-arm/
好了到这里就全部打包好了,接下来就是开发板的操作了,坚持坚持!!!!

以下操作是在开发板上进行
7.开发板解压传过来文件
tar -zxvf mqtt-arm.tar.gz
8.目录下 libuuid-1.0.3/ mosquitto-1.5/ openssl/三个文件下的 lib 下 的库全部 放到开发板的/lib 下面
cp -rf libuuid-1.0.3/lib/* mosquitto-1.5/usr/local/lib/* openssl/lib/* /lib/

9.前目录下 mosquitto.conf.example 复制一个和他一模一样名为 mosquitto.conf 的文件放 在/etc 下面,命令如下:
cp mosquitto.conf.example /etc/mosquitto.conf
10.拷贝mosquitto相关文件
mv mosquitto mosquitto_* /bin

好了到这里就全部搞定

测试:

1.以开发板作为服务器,Ubuntu 开俩个终端作为订阅者和发布者进行测试
1.使用以下命令启动开发板的 mosquitto 服务
mosquitto -d -c /etc/mosquitto.conf //开启服务器
ps -ef |grep mosquitto查看是否开启成功
2.在Ubuntu上订阅和发布主题
订阅mosquitto_sub -h 192.168.3.28 -t “mqtt” -v
发布mosquitto_pub -h 192.168.3.28 -t “mqtt” -m “Hello MQTT”
3.现象
可以在订阅终端看到 mqtt Hell MQTT
好了,到这里基本确定你是移植成功了,下面就是你写代码开发的时候了

2.编写C代码使用:

服务器(Ubuntu或者开发板或者阿里云服务器):
开启服务器:service mosquitto start
查看是否开启成功:ps -ef | grep mosquitto

发布者:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc mqtt_pub.c -o mqtt_pub -I /opt/mosquitto-arm/mosquitto-1.5/usr/local/include/ -L /opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/ -L /opt/mosquitto-arm/libuuid-1.0.3/lib/ -L /opt/mosquitto-arm/openssl/lib/ -lmosquitto -lssl -lcrypto -luuid

订阅者:mosquitto_sub -h 192.168.2.105 -t “LJM” -v

参数说明:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc我们的交叉编译器
mqtt_pub.c -o mqtt_pub 我们的C文件和编译生成的可执行文件
-I /opt/mosquitto-arm/mosquitto-1.5/usr/local/include/ 指定我们交叉编译好的mosquitto的头文件路径
-L /opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/ lmosquitto库路径
-L /opt/mosquitto-arm/libuuid-1.0.3/lib/ -luuid库路径
-L /opt/mosquitto-arm/openssl/lib/ -lssl库路径
-lmosquitto -lssl -lcrypto -luuid

订阅者:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc mqtt_sub.c -o mqtt_sub -I /opt/mosquitto-arm/mosquitto-1.5/usr/local/include/ -L /opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/ -L /opt/mosquitto-arm/libuuid-1.0.3/lib/ -L /opt/mosquitto-arm/openssl/lib/ -lmosquitto -lssl -lcrypto -luuid

发布者:mosquitto_pub -h 192.168.2.105 -t “LJM” -m “Hello MQTT”

说明:

上面这些是交叉编译我们写的C代码的命令,如果你的安装路径和我的不一样要自己修改哦,还有C代码这里只供参考,如下:
在这里插入图片描述

一个是发布,一个是订阅

C代码的编写大写可以参考官网提供的API
https://mosquitto.org/api/files/mosquitto-h.html#mosquitto_loop_forever

好了,笔者的能力有限,剩下的就留给各位自由发挥

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知道起个啥名“”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值