MQTT协议版本Mosquitto移植到嵌入式arm平台

这篇具有很好参考价值的文章主要介绍了MQTT协议版本Mosquitto移植到嵌入式arm平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。


一、mosquitto是什么?

Mosquitto实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

二、交叉编译

交叉编译之前,先创建一个目录存放压缩包和移植所需文件,如mkdir /home/lhq/Tools/embed。再创建一个存放交叉编译后生成的文件的目录,如mkdir /home/lhq/mosquitto

1.交叉编译openssl源码

在 /home/lhq/mosquitto目录下创建一个用于存放交叉编译生成的文件的目录ssl,mkdir /home/lhq/mosquitto/ssl

wget https://www.openssl.org/source/old/1.0.0/openssl-1.0.0.tar.gz
tar –xvf openssl-1.0.0.tar.gz
cd openssl-1.0.0/
./config no-asm shared --prefix=/home/lhq/mosquitto/ssl
export cross=arm-linux-gnueabihf-
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"

–prefix即为刚才创建的安装目录。我这里使用的交叉编译工具链为arm-linux-gnueabihf-gcc。
make之后可能会报错:
MQTT协议版本Mosquitto移植到嵌入式arm平台
原因是arm是32位的,打开vim Makefile去掉-m64即可。
随后,

make install

在这里又报了一个错:
MQTT协议版本Mosquitto移植到嵌入式arm平台
按照上面错误提示,删除sudo rm /usr/bin/pod2man 然后再次make install
可以在安装目录看到编译生成的几个文件:
MQTT协议版本Mosquitto移植到嵌入式arm平台

2.交叉编译e2fsprogs源码

wget https://sourceforge.net/projects/e2fsprogs/files/e2fsprogs/1.41.14/e2fsprogs-1.41.14.tar.gz
tar -xvf e2fsprogs-1.41.14.tar.gz
cd e2fsprogs-1.41.14/
./configure --host=arm-linux-gnueabihf --prefix=/home/lhq/mosquitto/e2fsprogs
make
make install

–prefix为安装目录。
可将e2fsprogs源码包中lib目录下的uuid文件夹拷入安装目录:

cp -rf /home/lhq/Tools/embed/e2fsprogs-1.46.5/lib/uuid /home/lhq/mosquitto/e2fsprogs

MQTT协议版本Mosquitto移植到嵌入式arm平台

3.交叉编译c-ares源码

wget https://c-ares.haxx.se/download/c-ares-1.14.0.tar.gz
tar -xvf c-ares-1.14.0.tar.gz
cd c-ares-1.14.0/
./configure --host=arm-linux-gnueabihf --prefix=/home/lhq/mosquitto/ares
make
make install

–prefix为安装目录。
在安装目录可以看到编译生成的文件:
MQTT协议版本Mosquitto移植到嵌入式arm平台

4.交叉编译uuid源码

wget https://sourceforge.net/projects/libuuid/
tar -xvf libuuid-1.0.3.tar.gz
cd libuuid-1.0.3/
./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=/home/lhq/mosquitto/libuuid
make
make install

可以看到在安装目录下编译生成的文件:
MQTT协议版本Mosquitto移植到嵌入式arm平台

5.交叉编译mosquitto源码

wget https://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz
tar -xvf mosquitto-1.4.8.tar.gz
cd mosquitto-1.4.8/
vim CMakeList.txt

在if(${WITH_TLS} $TREOUAL ON)后面加入:

set(OPENSSL_ROOT_DIR "/home/lhq/mosquitto/ssl")
set(OPENSSL_LIBRARIES "/home/lhq/mosquitto/ssl/lib64/")

MQTT协议版本Mosquitto移植到嵌入式arm平台
路径为openssl的安装目录。

在option(WITH_SRV “Include SRV lookup support?” ON)后面加入:

# Simple detect uuid
set(CMAKE_INCLUDE_PATH /home/lhq/mosquitto/e2fsprogs)
set(CMAKE_LIBRARY_PATH /home/lhq/mosquitto/e2fsprogs/uuid)
find_path(UUID_HEADER NAMES uuid/uuid.h)
if (UUID_HEADER)
    include_directories(${UUID_HEADER})
    message(STATUS "found uuid/uuid.h at:${UUID_HEADER}")
    find_library(UUID_LIBRARY NAMES uuid)
    if (UUID_LIBRARY)
        message(STATUS "found libuuid at:${UUID_LIBRARY}")
        set (LIBRARIES ${LIBRARIES} ${UUID_LIBRARY})
    else(UUID_LIBRARY)
        message(FATAL_ERROR "uuid library not found!" )
    endif (UUID_LIBRARY)
else (UUID_HEADER)
    message(WARNING "uuid library not found.")
endif (UUID_HEADER)

MQTT协议版本Mosquitto移植到嵌入式arm平台
路径为e2fsprogs和uuid的安装目录。

然后到mosquitto源码lib目录下,vim CMakeLists.txt,将第55-63行改为如下:

    # Simple detect c-ares
    find_path(ARES_HEADER ares.h /home/lhq/mosquitto/ares/include)
    if (ARES_HEADER)
        add_definitions("-DWITH_SRV")
        include_directories(${ARES_HEADER})
        message(STATUS "found ares.h at:${ARES_HEADER}")
        find_library(ARES_LIBRARY cares /home/lhq/mosquitto/ares/lib)
        if (ARES_LIBRARY)
            message(STATUS "found libcares at:${ARES_LIBRARY}")
            set (LIBRARIES ${LIBRARIES} ${ARES_LIBRARY})
        else(ARES_LIBRARY)
            message(FATAL_ERROR "not found libcares" )
        endif (ARES_LIBRARY)
    else (ARES_HEADER)
        message(WARNING "c-ares library not found.")
    endif (ARES_HEADER)
endif (${WITH_SRV} STREQUAL ON)

MQTT协议版本Mosquitto移植到嵌入式arm平台

返回mosquitto源码根目录,在终端执行:

cmake -DCMAKE_C_COMPILER="arm-linux-gcc" -DCMAKE_CXX_COMPILER="arm-linux-g++" -DCMAKE_INSTALL_PREFIX=/home/mosquitto/arm/mosquitto/ CMakeLists.txt

识别到了Ubuntu x86系统的openssl路径。
MQTT协议版本Mosquitto移植到嵌入式arm平台

这里需修改为刚才交叉编译出来的路径:vim CMakeCache.txt,改为如下内容:
MQTT协议版本Mosquitto移植到嵌入式arm平台
再次执行

cmake -DCMAKE_C_COMPILER="arm-linux-gcc" -DCMAKE_CXX_COMPILER="arm-linux-g++" -DCMAKE_INSTALL_PREFIX=/home/mosquitto/arm/mosquitto/ CMakeLists.txt

MQTT协议版本Mosquitto移植到嵌入式arm平台
已经识别到刚才交叉编译出来的openssl路径。

接下来再:

make
make install

MQTT协议版本Mosquitto移植到嵌入式arm平台
这里没必要sudo makesudo make install,加上sudo而修改环境变量就得不偿失了。
进入mosquitto安装目录查看,
MQTT协议版本Mosquitto移植到嵌入式arm平台

6.将编译得到的文件拷贝到开发板执行

在开发板/usr目录下分别创建ssl、uuid、mqtt、ares、e2fsprogs文件夹,将交叉编译得到的文件分别拷入新建的目录下,可通过nfs挂载。

拷贝成功后再配置开发板环境变量,vim /etc/profile

#mqtt start
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ssl/lib64
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/uuid/lib
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/mqtt/lib
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ares/lib
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/e2fsprogs/lib
export PATH=$PATH:/usr/ssl/bin
export PATH=$PATH:/usr/mqtt/bin
export PATH=$PATH:/usr/mqtt/sbin
export PATH=$PATH:/usr/e2fsprogs/bin
export PATH=$PATH:/usr/e2fsprogs/sbin
#mqtt end

之后,再source /etc/profile使环境变量生效。

再进入/usr/mqtt/bin,给mosquitto_pub、mosquitto_sub、mosquitto_passwd;/usr/mqtt/sbin,给mosquitto赋可执行权限。

6.1测试

mosquitto_sub -t test ,再打开一个终端,mosquitto_pub -t test -m "hello world"。可以看到,订阅和发布都能成功。
MQTT协议版本Mosquitto移植到嵌入式arm平台

6.2错误解决

如果网络已经连通,出现如下错误,可这样考虑解决:
MQTT协议版本Mosquitto移植到嵌入式arm平台
执行:

mosquitto -c /usr/mqtt/etc/mosquitto/mosquitto.conf

再执行订阅和发布即可。

如果执行mosquitto -c /usr/mqtt/etc/mosquitto/mosquitto.conf时出现如下错误:
1672122706:Error:Invalid user ‘mosquitto’
可将上面的mosquitto.conf文件的#user mosquitto下加上user root
MQTT协议版本Mosquitto移植到嵌入式arm平台
或者adduser mosquitto新增一个普通用户,再执行。文章来源地址https://www.toymoban.com/news/detail-463898.html


到了这里,关于MQTT协议版本Mosquitto移植到嵌入式arm平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP32 移植 AWTK(嵌入式GUI库)

    最近了解到有一个叫AWTK的嵌入式GUI库,是ZLG(周立功)开发的一个开源免费可商用的嵌入式GUI库。手头上刚好有一个自己最近设计的ESP32测试板,型号是ESP32_WROOM_32,和一个0.96寸80x160的TFT屏,就想着能不能把这个AWTK库移植到ESP32上玩一下。于是,我又开始给自己挖坑了。 这次移

    2024年01月22日
    浏览(70)
  • 物联网实战--入门篇之(七)嵌入式-MQTT

    目录 一、MQTT简介 二、MQTT使用方法 三、MQTT驱动设计 四、代码解析 五、使用过程 六、总结 一、MQTT简介         MQTT因为其轻量、高效和稳定的特点,特别适合作为物联网系统的数据传输协议,已经成为物联网事实上的通信标准了。关于协议的具体内容看看这篇文章和官方文

    2024年04月08日
    浏览(85)
  • 嵌入式Linux底层系统开发 +系统移植+内核文件系统(基础)

    搭建交叉编译开发环境 bootloader的选择和移植 kernel的配置、编译、移植和调试 根文件系统的制作 前两个要点通常芯片厂家提供。后边两个要点是公司的工作重点。 学习方法:先整体后局部,层层推进 如何编译—如何添加命令和功能—如何定义自己的开发板。 移植的基本步

    2024年02月03日
    浏览(67)
  • 【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL

    最近emwin用的比较烦躁,同时被LVGL酷炫的界面吸引到了,所以准备换用LVGL试试水。 LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。 丰富且强大的模块化图形组件:按钮 (b

    2024年02月02日
    浏览(65)
  • 基于嵌入式linux的OpenSSL源码移植(基于arm64)

    SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。

    2024年02月11日
    浏览(64)
  • 嵌入式linux驱动开发之移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的。一通百通,无论是其他4G模块都是一样的。这里记录下过程,分享给有需要的人。环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里要移植使用的是移远4G模块EC800。 imax6ul开发板 虚拟机(Ubuntu18.04) 交叉编译

    2024年02月17日
    浏览(63)
  • 基于RK3588的嵌入式linux系统开发(二)——uboot源码移植及编译

            由于官方的SDK占用空间较大(大约20GB左右),需要联系相关供应商提供,且官方的SDK通过各种脚本文件进行集成编译,难以理解系统开发的详细过程。本章介绍直接从官方Github网站下载源码进行移植,进行uboot移植及编译,具体内容如下所述: 1.进入官方的github网

    2024年01月16日
    浏览(56)
  • (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

    目录 一、bootloader、kernel、rootfs联系 二、内核移植 1. 内核源码获取 2. 内核配置与编译 🍍 基础配置与编译 🍍 TF卡分区 🍍 内核烧录 三、参考内容 kernel可以理解为一个 庞大的裸机程序 ,和uboot以及其他比如点灯类似的裸机程序没有本质区别,只是kernel分为 用户态和内核态

    2024年02月15日
    浏览(80)
  • 嵌入式linux之iMX6ULL驱动开发 | 移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的。一通百通,无论是其他4G模块都是一样的。这里记录下过程,分享给有需要的人。环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里要移植使用的是移远4G模块EC800。 imax6ul开发板 虚拟机(Ubuntu18.04) 交叉编译

    2024年02月12日
    浏览(55)
  • 五种嵌入式经典通信总线协议

    并行通信和串行通信是两种不同的数据传输方式: 并行通信:并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输,同时进行。这样可以在一个时钟周期内传输多个比特,提高传输速率。并行通信常用于短距离高速数据传

    2024年01月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包