Mosquitto移植到嵌入式arm平台

MQTT移植和使用

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

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

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

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

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

说明:其实3里面的文件就是从2里面拷贝出来的

1.下载源码 (mosquitto uuid openssl)

wget https://sourceforge.net/projects/libuuid/files/libuuid-1.0.3.tar.gz

wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz 

wget https://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz

下载并解压

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

4.交叉编译 uuid 库

在前面已经把下载好的源码放在了~/MQTT目录下,并且解压了

1.进入解压后的目录

2.配置

 ./configure --prefix=/opt/mosquitto-arm/libuuid-1.0.3 CC=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --host=arm-linux

参数说明:
configure–prefix=/opt/mosquitto-arm/libuuid-1.0.3 指定安装路径,就是前面准备好的路径
CC=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-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 里面的编译器参数如下:
  4. CC=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
    AR=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf--ar $(ARFLAGS) r
    RANLIB=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ranlib
    NM=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-nm

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

  5.  

    6.交叉编译 mosquitto

    1.进入目录
    2.编译

make WITH_SRV=no CC=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-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/mosquitto-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 install DESTDIR=/opt/mosquitto-arm/mosquitto-1.5

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

小知识:

1.配置阶段指定安装目录

  1. # ./configure --prefix=~/home/out

  2. # make -j20

  3. # make install

  4. 注意:在make install时,就按装到了~/home/out下.

2.安装阶段指定安装目录 

  1. 1.Makefile工程

  2. # make install DESTDIR=/path

  3. 2.QT工程

  4. make install INSTALL_ROOT=/path

  5. 3.ninja工程

  6. DESTDIR=/path ninja -C . install

  7. 注意:./path为绝对路径

错误参考:

install -s --strip-program=strip libmosquitto.so.1 /opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/libmosquitto.so.1
strip: Unable to recognise the format of the input file `/opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/libmosquitto.so.1'

打开config.mk。在文件顶部添加如下

CC=arm-linux-gnueabihf-gcc
CXX=arm-linux-gnueabihf-g++
CPP=arm-linux-gnueabihf-g++
AR=arm-linux-gnueabihf-ar 
LD=arm-linux-gnueabihf-ld

文件末尾的prefix= 需要输出路径

strip=arm-linux-gnueabihf-strip    注意:要把arm-linux-gnueabihf-strip拷贝到/usr/bin下

3.去掉config.mk中一些选项

WITH_TLS:=no

WITH_TLS_PSK:=no

WITH_SRV:=no

WITH_UUID:=no

当然,如果你需要这些外部库就需要编译出来,并改为yes

4.make && make install

问题:

install -s --strip-program=arm-linux-gnueabihf-strip  libmosquitto.so.1 /home/vmuser/mqtt_install/lib/libmosquitto.so.1

strip: Unable to recognise the format of the input file `/opt/mosquitto-arm/mosquitto-1.5/usr/local/lib/libmosquitto.so.1'

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

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

为了不搞乱我们编译好的库,我们就先创建个目录mqtt-arm

 进入cd /opt/mosquitto-arm目录拷贝三个库到我们前面新创建的目录下

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

进入/opt/mosquitto-arm/mosquitto-1.5/etc/mosquitto拷贝下面的mosquitto.conf.example到/home/lucifer/mqtt-arm

进入/opt/mosquitto-arm/mosquitto-1.5/bin 找到一下应用,全部拷贝到/home/lucifer/mqtt-arm

 

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

6.打包
我们回到我们创建的目录下
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/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

发布者:
/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc mqtt_pub.c -o mqtt_pub -I /opt/mosquitto-arm/mosquitto-1.5/include/ -L /opt/mosquitto-arm/mosquitto-1.5/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

参数说明:

/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-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/lib/ lmosquitto库路径
-L /opt/mosquitto-arm/libuuid-1.0.3/lib/ -luuid库路径
-L /opt/mosquitto-arm/openssl/lib/ -lssl库路径
-lmosquitto -lssl -lcrypto -luuid

订阅者:
/home/lucifer/pro/tool/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc mqtt_sub.c -o mqtt_sub -I /opt/mosquitto-arm/mosquitto-1.5/include/ -L /opt/mosquitto-arm/mosquitto-1.5/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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值