• 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

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

  • 相关阅读:
    Servlet 需要提供对应的doGet() 与 doPost()方法
    git中的分支运用(branch建立、 conflict处理)
    关于QT6实现翻金币小程序的避坑指南
    windows中怎样使用nginx?
    nodejs学习week01
    用C语言写个控制台扫雷游戏(附完整代码)
    大数据系统架构师的论文如何写
    你真的会数组去重吗?去重方法汇总解析,看着一篇就够了
    一键自动化博客发布工具,用过的人都说好(知乎篇)
    私有云:【3】NFS存储服务器的安装
  • 原文地址:https://blog.csdn.net/qq_24093081/article/details/126266663