libmodbus for android

В одном из последних проектов наша команда решила попробовать бортовой компьютер с OS Android и ARM процессором в качестве замены дорогому x86 планшету с Linux. Дороговизна x86 Linux планшетов обусловлена высокой стоимостью железной части устройства и стоимостью предустановленной Windows.

В связи с использованием новой платформы, требуется пересобрать софт под ARM Android и научиться конфигурировать систему. В этой и последующих статьях мы расскажем, как нам это удалось.

Перейдем к практической части статьи. Перенос кода начинается со сборки используемых библиотек. Я начал с libmodbus – библиотеки для работы с modbus rtu/tcp. Для сборки библиотеки необходимо иметь Android SDK/NDK (Автор использовал crystax ndk r7), консоль со стандартными unix утилитами, git и установленный CMake. (Для Windows консоль + git можно легко получить, установив http://code.google.com/p/msysgit/)

Последовательность действий с комментариями (список команд в консоли):

  1. Выкачиваем репозиторий библиотеки :
  2. git clone git://github.com/stephane/libmodbus.git

  3. Переходим в папку с репозиторием (корень) :
  4. cd libmodbus

  5. Далее необходимо создать Makefile и указать ему использование компилятора из NDK и прочие настройки – задача не из простых. Для ее решения прекрасно подходит CMake + toolchain от http://code.google.com/p/android-cmake/. Архив с моим CMakeLists.txt файлом и android.toolchain.cmake в конце статьи. Их необходимо распаковать в корень репозитория.
  6.  

  7. Создаем папку сборки :
  8. mkdir build

  9. Переходим в папку сборки :
  10. cd build

  11. Запуск cmake генератора: (для Windows пользователей также нужно указать тип генератора –G”MinGW Makefiels”)
  12. cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake ..

  13. Далее нужно выбрать все настройки: версию API, папку установки и другое (В качестве папки установки автор выбрал папку с заголовочными файлами и библиотеками нужной платформы : C:/AndroidSDK/android-ndk-r7-crystax/platforms/android-9/arch-arm/usr). Конфигурацию можно удобно сделать в графическом интерфейсе cmake, запускаемого командой :
  14. cmake-gui ..

  15. После конфигурации выполняем сборку :
  16. make

  17. В пункте 8 вы получаете ошибку компиляции - не найден modbus-version.h. В архив с материалами я поместил готовый файл с жестким указанием версии 3.1.0. Для генерации вручную используются команды:
  18. sh autogen.sh
    ./configure

  19. Повторим пункт 8 :
  20. make

  21. В пункте 10 вы получаете еще одну ошибку компиляции - не найден config.h. Я прикладываю свой config.h файл в архиве с материалами. Если вы хотите получить его самостоятельно, нужно в linux сгенерировать его и поправить файл вручную с учетом отличий linux и того, что есть в используемом Android NDK из заголовочных файлов и библиотек. В Windows с генерацией этого файла возникнут проблемы, т.к. требуется установить много unix утилит : autoreconf, autoconf и другие. Для генерации используются команды:
  22. sh autogen.sh
    ./configure

  23. Далее, скопировав мой файл или получив свой, копируем его в корень проекта. Из папки build выполняем :
  24. make

  25. Выполняем установку командой :
  26. make install

  27. Радуемся библиотеке.

В результате, в папку установки будут скопированы библиотека и заголовочные файлы.

Автор тестировал и ручается, что modbus-tcp работает верно, modbus-rtu будет протестирован в ближайшее время. Мой пример теста для Android можно скачать из http://github.com/proydakov/android-experiments/tree/master/libmodbus-tcp. Пример использует boost-thread и требует наличия библиотеки boost.

Архив с материалами.

Для автоматизированной сборки библиотеки я создал проект на github : http://github.com/proydakov/libmodbus-for-android

Leave a Reply

You must be logged in to post a comment.