Linux arm  libmodbus 交叉编译

Linux arm libmodbus 交叉编译

下载地址:https://libmodbus.org/download/

一、交叉编译 libmodbus
为了使 ARM 工控板能使用 libmodbus 相关的功能,所以交叉编译 libmodbus。
目标:交叉编译工具编译 libmodbus 库,并将库及测试文件拷贝到工控板中进行测试。

将 libmodbus-3.1.7.tar.gz 压缩包上传到 ubuntu 系统的 libmodbus 目录下,解压。

在源码目录配置编译:
./configure --build=i686 --host=arm-linux-gnueabihf --enable-static --prefix=/home/jiang/code/libmodbus/target_arm

make && make install

target_arm 目录下生成的 include lib 即为 libmodbus 的头文件、库文件。

另:如要在 x86 下的 ubuntu 系统上使用 libmodbus 库,需要在 x86 下编译 libmodbus 如下:
./configure --enable-static --prefix=/home/jiang/code/libmodbus/target_x86
make && make install

gcc random-test-client.c -o random-test-client -I/home/jiang/code/libmodbus/target_x86/include/modbus -L/home/jiang/code/libmodbus/target_x86/lib -lmodbus

注意用gcc编译生成x86程序。

 

二、测试

1、libmodbus-3.1.7 目录下的 tests 目录即为测试例程。
测试程序生产的可执行目录如下:

也可以单独编译测试例程,交叉编译测试文件如 random-test-client:

random-test-client.c文件中指定pc机的ip地址、端口。

/* TCP */
ctx = modbus_new_tcp("192.168.2.4", 1502);
modbus_set_debug(ctx, TRUE);

if (modbus_connect(ctx) == -1) {
    fprintf(stderr, "Connection failed: %s\n",
            modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}

 

arm-linux-gnueabihf-gcc random-test-client.c -o random-test-client -I/home/jiang/code/libmodbus/target_arm/include/modbus -L/home/jiang/code/libmodbus/target_arm/lib -lmodbus

将 target_arm/lib 目录下的库文件(注意无法直接复制,需要先打包)拷到工控机下的/usr/lib/目录,random-test-client拷到工控
机的任意目录并执行。同理 target_x86/lib目录下的库文件(注意无法直接复制,需要先打包)拷到ubuntu下主机/usr/lib/目录(sudo mv lib.tar.gz /usr/lib)、解压缩(tar -zxvf lib.tar.gz)。

# 授权 执行权限
chmod 777 random-test-client
# 启动
./random-test-client

2、pc机 Modbus Slave设置:

3、工控机与pc机正常通讯:

4、ubuntu与pc机正常通讯(注意x86程序):

发表回复

您的电子邮箱地址不会被公开。