开发者学堂课程【嵌入式之 RFID 开发与应用2020版:MQTT-mosquitto 嵌入式移植问题解决及环境配置】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11181
MQTT-mosquitto 嵌入式移植问题解决及环境配置
内容介绍:
一、检查错误
二、开发板的移植
三、环境变量的配置
一、检查错误
上节课编译的时候遇到问题,所以根据问题提示 -crypto 有问题是不认识 -crypto,打开 vim config 搜索一下哪里输错了,应该是 -lcrypto 而不是 -crypto
检查其他地方有无错误,再重新去编译,这次编译顺利通过,可以看到目录没有生成任何东西,接下来 install 创建 etc 下的etc/mosquitto/mosquitto.conf.exanple,显示权限不够 ,看一下安装目录是否正确,安装目录已经产生了,所以不建议用速度权限去检查安装权限,不希望它去配置 etc 下的文件 etc/mosquitto/mosquitto.conf.exanple ,因为这个文件是直接安装的时候系统自带的,如果因为交叉编译将它改变,就会得不偿失,所以说不建议去改 etc 下的文件。最终生成的文件,需要把它拷贝到开发板里面去, 然后在开发板里面运行 。
二、开发板的移植
接下来要对库进行移植将编译生成的 uuid、openssl\mosquitto 库和命令拷贝到开发板,开发板是比较复杂的一个板子,不管是 arm 处理器的哪种板子都差不多,所以通过串口连过来,接下来在设备管理器找到串口,串口是 32,然后在会话里面去打开 32 ,
由于开发板一直在换,每次用的时候要查看一下。开发版和 PC 有本质的区别,开发版如何去移植,首先第一步要获取就开发版的IP地址,( 因为之前忘了插网线 现在把网线插上),插上之后通过 udhcpc 获得 IP,获得之后有一个挂载的脚本 cat gz.sh, 还是之前的代码 192 .168.1.13:/home/edu/mnt
所以直接执行挂载,挂载完之后 应该就在 debug/mqtt 目录下,
没有必要到里面去 ,只需要进到 usr 目录 ,所以现在要做的就是在 usr 里面创建一个 mqtt 在开发板里面,创建好需要把一些东西拷过来 ,需要拷的东西比较多,uuid、openssl、moquitto 库和命令这都需要拷过来,但是为了节省空间,可以把头文件和静态库去掉,只保留动态库和命令就可以了。可以先看一下编出来的东西哪些是比较重要的并肯定需要 ,msquitto -1.5.4_install$ ls sbin 也很重要,msquitto -1.5.4_install$ lsshare 在配置的时候也要用到, 除了 include 建议把剩下都拷贝一下
在开发板里拷贝 cp/mnt/debug/mqtt/mosquitto-1.5.4_install/bin/.-arf。
一定要加上 arf,因为里面有一些链接文件。如果不加-a的话就会拷成实体文件会增加空间。 Lib 拷过来然后再拷 sbin。Share 拷不拷都可以。可以看一下 lib 里面基本上都是动态库,如果有静态库可以把它删掉。 Mqtt 就拷完了。还需要拷贝 mkdir ssl,进入到 SSL 里面把 openssl-1.0.1e_install$ ls bin 应该是不需要,然后 lib 必须要有。 SSL 的配置文件也需要,除了 include 都需要拷过来,因为需要在开发板里用到。 mnt/debug/mqtt /openssl-1.0.1e_install/bin.-arf 里面的 bin,除了 bin 之外,就是 mnt/debug/mqtt /openssl-1.0.1e_install/lib.-arf ,mnt/debug/mqtt /openssl-1.0.1e_install/ssl.-arf ,这样就拷完
uuid 同理非常简单,而且就是静态库。拷贝 mnt/debug/ mqtt/ libuuid-install/lib.-art。
这时候 mosquitto 用到的所有库都已经拷过来了。但运行是有问题的,因为还没有指定环境变量,而且 mosquitto 的配置文件也没有,文件可以手动创建或者复制一个,在开发板里一般不需要 mosquitto 配置文件,因为开发板通常就是作为客户端存在的。
三、环境变量的配置
拷完之后配置环境变量,环境变量的配置需要复制LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/mqtt/openssl_install/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/mqtt/uuid_install/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/mqtt/mqtt _install/lib
复制的原因是要进行修改,环境变量首先要修改路径 /home/edu/debug/mqtt,首先是 usr、mqtt,mqtt 没有问题,openssl 是上一个目录需要改为 uuid,这就是环境变量。Path 直接改为 mqtt/mqtt_install/bin 直接改为 usr/ssl,把改过之后的复制到开发版的配置文件中,打开 etc/profile 一般情况下将复制的内容添加到最后。在最后的位置找与环境变量相匹配的位置,然后让它立即生效执行.命令,现在看命令 mosquitto 是否可以找到,能找到就继续进行测试,开发板是有 ip 的,接下来进入到服务器,可以用自己编的服务器也可以用自带的,先让服务器器启动起来,退出到 mosquitto-1.5.4,就用自带的 mosquitto-c/etc/mosquitto/ 比较简单些自带的支持安全认证,所以还是用自己编的 mosquitto-1.5.4_install$ cd 配置文件,自己编的处于裸奔的状态,没有什么安全性,但是并不影响使用
验证过之后自己去配置 -c/home/edu/debug/mqtt/mosquitto-1.6.9_install/etc/mosquitto/mosquitto.conf, 进入到开发板当中,要进到 PC 机的top6 版本,1883 被占用的时候改为 1893, 这时服务器就已经运行起来了,服务器运行起来之后启动一个客户端,进入到 mosquitto-1.6.9_install$ cd usr/local/bin/,在下一行输入/mosquitto_sub -t temp -p 1893
现在在开发板去发布这样能形成一个对比,在服务器开了服务端,在服务器开了订阅端,在开发板上作为发布端,在开发板上输入 mosquitto_pub -t temp -m hello_p 1893
就可以去发布
连接失败,原因是没有指定 ip,现在不是同一台机器,如果是同一台机器通过127.0.1 的回环就可以连接,但是开发板不在同一台机器甚至不再同一个网段,开发板的 ip 是 31,服务器的是 1,所以不是同一个网段,肯定会出现问题,所以重新输入 mosquitto_pub -t temp -m hello -h 192.168.1.13-p 1893
,这就是通过开发板收到了 192.168.1.3 这样的网关,这个网关连接到了31的开发板上面。订阅的话同理,输入 mosquitto_sub-t temp -h 192 .168.1.13 -p 1893
这样就订阅了,换一个路径在 /mosquitto_pub-t temp -h 192 .168.1.13 -p 1893
路径发布,现在换成 /mosquitto_pub-t temp -m hehe -h 192 .168.1.13 -p 1893
服务器有订阅,开发板也有订阅,所以都可以收到,不管是服务器发布还是客户端发布,不管是服务器订阅还是客户端订阅都可以连接上,不管是服务器作为客户端还是服务端都可以。也就是通过 MQTT 可以连接到全世界的服务器。Mqtt 的移植就讲到这里。