Разработка приложений для встроенных систем

Разработка приложений для встроенных систем - частный случай так называемой кросс-разработки. В случае кросс-разработки платформа, для которой пишется приложение (целевая платформа, например, Linux ARM в виде смартфона) отличается от платформы, на которой работает программист и создается исполняемый код для целевой платформы (платформа разработчика, например, Linux x86 в виде обычного PC). В случае ОС Android аппаратная часть платформы может быть одинакова - x86, но способ разработки все равно останется кроссплатформенный. Мы рассмотрим четыре составляющих кроссплатформенной разработки - создание исполняемого кода, его запуск, отладка и интегрированные среды разработчика.

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

[r...@v...]# ls -1 toolchain/arm-eabi-4.4.0/bin/arm-eabi-ararm-eabi-asarm-eabi-g++arm-eabi-gccarm-eabi-gdbarm-eabi-gprofarm-eabi-ldarm-eabi-objdumparm-eabi-ranlibarm-eabi-stringsarm-eabi-strip

Для управления процессом сборки, документирования и т.п. можно использовать те же средства, что и для обычной разработки под Linux.

Запуск объектного кода может быть осуществлен разными способами. Самый естественный - запуск непосредственно на целевом устройстве. Для этого требуется само целевое устройство, подключенное к компьютеру разработчика по USB или Ethernet. Это наиболее надежный способ, но не всегда самый удобный. Финальное тестирование необходимо производить именно на целевом устройстве.

Альтернатива - установить целевую операционную систему на универсальную виртуальную машину на платформе разработчика. В качестве такой машины для Android рекомендуется Android Virtual Device, Virtual Box, также можно использовать VMWare. При этом надо учитывать, что по некоторым параметрам виртуальная машина может отличаться от реального устройства - например, по скорости работы, особенностям периферии и т. п.

Промежуточным вариантом является использование эмулятора, предоставляемого производителем целевой платформы. Фактически это разновидность виртуальной машины, которая, с одной стороны, максимально адаптирована для эмуляции целевой платформы, а с другой стороны, интегрирована со средствами разработки, например, IDE, которые также предоставляются производителем. Примером этого может послужить Intel® HAXM.

В настоящее время для запуска обычно не ограничиваются переносом на целевую платформу одного исполняемого файла, а формируют целый пакет со всеми зависимостями и правилами установки (например, APK для Android или RPM для MeeGo), который затем устанавливается на целевой платформе. С помощью такого же пакета финальная версия приложения попадает на устройства конечных пользователей. Это, с одной стороны, увеличивает переносимость приложения и облегчает запуск сложных приложений, с другой - слегка усложняет и удлиняет процедуру запуска.

При кроссплатформенной разработке процедура отладки приложения изменяется не сильно. Описанный выше gdb можно использовать и для кросс-отладки. Для этого на целевой платформе отлаживаемое приложение запускается из-под gdbserver:

gdbserver host:port exe [args …]

На платформе разработчика запускается gdb и в его консоли устанавливается связь с gdbserver:

target remote host:port

gdb устанавливает соединение с gdbserver согласно указанным host:port и после этого программист может проводить сеансотладки как в обычном gdb. При использовании интегрированной среды разработки все эти детали взаимодействия gdb скрыты от программиста - зачастую, глядя на экран платформы разработчика, невозможно определить, происходит отладка локально или на целевой платформе.

Еще одним популярным способом отладки при кроссплат-форменной разработке является полный отказ от gdb и интенсивное использование логов.

Современные IDE, такие как QtCreator или Eclipse, поддерживают кросс-платформенную разработку. Эта поддержка может быть встроенной или реализовываться в виде плагинов. В любом случае IDE берут на себя львиную долю организационной работы, освобождая программисту время для творчества. Внешне процесс кросс-разработки с использованием IDE практически не отличается от обычного.