1.下载源码:
cd ~
git clone https://gitee.com/changser/libmodbus
2.设置编译环境:
打开“~/.bashrc"文件,在最后行添加,以便导入编译器常用的环境变量
export KERNELDIR=/home/dengxm2024/linuxProgDir/linuxkerneldir/linux-2.6.35.3
export CROSS_COMPILE=arm-fsl-linux-gnueabi-
export ARCH=arm
export PATH=/opt/arm-fsl-linux-gnueabi/bin:$PATH
export LD_LIBRARY_PATH=/opt/arm-fsl-linux-gnueabi/lib:$LD_LIBRARY_PATH
export CC=arm-fsl-linux-gnueabi-gcc
export CXX=arm-fsl-linux-gnueabi-g++
export AR=arm-fsl-linux-gnueabi-ar
export RANLIB=arm-fsl-linux-gnueabi-ranlib
export NM=arm-fsl-linux-gnueabi-nm
export LD=arm-fsl-linux-gnueabi-ld
export STRIP=arm-fsl-linux-gnueabi-strip
2.编译源码:
进入源码文件夹:
cd libmodbus
运行automake autoconfgure脚本来生成Makefile文件:
./configure --host=arm-fsl-linux-gnueabi --enable-static --prefix=/home/dengxm2024/libmodbus_install/
--host=arm-fsl-linux-gnueabi 指定交叉编译器的前缀
--enable-static 静态编译
prefix=/home/dengxm2024/libmodbus_install/ 指定库编译完成后的编译结果存放的路径
运行CMAKE编译命令:
make
安装生成的库:
make install
做完上述步骤可以看见在"~/libmodbus_install"生成了头文件及库文件
dengxm2024@PC-202105142413:~/libmodbus_install$ ls
include lib share
3.使用上面输出的库
新建文件/home/dengxm2024/linuxProgDir/imx280astudy/userside_code/libmodbustest/version.c
/*
* Copyright © 2008-2014 Stéphane Raimbault <stephane.raimbault@gmail.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdio.h>
#include <modbus/modbus-version.h>
#include <modbus/modbus.h>
int main(void)
{
printf("Compiled with libmodbus version %s (%06X)\n", LIBMODBUS_VERSION_STRING, LIBMODBUS_VERSION_HEX);
printf("Linked with libmodbus version %d.%d.%d\n",
LIBMODBUS_VERSION_MAJOR, LIBMODBUS_VERSION_MINOR, LIBMODBUS_VERSION_MICRO);
if (LIBMODBUS_VERSION_CHECK(2, 1, 0)) {
printf("The functions to read/write float values are available (2.1.0).\n");
}
if (LIBMODBUS_VERSION_CHECK(2, 1, 1)) {
printf("Oh gosh, brand new API (2.1.1)!\n");
}
return 0;
}
.新建/home/dengxm2024/linuxProgDir/imx280astudy/userside_code/libmodbustest/Makefile
# 定义libmodbus库头文件的路径
HEADERS_DIR := /home/dengxm2024/linuxProgDir/imx280astudy/userside_code/libmodbustest/libmodbus_install/include
# 添加头文件路径到编译器的搜索路径中
CFLAGS += -I$(HEADERS_DIR)
EXEC = ./version
OBJS = version.o
SRC = version.c
# 指定编译器前缀
CC = $(CROSS_COMPILE)gcc
LDFLAGS +=
all:$(EXEC)
$(EXEC):$(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) -pthread
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@ -pthread
clean:
@rm -vf $(EXEC) *.o *~
把库文件夹~/libmodbus_install复制到项目文件夹
cp -r ~/libmodbus_install/ ~/linuxProgDir/imx280astudy/userside_code/libmodbustest
项目结构如下:
在终端窗口的项目文件夹中执行make
编译成功,生成version可执行文件。
4.测试运行
将执行文件复制到开发板当中测试运行。
复制version到web服务器
cp version /mnt/d/imx280a_exe_folder/
打开开发板终端窗口,从web服务器获取version文件
wget http://192.168.0.233:443/imx280a_exe_folder/version
给version添加可执行属性
chmod +x version
执行version查看结果
./version
root@EasyARM-iMX28x ~# ./version
Compiled with libmodbus version 3.1.4 (030104)
Linked with libmodbus version 3.1.4
The functions to read/write float values are available (2.1.0).
Oh gosh, brand new API (2.1.1)!
至此,使用libmodbus库进行开发的初步步骤就完成了。