一個modbus協議庫移植——libmodbus-master
modbus協議是工業上常用的資料傳輸協議,在linux系統上,大家一般自己編寫或者找別人的程式碼複用,程式碼質量無法保障,除錯起來也比較費勁,最近發現github上有個非常好的modbus協議類庫,經過測試發現很好用,支援串列埠和ip兩種方式,下面記錄下來往arm版移植(其實類庫移植大同小異)的過程供大家參考,希望給大家節省一點時間。
1、程式碼下載
去github下載原始碼:https://github.com/stephane/libmodbus
程式碼解壓並且拷貝到交叉編譯使用者的目錄下
2、編譯
首先執行./autogen.sh
生成 configure
指令碼;
然後執行./configure --help
從幫助資訊可以看到如何設定編譯生成目錄和交叉編譯項設定。
mkdir
limodbus-release ---生成編譯生成檔案存放目錄
./configure --host=交叉編譯字首 --prefix=編譯生成檔案放置目錄
我自己的開發環境相關引數是:
./configure --host=arm-linux --prefix=/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release
配置最後提示
libmodbus 3.1.1
===============
prefix: /home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release
sysconfdir: ${prefix}/etc
libdir: ${exec_prefix}/lib
includedir: ${prefix}/include
compiler: arm-linux-gcc -std=gnu99
cflags: -g -O2
ldflags:
可以檢視生成目錄和編譯器是否設定正確,如果不正確的話請重新設定
再然後執行
make & make install
中間或提示生成的檔案安裝目錄,以及如何使用生成的lib檔案,如下所示:
-------------------------------------------------------------------------------------------------------------
Libraries have been installed in:
/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
-------------------------------------------------------------------------------------------------------------
完成後到你的目錄下檢視生成的目錄和檔案:
lib檔案下面就是動態庫了,壓縮生成的庫
tar czf libmodbus-linux.tar.gz lib/libmodbus.*
通過nfs或者什麼方法把動態庫放到arm的/lib目錄下,就可以開始使用了
3、測試
libmodbus-master提供了測試程式在tests下,
首先把random-test-server.c裡面23行 ctx = modbus_new_tcp("127.0.0.1", 1502); 改成 ctx = modbus_new_tcp(NULL, 1502);,意思是說server監控所有的ip地址,埠是1502,然後編譯
arm-linux-gcc random-test-server.c -o random-test-server '-I/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/include/modbus -L/home/ccsl/libmodbus-master-linux/libmodbus-master-linux/limodbus-release/lib -lmodbus'
把random-test-server放到板子上執行
好了,arm版上的環境就搭好了,為了測試一下,我們在編譯機上作為client
首先在你的編譯機上新建一個目錄(最好是換個使用者下面),按照上面的過程再來一遍,但是生成makefile檔案的時候什麼都不要加
./configure
然後make & make install
到tests目錄下面
把random-test-client.c檔案 第60行:ctx = modbus_new_tcp("127.0.0.1", 1502); 裡面的地址改成你的arm板子的地址,編譯一下:
gcc random-test-client.c -o random-test-client `pkg-config --libs --cflags libmodbus`
這樣就生成了:random-test-client
執行./random-test-client
就可以看到輸出了
到這裡就介紹完了,希望對大家有幫助!