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

Мне нужно принять архитектурное решение для разработки (на самом деле портирования) моего встроенного решения. Я постараюсь изложить свой случай как можно более четко, и любые советы, которые я могу получить, будут оценены.

Вступление

У меня есть встроенная система, в настоящее время разработанная на основе архитектуры ARM11 и ArchLinux OS. Он реализован с использованием всех видов технологий, доступных в Linux, включая C, C++, Bash и Python.

В настоящее время я хотел бы перенести свое решение на планшет, поэтому я пытаюсь принять некоторые решения об архитектуре, основываясь на требованиях моей системы.

Требования

Система является модульной, и она запускает несколько процессов и потоков. Он также связывается с удаленными серверами и управляет периферийными устройствами. Это основные требования, на данный момент я буду обновлять по мере развития дискуссии:

Primary:

  • Выделенная система (минимальное количество запущенных приложений, даже в bg)
  • Несколько процессов, умение устанавливать приоритеты
  • Возможность назначить процесс одному ядру процессора (привязка к процессору)
  • Механизмы межпроцессного взаимодействия
  • Полное аппаратное управление (WiFi, 3G, GSM, микрофон, динамик, дисплей, ...)
  • Создание сокетов и пр.

Другой:

  • Возможность подключения микрофона непосредственно к разъему 3,5 мм (разъем TRRS)
  • Основное решение для обеспечения надежности
  • Перспектива: минимизировать портирование для новых планшетов и HW

Мои вопросы

  • Какая комбинация планшета и ОС будет отвечать этим требованиям?
  • Как подойти к требованию "выделенное решение"?
  • Как подойти к разработке программного обеспечения, какой язык и инструменты использовать?

Мое расследование до сих пор

Мое расследование до сих пор было сосредоточено на выборе ОС. Основными опциями кажутся Android и Ubuntu Touch. Вот мои мысли:

Android

Android выигрывает в основной категории, но...

У меня нет опыта разработки под Android, но, насколько я могу судить, я могу либо разработать Java-приложение, работающее поверх Dalvik, либо перейти на нативную версию через Android NDK. Может быть, я даже смогу обойти все это и пойти в ногу с Dalvik и разрабатывать на Python? Я думаю, тогда я потеряю доступ к API для доступа к HW. Не уверен, как я мог бы получить доступ к HW тогда. Но если я займусь разработкой Java, то это решение для песочницы, и я не уверен, что смогу ли я так контролировать процессы, HW и привязку ядра процессора?

Ubuntu Touch

Разработка на Ubuntu Touch больше похожа на разработку Linux, к которой я привык, так как она использует Qt. Проблема здесь заключается в том, что приложения разрабатываются с использованием SDK, который ограничивает меня HTML5 и QML, что, я не уверен, может дать мне тот же контроль над системой, которая мне нужна. Если я использую Python и избегаю SDK, возникает та же проблема - как мне управлять HW? Конечно, есть способ сделать это, как на обычной встроенной системе, я думаю, но я не хочу изобретать велосипед, если мне не нужно.

Кроме того, кажется, что Ubuntu Touch еще не был портирован на многие устройства, поддерживается только несколько из них.

в заключение

Я не уверен, насколько хорошо я представил свое дело, но я буду обновлять вопрос по мере необходимости с дальнейшими объяснениями и подробностями требований. Спасибо за ваше терпение, ваше время и любую помощь, которую вы можете предложить.

1 ответ

Я в той же лодке, что и вы, мы разрабатываем встроенную систему на процессоре ARM. В настоящее время система написана на Python на специально построенном дистрибутиве Linux от производителя оборудования.

Мы смотрим на Android и Ubuntu Touch уже несколько месяцев. Пока что мы не получили никакого решения. Но вот что мы узнали из нашего неполного анализа:

  1. Android - довольно тяжелая система, которая также приносит JVM в смесь. Таким образом, ваши HW и требования к памяти значительно возрастут.

  2. Android любит захватывать всю систему, поэтому иногда вы можете бороться с Android.

  3. Android имеет очень хорошие механизмы IPC, недоступные в основном ядре Linux, например, Binder. Конечно, вы можете перенести его на другую систему. Но это было бы значительным усилием.

  4. Android имеет очень богатый графический интерфейс, также с такими вещами, как NDK view, вы не ограничены рамкой JDK.

  5. Android не использует стандартную библиотеку GNU C, он использует нечто, называемое BioniC, которое является портом библиотеки C от BSD. Обычно это не проблема для большинства программ, но если вы используете некоторые специфичные для Linux низкоуровневые функции, такие как работа с последовательными портами, вам нужно настроить свой код. Посмотрите, что я должен был сделать, чтобы портировать библиотеку Java RXTX на Android https://github.com/vladistan/gnu.io.android

  6. Вы можете найти множество разработчиков Android, которые будут заниматься базовым программированием GUI для вас, в то время как вы концентрируетесь на конкретном приложении. Взаимодействие между GUI и низкоуровневыми вещами довольно просто с помощью связующего. И, конечно, вы можете ввести любой механизм, который вы хотите через NDK.

Мы рассмотрели Ubuntu Touch. Но пока он не кажется достаточно зрелым.

Другие вопросы по тегам