开发者学堂课程【嵌入式之 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/,
这里还是一样的把下载好的拷过来,这次的移植采用的是交叉编译,需要暂时把之前移植残留的先删除掉,在删除之前 ,因为里面的配置比较多,把它拷一份出来,不用再重新去敲了,
之前有添加过一些东西,比如说是 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 。
而且这里要提醒一下,刚才的编译用的是最新版 1.6.9,交叉编译是否需要用最新版,可以进行尝试,为了保险还是先用验证过的版本去测试,因为在终端验证不需要版本的最新,关键是能够稳定的运行才是最主要的,把 openssl 也删掉 把mosquito 重新解压,openssl 要重新去解压和安装,mosquitto1.5.4 _install/ 目前没有任何的东西,但是 openssl 安装目录下已经有内容,把里面的东西删掉
删掉之后,重新去解压 mosquitto1.5.4,之前选择 1.5.4 版本其实是希望 PC 和羌式使用同一个版本,实际因为现在用的是十八点几版本 ,把 UUID 解压出来, 还需要再解压 openssl,进入到 openssl 之后
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 架构,第二个是编译器只在用,没有在定义。
三、交叉编译器定义
交叉编译器需要自己去定义,输入 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 ,配置会比较多,比较麻烦 ,需要耐心的对它进行配置
把路径记录一下路径为 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。
这个路径是 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, 找到之后插入进来,另外一个位置到之后同样进行粘贴,
环境变量最开头指定过 ,如果指定过建议不要去修改环境变量,不然路径会比较麻烦,直接去 make 就可以。 make 的时候有问题,Linux 少了一个 u ,其实整个环境配置的主要过程其实就是解 bug 的过程,实际上还是遇到了一些问题 ,这个问题与之前出现的问题是类似的,下节课就专门来解决这个问题。