添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
坏坏的山羊  ·  python 自动刷新tableau - ...·  2 月前    · 
星星上的墨镜  ·  第八届金陀螺奖 | ...·  3 月前    · 
激动的盒饭  ·  html js 读取txt ...·  5 月前    · 
爱吹牛的台灯  ·  JSR223/Jython ...·  6 月前    · 

直接开始正题,mqtt broker适合部署在嵌入式设备的非mosquitto莫属,网上关于arm的交叉编译教程很多,关于riscv的没有,进行了摸索尝试,做了如下记录。

一、源码获取
Download | Eclipse Mosquitto https://mosquitto.org/download/即可下载到。
目前最新版本 mosquitto-2.0.15.tar.gz

下载到本地后 tar zxvf mosquitto-2.0.15.tar.gz 解压。

mosquitto编译依赖cJSON和openssl,所以也需要对这两个第三库进行交叉编译。

cJSON (1.7.x)

  • License: MIT
  • Project: GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

    openssl (1.1.1)

  • License: OpenSSL License and SSLeay License
  • Project: https://openssl.org
  • Source: GitHub - openssl/openssl: TLS/SSL and crypto library

    当前最新版本openssl-1.1.1u,有时候github拉取速度较慢,直接下载压缩包 https://www.openssl.org/source/openssl-1.1.1u.tar.gz

    二、交叉编译

  • 1.cJSON交叉编译
  • 修改CMakeLists.txt
    在下面版本后添加编译参数

    set(CJSON_VERSION_SO 1)
    set(CJSON_UTILS_VERSION_SO 1)
    
    set(CMAKE_C_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mabi=lp64d -mtune=c906")
    set(CMAKE_CXX_FLAGS "-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mabi=lp64d -mtune=c906")
    

    下面的option 里面建议把动态静态库的选项都设为ON

    source 交叉编译工具环境,以输入riscv按TAB可以看到工具链为设置ok

    然后在目录下执行
    mkdir build

    cd build

    cmake .. -DENABLE_CJSON_UTILS=On -DENABLE_CJSON_TEST=Off -DBUILD_SHARED_AND_STATIC_LIBS=On -DCMAKE_INSTALL_PREFIX=$(pwd)/install_cv1800b

    make install

    即完成cJSON交叉编译

  • 2.openssl交叉编译
  • 进入到openssl目录
    cd openssl-1.1.1u

    source 交叉编译工具环境,以输入riscv按TAB可以看到工具链为设置ok

    mkidr build
    cd build
    

    生成Makefile文件
    ../Configure linux64-riscv64 shared no-asm --prefix=$(pwd)/install_cv1800b CROSS_COMPILE=riscv64-unknown-linux-musl-

    修改Makefile
    94~95行修改如下后保存

    CFLAGS=-Wall -O3 -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d
    CXXFLAGS=-Wall -O3 -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d
    

    make install

    即完成openssl的交叉编译

  • 3.mosquitto交叉编译
  • 进入源码目录
    cd mosquitto-2.0.15

    source 交叉编译工具环境,以输入riscv按TAB可以看到工具链为设置ok

    mkidr build
    cd build
    

    修改CMakeLists.txt
    在下面语句前添加编译参数
    project(mosquitto)

    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR riscv64)
    set(CMAKE_CROSSCOMPILING TRUE)
    set(CMAKE_C_COMPILER "riscv64-unknown-linux-musl-gcc")
    set(CMAKE_CXX_COMPILER "riscv64-unknown-linux-musl-g++")
    

    在下面语句后添加编译参数
    include(GNUInstallDirs)

    set(CMAKE_FIND_ROOT_PATH "/home/yxm/milk-v/CV180x/opensrc/openssl-1.1.1u/build/install_cv1800b" "/home/yxm/milk-v/CV180x/opensrc/cJSON/build/install_cv1800b")
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d")
    

    特别注意:
    set(CMAKE_FIND_ROOT_PATH "/home/yxm/milk-v/CV180x/opensrc/openssl-1.1.1u/build/install_cv1800b" "/home/yxm/milk-v/CV180x/opensrc/cJSON/build/install_cv1800b")中的路径需要更改为你本机实际交叉编译后的cJSON、openssl的路径

    后面编译手册请改成OFF,不编译
    option(DOCUMENTATION "Build documentation?" OFF)

    相关功能请在option中选择ON 或者 OFF,裁剪

    添加修改完内容保存

    生成编译文件
    cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)/cv1800b

    执行编译&安装

    make install

    即完成mosquitto编译
    image1177×722 163 KB image674×669 48.7 KB

    三、duo板运行

    需要将cJSON、openssl、mosquitto交叉编译生成安装目录下的
    lib 全部拷贝至开发板/usr/lib
    image548×726 34.3 KB image646×723 16.9 KB

    bin 全部拷贝至开发板/usr/bin
    image599×570 22.6 KB etc/mosquitto/下的配置文件需要拷贝至/etc/mosquitto/

    配置文件拷贝。

    完成上面步骤后
    mosquitto -c /etc/mosquitto/mosquitto.conf -v即可启动,-d可后台运行,便于观察前台运行。
    image858×107 5.25 KB

    利用ssh再次开一个shell
    输入mosquitto_sub -h localhost -p 1883 -t "demo/1"订阅demo/1主题,该shell会被阻塞,等待消息发布。消息到来后输出消息内容。

    利用ssh再次开一个shell
    mosquitto_pub -h localhost -p 1883 -t "demo/1" -m "test"
    mosquitto_pub -h localhost -p 1883 -t "demo/1" -m "hhhhhhh"
    即可往topic下发布消息。

    回到上一个订阅的shell
    可以看到收到的消息了。

    当然,服务端可以看到相关信息,连接、订阅、发布等
    image1099×695 71 KB

    实际除了上面用到的两个工具,还提供了用户创建,控制等工具

    /etc/mosquitto/mosquitto.conf 为服务器的mqtt配置文件,请参考官网和百度按需配置自己的mqtt服务器吧。

    当然也可以基于上面编译的mosquitto库开发自己的客户端程序。

    更多的mosquitto使用和服务器的配置文件配置请自行查阅官方文档或者搜索引擎搜索

    四、软件包获取
    为了方便懒人,已经对软件包、动态库等进行了上传github,可以直接将软件包拷贝至duo上,然后tar zxvf xxx.tar.gz 解压后执行里面的install.sh自动完成安装。

    github地址)