移植 MQTT broker mosquitto 到 omapl138
概述
本次移植使用创龙的 TL138-EVM 开发板,基于 TI 的 MCSDK 开发环境。具体上位机系统为 Ubuntu 12.04-32bit,软件环境基于创龙的用户手册搭建。
为了移植后在 138 上运行的 web 服务也能使用 mosquitto,所以编译构建时要开启其 libwebsocket 功能支持。所以这里移植就总共分三步走。交叉编译 libwebsocket,交叉编译 mosquitto,移植编译结果到目标文件系统。
交叉编译 libwebsocket
准备工作
官网下载源码包: https://libwebsockets.org/
构建过程需要比 Ubuntu 的 apt-get 方式安装的更高版本的 cmake 工具,可以参考这里进行安装:https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04
编译过程
- 进入解压后的源码包 cd libwebsockets-master
- 创建 build 目录。mkdir build
- 编辑交叉编译 cmake 文件。vim ../cross-arm-linux-gnueabihf.cmake
- 修改文件中的路径变量,指向 MCSDK对应位置。 CROSS_PATH, CMAKE_FIND_ROOT_PATH, CMAKE_INSTALL_PREFIX
- source MCSDK 开发环境。source /home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/environment-setup
- 执行 cmake。cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake -DLWS_WITHOUT_EXTENSIONS=1 -DLWS_WITH_SSL=0
- 编译并提取生成的文件。make && make install 。生成的文件提取到 websockets-lib 目录。
上述修改 cmake 文件中的三个变量的参考:
set(CROSS_PATH /home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/sysroots/i686-arago-linux/usr )
set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}" "/home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/sysroots/armv5te-3.3-oe-linux-gnueabi")
set(CMAKE_INSTALL_PREFIX "/home/jack/project/sinoyue-138/mosquitto/libwebsockets-master/build/websockets-lib/")
交叉编译 mosquitto
准备工作
官网下载源码包:http://mosquitto.org/download/
编译过程
- 解压并进入源码包。 cd mosquitto-1.4.14
- 编辑 config.mk 配置前面交叉编译出来的 libwebsocket 的头文件和库的路径。
- source MCSDK 开发环境。source /home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/environment-setup
- 编译。make WITH_SRV=no WITH_WEBSOCKETS=yes WITH_TLS=no CROSS_COMPILE=arm-arago-linux-gnueabi- CC=gcc CXX=g++ AR=ar
- 提取生成的文件。mkdir build && make install DESTDIR=/home/jack/project/sinoyue-138/mosquitto/mosquitto-1.4.14/build
上述修改 config.mk 的示例如下:
ifeq ($(WITH_WEBSOCKETS),yes)
BROKER_CFLAGS:=$(BROKER_CFLAGS) -DWITH_WEBSOCKETS -I/home/jack/project/sinoyue-/mosquitto/libwebsockets-master/build/include
BROKER_LIBS:=$(BROKER_LIBS) -lwebsockets -L/home/jack/project/sinoyue-/mosquitto/libwebsockets-master/build/lib
endif
安装到 138 文件系统
安装 libwebsocket
- 把生成的 websockets-lib 传输到 138 文件系统。
- 安装。cp -r websockets-lib /usr
- sync
安装 mosquitto
- 把生成 build 文件夹传输到 138 文件系统。
- 安装配置文件。cp -r ./build/etc /
- 安装头文件和库文件等。 cp -r ./build/usr/local /usr
- sync
简单试验
在三个不同终端中依次执行以下操作:
- 启动 broker。mosquitto
- 订阅。mosquitto_sub -t 'test/topic' -v
- 发布。mosquitto_pub -t 'test/topic' -m 'hello world'
发布之后即可看到订阅的终端收到发布的消息。
至此,大功告成!
廖杰良 - 2017-12-26
移植 MQTT broker mosquitto 到 omapl138的更多相关文章
- arm linux 移植 MQTT (paho、mosquitto)
前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...
- Python:Mac 下 MQTT 服务器 Mosquitto 的配置
我在Mac电脑上搭建时遇到了一些不同于网上大部分情况的问题,特此分享给可能也有遇到相同情况又找不到解决方法的人. 我的电脑系统:macOS Mojave 10.14.3. paho-mqtt 的安装 ...
- MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
在mqtt的官方网站,有许多mqtt,其中:MosquittoAn Open Source MQTT server with C, C++, Python and Javascript clients ...
- MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动
在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...
- EMQ (Erlang/Enterprise/Elastic MQTT Broker)
EMQ (Erlang/Enterprise/Elastic MQTT Broker) https://www.cnblogs.com/SteveLee/p/9843215.html MQ介绍 EMQ ...
- MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解
前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...
- MQTT消息中间件Mosquitto的安装和配置
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 【002:ESP8266 移植 Mqtt 】
系统环境: ubuntu 16.04 64bitSDK版本: esp_iot_sdk_v1.3.0记录时间: 2016年10月13日联系方式: yexiaopeng1992@126.com 背景:在E ...
- MQTT之 Mosquitto hello world的使用
服务端发布消息模式,客户端订阅: 终端一中启动 moquitto 服务器 shallbeThatIshallbe:mosquitto iamthat$ 1427293344: Opening ipv4 ...
随机推荐
- 【1】maven来管理我的SSM项目
新建个maven项目,第一步当然是配置好自己需要的jar包,maven使用pom.xml管理 并不是每一个都有用,但是都是常见jar,方便以后自己调用来查找 <project xmlns=&qu ...
- [转载] HBase vs Cassandra:我们迁移系统的原因
转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...
- EasyNVR-流媒体服务详解
1.什么是流媒体 所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式. 流媒体又叫流式媒体,它是指商家用一个视频传送服务器把节目当成数据包发出,传送到网络上. 2.Eas ...
- Android 使用GangSDK创建第三方家族公会系统经验分享
由于需要对之前的游戏加入一个家族系统,想到这块儿可能会有大量的工作需要自己做,就偷了个懒去网上搜罗了一波,有没有类似现成的系统?结果让我惊奇的发现,目前市面上居然真的有类似的服务,虽然是小公司开发的, ...
- 移动端自适应rem 布局篇
相信很多刚开始写移动端页面的同学都要面对页面自适应的问题,当然解决方案很多,比如:百分比布局,弹性布局flex(什么是flex),也都能获得不错的效果,这里主要介绍的是本人在实践中用的最顺手最简单的布 ...
- LKD: Chapter 5 System Call
在Linux中,处理器所作的事可以归纳为3种情况: 1.In user-space, executing user code in a process; 2.In kernel-space, in p ...
- [动态规划]P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- android 开源收藏
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
- JavaScript提高篇之面向对象之单利模式工厂模型构造函数原型链模式
1.单例模式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- C/C++中如何接收return返回来的数组元素
我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值,像一个int, double,char等类型的数据,当然也可以是他们的指针.但是当我们遇到要返回很多数怎么 ...