飞凌嵌入式OK113i-S开发板上市一段时间以来收获了很多关注,也成为了许多客户项目选型的优质之选。在实际的项目开发中,工程师朋友们可能会需要在文件系统中移植一些工具或协议,那么该如何进行移植操作呢?我们可以通过添加package包配置的方式在OK113i-S开发板的Buildroot中移植新功能。本篇文章,小编就以在Buildroot移植MQTT协议为例为大家介绍。
Part 1 配置文件介绍
首先了解一下在Buildroot中移植功能时涉及到的配置文件。
查看飞凌嵌入式OK113i-S开发板源码中已有的配置文件,可以看到在路径 buildroot/buildroot-201902/package/mosquitto 里边包括以下几个文件:
Config.in mosquitto.mk mosquitto.hash mosquitto.service S50mosquitto
① Config.in
Config.in文件通过 BR2_PACKAGE_** 作为开关来告知Buildroot需要哪个包参与编译,开关在 buildroot/buildroot-201902/configs/ 下面的 OK113I_linux_defconfig 配置文件中赋值,类似于内核中的Kconfig文件。
例如:
package/Config.in中写了调用关系
source "package/mosquitto/Config.in";
package/mosquitto/Config.in中写了
BR2_PACKAGE_MOSQUITTO信息。
② demo.mk
这个文件中声明一些包的信息,比如:指定包的版本、包源码下载链接、存放路径、编译规则、工具链等。编译时会按照这个文件中的下载地址和版本下载源码包到指定路径并进行编译和文件拷贝,相当于Makefile文件。
例如:mosquitto.mk
文件开头先写了软件包版本和下载地址,我们在浏览器访问该地址可以找到对应版本的软件包。编译时,如果源码中没有该文件,就会自动下载。
mosguitto-1.5.8.tar.gz
mosguitto-1.5.8.tar.gz.asc
除此之外文件中还定义了其他的编译规则,包括文件拷贝路径等内容。
③ demo.hash
这个文件会记录下载的源码包的hash校验码,防止下载的源码包出错。
④ demo.service
此文件是为systemd服务 ,systemd开机后会依据此文件启动demo服务,在demo.mk中会指定此文件的源路径已经安装路径。目前OK113i-S开发板没有使用该服务,因此可以不用管它。
⑤ S50demo
此文件类是demo.service,是目前OK113i-S开发板在使用的开机服务类型。
在以上5种文件中Config.in和demo.mk是必须的,其他文件按需配置即可。具体配置内容可参考已有文件或根据实际情况进行书写。Mosquitto已经有写好的配置文件,可以直接用,一般配置文件由项目的维护者或开发者提供,如果自己移植的文件没有配置文件,可以参考已有配置文件写一个。
Part 2 执行
我们需要在buildroot/buildroot-201902中执行
make OK113I_linux_defconfig
然后执行make menuconfig ARCH=arm
在图形配置界面进行配置(如果执行报错,请先安装该指令:sudo apt-get update 和 sudo apt-get install ncurses)。
进入图形配置界面后输入“/”搜索要配置的功能,如图搜索Mosquitto看到的信息,按提示选“1”可进入目标选项,按“空格”选择后保存并退出。
配置完成后,在当前目录下执行 ./build.sh对文件系统进行编译,编译完成后可查看文件系统中是否已经有对应文件。(注:如果没有网络,则编译时不能自动下载源码包,需要到下载地址手动下载源码包并放到源码包存放路径中。)
Part3 MQTT的测试验证
修改OK113i-S开发板的 /etc/mosquitto/mosquitto.conf 文件,在#user mosquitto后加一行user root,重启服务或者开发板。也可以杀掉进程并重新执行:
/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
然后进行测试——
订阅test主题:
mosquitto_sub -t test &
发布test主题:
mosquitto_pub -t test -m "hello world"
能看到返回的 hello world 字样,就说明移植成功了。