写在前面:

我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看。

此外目前我在gitHub上准备一些李航的《统计学习方法》的实现算法,目标将书内算法全部手打实现,欢迎参观并打星。GitHib传送门

正文

因为项目需要从机接收MQTT广播,网上有关2440的MQTT移植文章非常少,懵逼死我了,所以移植成功以后先把它写出来,给有需要的人看。我当时是参考了下面几篇文章,但是都不能顺利完成,几篇文章写得很好,需要相互借鉴。

http://blog.sina.com.cn/s/blog_951adad70101tnyg.html
http://zhuzhouhong8.blog.163.com/blog/static/17480522016116454950/
http://blog.csdn.net/xukai871105/article/details/39252653
http://www.amobbs.com/thread-5643406-1-1.html

虽然最后移植成功了,但是感觉方法有点死,如果照着上面几篇的步骤都不能完成,没有办法了,可以照着我的步骤来。

备注:如果虚拟机之前安装了openssl,建议先将其卸载,再来照着我的步骤安装,其中涉及到库的路径设置,如果自己能把握,可以不用卸载。

1.准备两个虚拟机,没有安装openssl的,只要将虚拟机的文件复制一份就有两个虚拟机了。
环境:
虚拟机:ubuntu9.10
交叉编译器:4.4.3

2.在其中一个虚拟机中交叉编译openssl。
因为MQTT需要用到openssl库,所以编译MQTT前要先编译openssl。
可以百度openssl-0.9.8e.tar.gz,随便找一个就可以,最好和我的版本相同,防止版本导致的问题。
我将其放在了/home/MQTT路径。

tar zxvf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./config no-asm shared --prefix=/home/MQTT/openssl

prefix后面的是生成的库的路径,可以随便找个地方建个文件放着,这个库在之后是有用的。
修改Makefile CC=arm-none-linux-gnueabi-gcc

make
make install

openssl的动态链接库就建立完成了。

3.交叉编译MQTT
a. 下载源码
http://www.eclipse.org/paho/
点击DownloadNow,选择Client下的C源码(注意,是C client for Windows/Unix/Mac)。点击GitHub链接,找到左边的Branch,选择develop,选中之后再次点击Branch,选择Tags,选择v1.0.3。我试过V1.1.0,通过我的方法编译不了,可能做了些修改。选择完以后点击右边的Clone or download,选择download zip就可以了。
b. 我将其放在了/home/MQTT路径下,tar,进入文件夹。进入Makefile在最开头的.PHONY:的下面加两句话

INCLUDES = -I/home/MQTT/openssl/include
LIBSDIR  = -L/home/MQTT/openssl/lib

这是把刚才编译的openssl的库路径加进去,后面的路径就是你库存放的位置。我是放在/home/MQTT/openssl这个位置的。

添加方式像这样

.PHONY: clean, mkdir, install, uninstall, htmlINCLUDES = -I/home/MQTT/openssl/include
LIBSDIR  = -L/home/MQTT/openssl/libifndef release.version

然后到文件的第181行,在${CC} 后面加上$(INCLUDES),在最后加上$(LIBSDIR),生成的时候需要库,要把库的路径添加进去。

${CC} $(INCLUDES) -g -o $@ $< -l${MQTTLIB_CS} ${FLAGS_EXES} $(LIBSDIR)

在第187行,203行,215行做同样处理。最好和我用一样的版本,一个是这个位置不对,另一个是我之前用的1.10版本的,这样子做没有效果。

c.编译

make CC=arm-linux-gcc

编译成功。我之前在这里遇到很多问题
例如:collect2: ld returned 1 exit status ar
解决方法:具体原因不清楚,只能重新和我的做法比对,一定有没做对的地方。
例如:找不到ssl。
解决方法:我是编译openssl的交叉编译器和编译MQTT的交叉编译器不是一个版本,导致的找不到ssl。
我在这里卡了很久,大部分问题都是编译器或MQTT的版本的问题导致的。

d.将文件移入开发板。
把build/output目录下的所有动态库文件移入开发板的lib目录下,把sample文件夹整个例如开发板,位置随意。test目录不用管。我把sample文件夹就放在了根文件的顶层目录。
./sample/subasync
执行自带的测试文件,如果提示没有权限,就把这个文件移到文件夹外执行,也就是直接单独放在顶层目录。
./subasync
1)如果提示no found之类的,在Ubuntu下找到交叉编译器的位置
/work/tools/opt/FriendlyARM/toolschain/4.4.3/lib
这是我的位置,把lib目录下所有的东西都复制到开发板lib目录下。如果是别的交叉编译器,可能在lib的同层有libc目录,这个目录下的也都拷贝过去。
./subasync
2)还有个提示记不得了,字母I开头的,两个单词,那个是你的内核或者根文件交叉编译用的编译器和现在的版本差别太大。我直接改用了友善之臂提供的内核和根文件,错误就消失了。
3)如果运行以后什么输出也没有,过了很久提示连接失败,是主机IP没有设置好,以subasync.c为例,修改

#define ADDRESS     "tcp://localhost:1883"为    #define ADDRESS      "tcp://192.168.1.110:1883"

192.168.1.110为mosquitto服务端IP地址。
重新交叉编译就可以了。

在PC机没有开启服务前,如果一切正常的话,运行./subasync以后很快就输出连接失败。
如果服务器已经开启,会输出几行,内容忘记了,只记得最后一句是按q退出。

4.PC安装MQTT
这需要在另一台虚拟机上安装了,因为我试过在第一台虚拟机上直接安装MQTT服务,还是会提示找不到ssl,虽然之前已经安装过了,但是因为库路径等各种原因,导致不行,如果要强行装上,那如果开发板的MQTT需要重新修改什么的,就没法交叉编译了,最方便的方法就是再开一台清白的虚拟机。

运行命令
wget http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz
解压

tar zxfv mosquitto-1.4.5.tar.gz
# 进入目录
cd mosquitto-1.4.5
# 编译
make
# 安装
sudo make install

如果提示找不到openssl/ssl.h,就安装openssl

sudo apt-get install libssl-dev

如果遇到其他问题,先看最前面的几篇文章,里面有讲一些。

一套MQTT需要一个代理,一个服务器,一个客户端
代理和服务器可以由一台Ubuntu代替,打开两个控制台就行了,客户端是开发板。

打开控制台,启动代理服务

mosquitto -v

再打开一个控制台,发布内容

mosquitto_pub -t sensor  -m haha【sensor  】主题【haha】指定消息内容

sensor和haha可以自己代替掉,但是sensor 必须和开发板订阅的主题是相同的,否则开发板接收不到。如果没有对subasync.c文件做其他修改,默认的主题是"MQTT Examples",可以自己在c文件里修改主题。
回车以后就可以在开发板上看到广播了。

s3c2440移植MQTT相关推荐

  1. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    文章目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 移植Linux3.4.2内核其他文章链接: S3C2440移植linux3.4.2内核之内核框架介绍及简单修改 S3C ...

  2. 【嵌入式Linux应用】初步移植MQTT到Ubuntu和Linux开发板

    1. 概述 ​ 本篇主要是记录将MQTT移植安装到百问网STM32MP157开发板上,并且是跑一下MQTT的一个例程来验证,要完成本次移植安装,必须要保证电脑和开发板都能上网.. 2. 软件平台 ​ ...

  3. OpenHarmony轻量系统开发【11】移植MQTT

    摘要:本文简单介绍如何移植MQTT 适合群体:适用于润和Hi3861开发板 文中所有代码仓库:https://gitee.com/qidiyun/hihope-3861-smart-home-kit ...

  4. S3C2440移植uboot之编译烧写uboot

    文章目录 移植环境 获取uboot 更新交叉编译工具 配置环境变量 移植Uboot其他文章链接: S3C2440移植uboot之新建单板_时钟_SDRAM_串口 S3C2440移植uboot之启动过程 ...

  5. S3C2440移植uboot之新建单板_时钟_SDRAM_串口

    上一节S3C2440移植uboot之启动过程概述我们我们分析了uboot启动流程,这节将开始新建一块单板支持S3C2440. 文章目录 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: 1 ...

  6. 嵌入式开发之移植MQTT到RK3568

    目录 前言 一.下载qmqtt源码 二.编译库文件 三.移植到RK3568 3.1 移植动态库libQt5Qmqtt 四.联机测试 4.1 制作demo 4.1.1 创建demo新项目 4.1.2 添 ...

  7. S3C2440移植Linux4.19.275内核以及过程中遇到的问题

    目录 1 问题一:内核移植时MTD分区问题 2 问题二:uboot的MTDPARTS_DEFAULT定义的MTD分区,bootargs中的文件系统分区,内核的mtd_partition smdk_de ...

  8. 几步实现stm32上面移植mqtt

    最近项目需要,stm32上面使用到mqtt了,百度了下,发现网上资料还是挺少的,虽然有几份相关的资料,下载下来之后,看到了mqtt的底层代码竟然还有错误,这个问题导致了我后面一直调试不通,后来,我直接 ...

  9. s3c2440移植Linux内核,移植Linux-3.4.2内核到S3C2440

    一.BootLoader引导内核过程 1.Bootloader的工作 1.1.将内核读入内存 1.2.保存内核启动参数到指定位置,内核启动时去这个位置解析参数 1.3.启动内核.传入机器ID 二.内核 ...

最新文章

  1. 路由器snmp配置_基于keepalived配置数据库主从实现高可用
  2. ubuntu16.04 下安装Opencv2.4.9
  3. 爬一爬那些年你硬盘存过的“老师”
  4. git branch 为什么会进入编辑状态_Git很难,搞砸很容易,好在有神奇命令让时光倒流...
  5. 职场上个人的核心技术_在职场上,一定要让自身强大起来!
  6. 多项式除法,多项式取模
  7. 开放下载!基于PAI个性化推荐系统开发指南
  8. 黑马程序员——GUI篇
  9. 联邦学习产品及算法运行机制简介
  10. 拆除指令怎么设置_张店区设置不合理隔离桩 将陆续拆除
  11. Windows2008+MyEclipse10+Android开发环境搭配
  12. Miller-rabin判素数
  13. docker 镜像源_前端 Docker 镜像体积优化
  14. java url编码和js的url编码_Java URLEncoder与URLDecoder编码解码使用示例
  15. Java项目:SSM会议室预约系统
  16. 外企重修课:商人高通、任性微软、老姜IBM
  17. Unity -- 正交/透视相机切换(2D/3D相机切换)
  18. 借WS2812 PWM DMA驱动调试浅谈STM32调试思路
  19. BI技巧丨近两年及当年月份数据汇总
  20. Soft Filter Pruning (SFP)——允许更新Pruned Filters的Channel Pruning策略

热门文章

  1. UVa1422 - Processor(二分法)
  2. H3C LMI协议标准
  3. laravel--基础知识
  4. RabbitMQ基本概念(一)-RabbitMQ的优劣势及产生背景
  5. 2018年安卓绿色联盟数据报告
  6. 【原创】大叔案例分享(3)用户行为分析--见证scala的强大
  7. Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法
  8. Python学习之==json处理
  9. 做图与树做到吐的一天
  10. 我的学习之路_第二十三章_HTML