Что касается управления и выделения ресурсов. Тут нужно кумекать. Предлагаю высказывать идеи если таковые есть. Но основной концепцией будет то, что есть несколько уровней абстракции:
1. Физика;
2. Ввод/вывод;
3. Потоки.
На первом уровне будут явно определяться GPIO которые приложение будет задействовать. Т.е. приложение может сказать, что мне нужно 3 GPIO, первое со свойствами ШИМ, второе на вывод, третье на ввод. И при установке пользователю система предложит в автоматическом режиме подтвердить выделение на контроллере ног.
На втором, приложение будет просить к примеру UART. Т.е. не говорить, какие GPIO нужны, а просто сообщать, что хочет работать с UART. Система предложит пользователю автоматически конфигурацию, но он сможет ее поменять.
И третий уровень это потоки. Тут приложению безразлично откуда берутся данные. Оно просто хочет получать поток, например датчиков температуры. И пользователь это подтверждает.
Тогда первый уровень приложений фактически становится драйверами. Второй, провайдерами, а третий прикладным. Хотя конечно, любое приложение может "сесть" на все роли.
Конфигуратор видится мне что-то типа такого:
Мне не важно ваше мнение. Мне важны ваши дела.