项目实战-广域网智能家居-把mosquitto移植到arm上

语言: CN / TW / HK

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

信息,如下图所示:

 

分享到: