Разработка планшета для выделенной системы
Мне нужно принять архитектурное решение для разработки (на самом деле портирования) моего встроенного решения. Я постараюсь изложить свой случай как можно более четко, и любые советы, которые я могу получить, будут оценены.
Вступление
У меня есть встроенная система, в настоящее время разработанная на основе архитектуры 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 уже несколько месяцев. Пока что мы не получили никакого решения. Но вот что мы узнали из нашего неполного анализа:
Android - довольно тяжелая система, которая также приносит JVM в смесь. Таким образом, ваши HW и требования к памяти значительно возрастут.
Android любит захватывать всю систему, поэтому иногда вы можете бороться с Android.
Android имеет очень хорошие механизмы IPC, недоступные в основном ядре Linux, например, Binder. Конечно, вы можете перенести его на другую систему. Но это было бы значительным усилием.
Android имеет очень богатый графический интерфейс, также с такими вещами, как NDK view, вы не ограничены рамкой JDK.
Android не использует стандартную библиотеку GNU C, он использует нечто, называемое BioniC, которое является портом библиотеки C от BSD. Обычно это не проблема для большинства программ, но если вы используете некоторые специфичные для Linux низкоуровневые функции, такие как работа с последовательными портами, вам нужно настроить свой код. Посмотрите, что я должен был сделать, чтобы портировать библиотеку Java RXTX на Android https://github.com/vladistan/gnu.io.android
Вы можете найти множество разработчиков Android, которые будут заниматься базовым программированием GUI для вас, в то время как вы концентрируетесь на конкретном приложении. Взаимодействие между GUI и низкоуровневыми вещами довольно просто с помощью связующего. И, конечно, вы можете ввести любой механизм, который вы хотите через NDK.
Мы рассмотрели Ubuntu Touch. Но пока он не кажется достаточно зрелым.