(一)背景

项目需要采集RTU设备(工业仪表)的数据,其中涉及Modbus协议及数据转换,因为之前没接触过这块内容,所以准备在Linux环境下移植第三方库 -- libmodbus到开发板,以节省开发时间成本。

(二)调试工具

Modbus Poll、Modbus Slave、Configure Virtual Serial Port Driver(虚拟串口工具)。

使用说明参见:https://blog.csdn.net/echoszf/article/details/77702599

(三)移植步骤

主要说明ARM开发板移植部分,这部分自己遇到的问题比较多,虚拟机中Linux移植部分参考比较多,自己主要参考了以下文档:https://blog.csdn.net/u010168781/article/details/73924748          https://blog.csdn.net/zgkxzx/article/details/78231171

1、在移植libmodbus到ARM开发板过程中,copy(编译好的、且适用于ARM平台的)动态库(lib*.so*)到/usr/lib目录时,执行cp libmodbus.so* /usr/lib(常用的动态链接库,存放在该目录下)会出现无法创建的问题(cannot create ‘/usr/lib/libmodbus.so*’: Read-only file system)。

解决方法:执行 wr cp libmodbus* /usr/lib  (wr的作用不是太了解?只是在一个技术群里面看到的)

2、在使用libmodbus库时,只需要libmodbus.so、libmodbus.so.5、libmodbus.so.5.0.5这3个动态库文件,故只copy上述3个文件至ARM开发板的/usr/lib目录即可。

3、编译应用程序:

(1)在虚拟机共享文件夹share下编辑应用程序modbus-rtu-test.c,在虚拟机Linux终端/mnt/hgfs/share目录copy至/home/liuxu/libmodbus/libmodbus-3.0.6/tests/目录;

注:个人没有使用Samba服务器;libmodbus库下载、交叉编译、测试见上面链接。

(2)交叉编译,终端执行arm-fsl-linux-gnueabi-gcc -o modbus-rtu-test modbus-rtu-test.c -L ../../install/lib/ -lmodbus -I ../../install/include/modbus/ 即可生成(ARM)可执行文件modbus-tcp-test(其中,在libmodbus目录下有install和libmodbus-3.0.6两个目录)

注:可能出现arm-fsl-linux-gnueabi-gcc命令未找到的的问题,原因是安装交叉编译器时,环境变量设置的问题。

解决方案:(临时设置)添加工具链路径,虚拟机Linux终端下执行export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/。                                        验证方法:终端执行echo $PATH, 查看PATH的值,如若看到/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/ 即可解决交叉编译命令找不到的问题。更多见文档《ZLG开发指南》,我这里使用的是一款ZLG的开发板)

(3)copy可执行文件至 /nfsroot 目录,再至ARM开发板 /mnt 目录,执行 ./modbus-tcp-test 即可运行应用程序。借助调试助手Modbus Slave测试结果如下图

(四)测试程序

/*************************
**
** modbus-rtu-test.c
** 移植libmodbus库到ZLG开发板,并测试成功
**
**************************/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h> //modbus动态库文件#include "unit-test.h"int main(int argc, char *argv[])
{uint16_t tab_reg[64] = {0}; //定义存放数据的数组modbus_t *ctx = NULL;int rc;int i;//以串口的方式创建libmobus实例,并设置参数ctx = modbus_new_rtu("/dev/ttySP1", 115200, 'N', 8, 1);                  if (ctx == NULL)                //使用UART1,对应的设备描述符为ttySP1{fprintf(stderr, "Unable to allocate libmodbus contex\n");return -1;}modbus_set_debug(ctx, 1);      //设置1可看到调试信息modbus_set_slave(ctx, 1);      //设置slave IDif (modbus_connect(ctx) == -1) //等待连接设备{fprintf(stderr, "Connection failed:%s\n", modbus_strerror(errno));return -1;}while (1){printf("\n----------------\n");rc = modbus_read_registers(ctx, 0, 10, tab_reg);if (rc == -1)                      //读取保持寄存器的值,可读取多个连续输入保持寄存器{fprintf(stderr,"%s\n", modbus_strerror(errno));return -1;}for (i=0; i<10; i++){printf("reg[%d] = %d(0x%x)\n", i, tab_reg[i], tab_reg[i]);}usleep(3000000);}modbus_close(ctx);  //关闭modbus连接modbus_free(ctx);   //释放modbus资源,使用完libmodbus需要释放掉return 0;
}

移植libmodbus到ARM开发板总结相关推荐

  1. 编译ARM平台的 QtEmbedded 的MySQL插件和移植MySQL到ARM开发板

    经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了mini2410的开发板上. 编译器:arm-linux-gcc(4.3.2) Pc平台: ...

  2. 如何移植valgrind到arm开发板

    一些链接 valgrind官网:Valgrind Home valgrind安装包下载地址:Index of /pub/valgrind 简介 Valgrind是一个用于构建动态分析工具的仪器框架.V ...

  3. mplayer linux arm,【嵌入式】交叉编译移植 Mplayer 到 ARM开发板

    一.基本信息 1.移植环境 ①:ubuntu16.04 ②:iMX6Q开发板 2.移植所需软件源码 ①:libmad libmad 下载 ②:mplayer mplayer下载 ③:百度网盘下载: 链 ...

  4. java arm_移植java到arm开发板

    1. 在主机linux上安装Oracle Java SE Embedded 下载Oracle Java SE Embedded软件包 本次使用ejdk-8u211-linux-armv6-vfp-hf ...

  5. 移植安装ModBus到ARM开发板

    1.libmodbus官网 2.下载 二.交叉编译 1.解压 2.创建安装目录 3.进入解压的目录 4.配置编译选项 5.编译 6.安装 7.生成动态链接库 三.移植到ARM开发板 1.复制文件到AR ...

  6. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  7. linux adb arm移植,移植ubuntu core到Arm开发板

    origin: http://blog.csdn.net/kickxxx/article/details/15341079 最初是想把整个ubuntu移植到MX51开发板,因为项目不需要运行桌面系统, ...

  8. 将linux内核烧进arm板,ARM开发板上uClinux内核移植

    <ARM开发板上uClinux内核移植>由会员分享,可在线阅读,更多相关<ARM开发板上uClinux内核移植(19页珍藏版)>请在人人文库网上搜索. 1.纷傲掌秀悸篷益哑檀扬 ...

  9. Openssl移植到ARM开发板

    Openssl移植到ARM开发板 openssl源码下载 源码编译配置 使用生成的库文件 openssl源码下载 openssl源码可以在官网下载:https://www.openssl.org/so ...

  10. arm开发板移植ALSA库与ALSA工具

    目录 首先我们需要下载两个所要用到的库文件(基于Ubuntu) 一:先配置ALSA库文件 1.先解压放到家目录下ALSA的源文件: 2.解压后进去解压得到的文件夹执行以下命令: 3.配置好以后执行 二 ...

最新文章

  1. ITK:使用Deformation Field扭曲图像
  2. P3195 [HNOI2008]玩具装箱TOY
  3. 异常体系----java
  4. 线性查找法java代码_Java线性查找和二分查找
  5. php html页面获取session,怎么在html中获取session变量
  6. 快速排序——主要思想是分治
  7. Atitit  发帖机实现(1)-----UsrQBm2008 页面上下文规范
  8. 计算机网络的创新创业计划书,互联网创新创业计划书.doc
  9. C#、ASP.NET 将PDF转换成Swf
  10. 都有哪些较好用的项目管理软件?
  11. 洛谷P4707 重返现世 kMAX-MIN反演+DP
  12. DeepinXP Lite 完美精简版 |5.2|5.3|5.4|5.5|5.6|5.7|5.8|5.9|5.10||6.1New| 迅雷下载
  13. 机器学习十大经典算法入门
  14. 手机回收ATM面世,无人回收会成为下一个风口吗?
  15. Spring源码剖析 循环注入
  16. Leetcode分类练习-查找(2)对撞指针
  17. 【PCIE】PCIE TLP包解析
  18. mysql的粒度_mysql锁粒度是什么
  19. mysql acid
  20. FREERTOS必备知识-喂狗-死机

热门文章

  1. java下载天地图数据,天地图离线地图,可指定经纬度范围
  2. mantelhean.test r语言_Meta分析常用教程:R语言
  3. 基于SECS协议开发的简明教程(1)
  4. wifi-sdio接口
  5. 2021年全国水体分布(按省、市、县)矢量数据的制作与分享
  6. javplayer 使用教程_SAI教程SAI绘画软件下载SAI2上色教程
  7. 如何用微信建立打卡小程序(做打卡签到小程序方法)
  8. 大雁塔尺寸_西安容易被误解的两座建筑 不是只有大小之分 游客来了才知道原因...
  9. java 文件上传到服务器_Java上传文件到服务器端的方法
  10. c语言读取文件指定行和列