MQTT-mosquitto 嵌入式移植问题 | 学习笔记

简介: 快速学习 MQTT-mosquitto 嵌入式移植问题

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:MQTT-mosquitto 嵌入式移植问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11180


MQTT-mosquitto 嵌入式移植问题

内容介绍:

一、交叉编译嵌入式平台是怎样的

二、UUID 的源码的获取

三、交叉编译器定义

四、mosquitto 的编译

 

一、交叉编译嵌入式平台是怎样的

有关 PC 端 X86 架构的 mosquito 也就是 mqtt 的发现版移植就告一段落,接下来重点学习交叉编译嵌入式平台的移植。这个可能用的是最多的,因为 X86 可以直接安装别人移植好的 ,但是对于目标平台, 根据不同的架构必须重新移植,而且在移植过程当中,没有办法去使用 PC 端已有的一些库的依赖,比如说 UUID 得必须重新通过源码的方式去得到,uuid 源码(libuuid-1.0.3.tar.gz), openssl 重新编译,还有 mosquitto  也要重新编译,因为依赖 PC 机,那么它指令是不一样的,依赖结束之后最终到开发板里面去,还需要把库给拷过去,所说了 mosquitto 在 ARM 平台下的搭建就一个一个去编,mosquitto 和 openssl 下载方法同 pc ,下载uuid 源码(libuuid-1.0.3.tar.gz) https://sourceforge.net/projects/libuuid/     编译 openssl:mkdir   /home/user/mqtt/arm/openssl_install   解压并进入 openssl-1.0.1e

 

二、UUID 的源码的获取

首先去获得这个 UUID 的源码,这些版本( libuuid-1.0.3.tar.gz )都是验证过的 ,可以到官网去下载 https://sourceforge.net/projects/libuuid/,

这里还是一样的把下载好的拷过来,这次的移植采用的是交叉编译,需要暂时把之前移植残留的先删除掉,在删除之前 ,因为里面的配置比较多,把它拷一份出来,不用再重新去敲了,

image.png

之前有添加过一些东西,比如说是 BROKER_LIBS--L/home/edu/debug/mqtt/openssl-1.0.1e_install/lib-lm-ldl-lssl-lcrypto;PASSWD_LIBS--L/home/edu/debug/mqtt/openssl-1.0.1e_install/lib-lssl-lcrypto;LIB_LIBS--L/home/edu/debug/mqtt/openssl-1.0.1e_install/lib-lssl-lcrypto拷到笔记里

就是 CC=gcc CXX=g++ prefix=/home/edu/debug/mqtt/mosquitto-1.5.4_install要改成交叉编译器,删除掉之前的 mosquitto-1.5.4 。

image.png

而且这里要提醒一下,刚才的编译用的是最新版 1.6.9,交叉编译是否需要用最新版,可以进行尝试,为了保险还是先用验证过的版本去测试,因为在终端验证不需要版本的最新,关键是能够稳定的运行才是最主要的,把 openssl 也删掉 把mosquito 重新解压,openssl 要重新去解压和安装,mosquitto1.5.4 _install/ 目前没有任何的东西,但是 openssl 安装目录下已经有内容,把里面的东西删掉

image.png

删掉之后,重新去解压 mosquitto1.5.4,之前选择 1.5.4 版本其实是希望 PC 和羌式使用同一个版本,实际因为现在用的是十八点几版本 ,把 UUID 解压出来, 还需要再解压 openssl,进入到 openssl 之后

image.png

openssl 的路径 openssl-1.0.le_install/  需要记一下 ,/home/edu/debug/mqtt/openssl-1.0.1e_install 是安装路径,

在 openssl 里面要配置,  config no asm -shared--prefix =/home/edu/debug/mqtt/openssl-1.0.1e_install 就是安装路径,

指定一下,还是在这个路径下。配置完成之后,因为 X86 要去修改 makefile ,把 PLATFORM 平台改成  Arm  架构,第二个是编译器只在用,没有在定义。

image.png

 

三、交叉编译器定义

交叉编译器需要自己去定义,输入 CROSS_COMPILE =arm-linux-,CC=arm-linux-gcc   MAKEDEPPROG=arm-linux-gcc ,

基本上就是这些,改完了之后 make 一下,这时要把-m64去掉,编译完成 ,编译的时间较长大概需要四五分钟,装完了之后退出,openssl  装完。接下来编译libuuid,libuuid 退出来, 需要去创建一个安装目录 libuuid-1.0.3_install 就是名称。config--host=arm-linux CC=arm-linux-gcc--prefix=/home/edu/debug/mqtt/libuuid-1.0.3$_install

配置完成之后,环境变量已经取消,所以直接 make,还没有进行安装 ,uuid 主要是生成唯一识别码, 就是生成唯一标识,接下来就是编写 mosquitto ,配置会比较多,比较麻烦 ,需要耐心的对它进行配置

image.png

把路径记录一下路径为 g/mqtt/libuuid-1.0.3_install ,

/home/edu/debug/mqtt/libuuid-1.30.3_install 是 uuid 的库的安装目录,Openssl 的目录 home/edu/debug/mqtt/openssl-1.0.1e_install/ 的目录已经编写完成。

 

四、mosquitto 的编译

下面进行 mosquitto1.5.4_install ,进入到 mosquitto1.5.4,打开配置文件 这里的配置与 pc 端的编译非常像,首先编译器要在开头去加上,CC=arm-linux-gcc CXX=arm-linux-g++  prefix=/home/user/mqtt/arm/mqtt_install

添加是一样的,路径基本上不动,都加上 arm-linux ,然后很多人没有交叉编译器,交叉编译器一般网上可以下载,就是与目标平台是arm的还是dips的自己去找 ,紧接着加上CFLAGS:-I/home/user/mqtt/arm/openssl_install/include-T/home/user/mqtt/arm/uuid_install/include;LDFLAGS=L/home、user/mqtt/arm/openssl_install/lib_lm_ldl_lssl_lcrypto-L、home/user/mqtt/arm/uuid_install/lib_luuid-lrt。

image.png

这个路径是 openssl 的路径,也就是 MAKEDEPPROG=arm-linux-gcc 的路径,要把这个路径加进来,并且要在路径的后面加上 inulude  ,下一个路径是 uuid 的路径,再在后面加上 include,再来一个 LDFLAGS=-L/home/edu/debug/mqtt/openssl-1.1.1e_install/lib-lm-ll-lssl-crypto-L

继续指定 uuid 的库, uuid 的库包括 lib、luuid、lrt。CFLAGS 的编译选项和链接选项大概就配置完了,继续往下就是添加之前的 MAKEEPPROG, 不同之处是多了一个 uuid 其它的是一样的,把 uuid 补到 Broker library 后面,这样就多了一个库,其他的还是 openssl 的库,其他的都一样只是位置可能需要去找到,把这三个库复制一下

BROKER_LIBS=L/home/edu/debug/mqtt/openssl-1.0.1e_install/lib -lm  -ldl  -lssl   -lcrypto -L/home/edu/debug/mqtt/libuuid-1.0.3_install/lib -luuid PASSWD_LIBS=-L/home/edu/debug/mqtt/openssl-1.0.1e_install/lib -lssl -lcrypt LIB LIBS=-L/home/edu/debug/mqtt/openssl-1.0.1e install/lib -lssl lcryto然后去找到合适的添加位置,添加位置还是要去搜索一下  PASSWD, 找到之后插入进来,另外一个位置到之后同样进行粘贴,

image.png

环境变量最开头指定过 ,如果指定过建议不要去修改环境变量,不然路径会比较麻烦,直接去 make 就可以。  make 的时候有问题,Linux 少了一个 u ,其实整个环境配置的主要过程其实就是解 bug 的过程,实际上还是遇到了一些问题 ,这个问题与之前出现的问题是类似的,下节课就专门来解决这个问题。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
消息中间件 存储 算法
RocketMQ学习笔记
RocketMQ学习笔记
155 0
|
6月前
|
传感器 网络协议 中间件
Mqtt学习笔记--交叉编译移植(1)
Mqtt学习笔记--交叉编译移植(1)
121 0
|
6月前
|
编解码 Ubuntu 算法
【Linux】NUC977移植使用MQTT(基于mosquitto)
【Linux】NUC977移植使用MQTT(基于mosquitto)
|
消息中间件 存储 缓存
RibbitMQ学习笔记之MQ练习(三)
RibbitMQ学习笔记之MQ练习
49 0
|
消息中间件 网络协议 数据中心
RabbmitMQ学习笔记-RabbitMQ集群架构模式
RabbmitMQ学习笔记-RabbitMQ集群架构模式
83 0
|
消息中间件 Java
RabbmitMQ学习笔记-RabbitMQ与SpringBoot2.0整合实战
在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。
116 0
|
消息中间件 中间件
RibbitMQ学习笔记之MQ发布确认
RibbitMQ学习笔记之MQ发布确认
56 0
|
消息中间件 网络协议
RibbitMQ学习笔记之MQ练习(二)
RibbitMQ学习笔记之MQ练习
34 0
|
消息中间件 网络协议 Java
RibbitMQ学习笔记之MQ练习(一)
RibbitMQ学习笔记之MQ练习
78 0
|
消息中间件 存储 网络协议
RibbitMQ学习笔记之MQ 的相关概念
RibbitMQ学习笔记之MQ 的相关概念
82 0