zoukankan      html  css  js  c++  java
  • 项目实战-广域网智能家居-把mosquitto移植到arm上

    Mosquitto库依赖libuuid和openssl库,所以我们在交叉编译Mosquitto之前需要先交叉编译他所需要的依赖库,这里作者已经把需要的源码都下载好了,大家可以在这个文档的目录下找到。不建议大家下载和我不一致的版本,可能会出问题。

    mqtt源码下载页:

    1. 交叉编译uuid库

        我们把uuid的源码拷贝到Ubuntu,作者是拷贝拷贝到了/home/topeet/mqtt下面,如下图所示:

    输入以下命令,解压源码并进入解压生成的文件夹:

    tar -vxf libuuid-1.0.3.tar.gz

    如下图所示:

    然后我们在/opt/下创建一个名为mosquitto-arm的文件夹,命令如下:

    mkdir -p /opt/mosquitto-arm

    如下图所示:

    配置源码,我们在解压生成的uuid库的文件夹输入以下命令:

    ./configure --prefix=/opt/mosquitto-arm/libuuid-1.0.3 CC=arm-none-linux-gnueabi-gcc --host=arm-linux

    如下图所示:

    最后,编译并安装,命令如下:

    make

    make install

    编译并安装成功后会在我们设置/opt/mosquitto-arm下得到一个libuuid的文件夹

    2. 交叉编译openssl库

    解压压缩包进进入解压后的目录

    tar -vxf openssl-1.0.2g.tar.gz

    cd openssl-1.0.2g

    如下图所示。作者是放在了/home/topeet/mqtt目录下

    配置编译参数

    setarch i386 ./config no-asm shared --prefix=/opt/mosquitto-arm/openssl/

    setarch i386:声明生成的是32位CPU,如果是64位CPU则去除该部分

     --prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)。

    shared :生成动态连接库。

    no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的

    如果Makefile中有 -m32和-m64 就删掉 -m32和-m64,但是我的Makefile中没有,就没管这个。

    如下图所示:

    修改openss文件夹下的Makefile里面的编译器参数如下

    CC= arm-none-linux-gnueabi-gcc

    AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r

    RANLIB= arm-none-linux-gnueabi-ranlib

    NM= arm-none-linux-gnueabi-nm

    如下图所示:

    编译并安装

    make

    make install

    编译并安装成功后会在我们设置/opt/mosquitto-arm下得到一个openssl的文件夹

    3.交叉编译mosquitto

    解压压缩包进进入解压后的目录

    tar -vxf mosquitto-1.5.tar.gz

    cd mosquitto-1.5

    如下图所示。作者是放在了/home/topeet/mqtt目录下

    编译源码

    make WITH_SRV=no CC=arm-none-linux-gnueabi-gcc  CXX=arm-none-linux-gnueabi-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"

    注意,如果大家这里安装uuid和openssl的库的时候路径和我的不一致,要把-I和-L指定的库和头文件的路径修改成自己对应安装uuid和openssl库的路径,否则编译不过去。

    如下图所示:

    编译成功如下图所示:

    安装,命令如下

    make DESTDIR=/opt/mosquitto-arm/mosquitto-1.5 install

    编译并安装成功后会在我们设置/opt/mosquitto-arm下得到一个mosquitto-1.5的文件夹

    至此,我们mosquitto就已经交叉编译完成了

    4.把mosquitto移植到开发板

    在Ubuntu的/home/topeet/下创建一个mqtt-arm的文件夹,如下图所示:

    我们进入我们安装的mosquitto-1.5目录下,作者这里是安装在了/opt/mosquitto-arm下,如下图所示:

    我们把当前路径下的/etc/mosquitto/下的mosquitto.conf.example文件拷贝到我们在/home/topeet/下创建一个mqtt-arm的文件夹,命令如下:

    cp mosquitto.conf.example /home/topeet/mqtt-arm/

     如下图所示

    然后我们返回到mosquitto的安装目录,我们进到安装目录下mosquitto-1.5/usr/local/bin下面,如下图所示:

    我们把这个目录下所有文件拷贝到我们在/home/topeet/下创建一个mqtt-arm的文件夹,命令如下:

    cp ./*  /home/topeet/mqtt-arm/

    如下图所示:

    然后我们返回到mosquitto的安装目录,我们进到安装目录下mosquitto-1.5/usr/local/sbin下面,如下图所示:

    我们把这个目录下的mosquitto二进制文件拷贝到我们在/home/topeet/下创建一个mqtt-arm的文件夹,命令如下:

    然后我们返回到mosquitto的安装目录,把libuuid-1.0.3  mosquitto-1.5  openssl这个三个文件夹全部拷贝到我们在/home/topeet/下创建一个mqtt-arm的文件夹,命令如下:

    cp -rf libuuid-1.0.3/ mosquitto-1.5/ openssl/ /home/topeet/mqtt-arm

     如下图所示:

    然后我们返回到/home/topeet/下面,使用tar命令打包我们创建的mqtt-arm文件,命令如下:

    tar -czf mqtt-arm.tar.gz mqtt-arm/

    如下图所示:

    我们把这个压缩包拷贝到开发板的根目录,这里以4412开发板为例,其他开发板操作一致

    我们解压这个压缩包,并进入到解压生成的目录,如下图所示:

    我们把开发板当前目录下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/    

    如下图所示:

    我们把当前目录下mosquitto.conf.example复制一个和他一模一样名为mosquitto.conf的文件放在/etc下面,命令如下:

    cp mosquitto.conf.example   /etc/mosquitto.conf    

    如下图所示:

    然后我们把剩下的几个文件全部放在开发板的/bin目录下,命令如下:

     mv mosquitto mosquitto_*  /bin   

    如下图所示:

    然后我们返回到开发板的根目录,删掉我们 mqtt-arm.tar.gz的压缩包和解压生成的mqtt-arm文件夹就可以了。

    5.测试是否移植成功

    以开发板作为服务器,Ubuntu开俩个终端作为订阅者和发布者进行测试

    1,我们打开/etc下面的mosquitto.conf文件, 修改里面的第40行为 user root 并取消注释。如下图所示:

    2.使用以下命令启动开发板的mosquitto服务

     mosquitto -d -c /etc/mosquitto.conf

    如下图所示:

    查询是否启动成功,命令如下:

     ps -ef |grep  mosquitto

    如果成功入下图所示:

    3.使用ping命令ping一下自己的Ubuntu,这里一定要ping通,否则下面的步骤不成功,命令如下,IP为自己Ubuntu的ip

    ping 192.168.3.34 -c 3

    成功ping通如下图所示:

    4.在文档的第一步,我们就已经在Ubuntu上安装了mosquitto,所示我们直接打开一个终端,订阅主题,命令如下:

    mosquitto_sub -h 192.168.3.28 -t "mqtt" -v

     其中参数-h是指定要连接的MQTT服务器,这里的192.168.3.28为开发板的IP,大家要根据自己的IP来设置,-t订阅主题,此处为mqtt,所以主题为mqtt,-v打印更多的调试信息。

    如下图所示:

    5.在Ubuntu上打开另一个终端(注意这里又打开了一个终端),发布主题,命令如下:

    mosquitto_pub -h 192.168.3.28 -t "mqtt" -m "Hello MQTT"

    其中参数-h是指定要连接的MQTT服务器,这里的192.168.3.28为开发板的IP,大家要根据自己的IP来设置,-t订阅主题,此处为mqtt,-m指定消息内容,这里发送的是

    Hello MQTT。

    如下图所示:

    通信成功以后,我们会在另一个终端看到我们通过开发板作为mqtt服务器转发来的Hello MQTT

    信息,如下图所示:

  • 相关阅读:
    【新特性速递】数字输入框的前缀和后缀(位于输入框内部)
    【新特性速递】进度条,进度条,进度条
    【新特性速递】当法语遇上FineUI(Bonjour)!
    【新特性速递】自定义数字输入框的小数分隔符和千分位分隔符
    【经验分享】FineUICore中如何处理文件导出异常?
    【网友作品】服装分销系统架构与界面分享(基于FineUICore基础版)
    FineUIPro/Mvc/Core v6.3.0 正式发布了!
    星球居民突破 1700 人!
    【新特性速递】开关样式复选框增强!
    【新特性速递】为RenderField新增QuickSortField属性!
  • 原文地址:https://www.cnblogs.com/liyue3/p/14211056.html
Copyright © 2011-2022 走看看