Linux应用层开发 · 2023年8月9日 0

ARM开发板实现数据发布mqtt服务器(环境搭建)

前言

因为也是近期才学习的linux c开发,所以实现arm开发板的mqtt数据上传,也是熬了几天夜,自己查资料,现在已经搞定了,接下来分享一下学习过程中遇到的一些问题;

一、目标、硬件、环境介绍

1、目标

因为公司的设备现在需要读取modbusrtu数据上传到mqtt服务器,之前是用的市场上的一些第三方,虽然用的没问题,但是缺点就是不能整合,而且也不支持二次开发,这些都需要收费,而且收费很高;所以我就决定自己找一个开发板,做个简单开发测试下能不能代替掉之前用的这个第三方设备。

2、硬件和环境

arm开发板,带一个串口,RJ45网口,SD卡,usb口,蜂鸣器,LED灯,type-c接口,最重要的他有移远的模组,支持插Micro SIM卡,就是手机卡,支持4G信号,然后usb口可以接无线网卡连无线,可以说是基本上所有的网络环境都可以适配了,这也是选这款开发板来开发的原因,而且厂家把驱动都搞好了,只需要应用层开发,这样对于我这种新手来说也是很友好。

开发环境用的是ubuntu18.04,交叉编译器是厂家提供的arm-linux-gcc 4.8.3版本,厂家提供的开发环境是ubuntu12.04,我觉得不好用,就把交叉编译器放到18.04上用了,32位编译器在64位环境下会识别不了,apt安装一个32位环境库,sudo apt install libc6:i386 ,配置下环境变量打开/root/.bashrc添加一行 export PATH=$PATH:/usr/local/arm/4.8.3/bin ,重启下才能生效,然后输入下arm-linux-gcc -v看下有版本号输出,操作完暂时没遇到其他的问题,代码和软件可以正常编译。

二、整体思路及步骤

1、前面几篇文章已经实现了arm开发板读取modbusrtu的数据,后面我会把arm开发板读取modbusrtu数据上传至mqtt服务器的实验代码分享出来,可以供大家参考;

2、接下来要实现arm开发板数据上传mqtt服务器,

1)网上找mqtt c库,好用的有两个Eclipse Paho C和Mosquitto,我用的是前面的Paho-mqtt-c库;

2)下载Paho-mqtt-c源代码(这个是GIT仓库地址https://github.com/eclipse/paho.mqtt.c.git)

sudo git clone https://github.com/eclipse/paho.mqtt.c.git

解压缩

tar -xvf paho.mqtt.c

3)编译源代码,编译需要用到交叉编译器arm-linux-gcc,不能用ubuntu apt下载的gcc,需要改makefile;

稍等再改,因为编译paho.mqtt.c库需要先安装依赖,openssl,同样,openssl也需要交叉编译。

4)到openssl官网下载openssl源代码(我下载的是openssl-1.1.0d.tar.gz)下载老版本可以点击这个链接openssl旧版本下载

下载完成后解压

tar -xvf openssl-1.1.0d.tar.gz

5)解压后进入文件夹

$ cd openssl-1.1.0d
$ sudo ./Configure linux-generic32  \
	no-shared \
	no-asm \
	no-async \
	--prefix=/home/install \
	--cross-compile-prefix=arm-linux-
  • linux-generic32 指定目标平台类型(32位),64位的可以去掉这个;
  • no-shared 生成静态库,如果要生成动态库,则使用-shared选项;
  • no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程;
  • –prefix 指定安装目录;
  • –cross-compile-prefix 指定交叉编译器名字前缀;
  • no-async arm-linux-的machine定义为arm-linux-ulibcgnueabi,没有提供GNU C的ucontext库,所以需要添加此选项,否则编译会报错;
make
sudo make install

6)安装好了之后在安装目录/home/install下的lib文件夹下有库文件,待会交叉编译Phao-mqtt-c的时候需要用到;

7)上面编译安装好了之后就开始交叉编译Phao-mqtt-c,上面已经下载了直接进入文件夹,并且修改Makefile

cd paho.mqtt.c
vi Makefile

不显示行号的把行号显示出来,按下键盘的ESC键,然后键入:set nu就可以显示行号了;

主要改三个地方,

①交叉编译器

②openssl目录

③openssl交叉编译后库的目录

Makefile的126行,也有可能不一样,差不多附近行找一下

cc ?=gcc 改成 cc = arm-linux-gcc

ctrl+F搜索“openssl”把所有涉及openssl的目录改为我们上面openssl的安装目录,照着改就行,如果下面这两行没有的就添加进去,不加进去,编译的时候会报错找不到openssl文件,或者编译出来用的不是交叉编译的openssl;

CFLAGS += -I/home/install/include

LDFLAGS += -L/home/install/lib

/home/install 是我的安装目录,上面配置的什么换成什么就可以了。

配置好了ESC,:wq 保存退出

make
sudo make install

编译完成后可以在build/output目录下看到编译好的库

到这一步差不多环境已经好了,主要paho.mqtt.c交叉编译成功,output里面有库文件就证明成功了

下一章再说后面的操作。