Разъединенные прикладные модули

Я ищу встроенную ОСРВ, которая поддерживает функциональность для обновления программного обеспечения без компиляции / связывания всего ядра и программного обеспечения приложения. Концепция будет такой же, как в Windows или Unix Desktop Systems: загрузите модуль приложения (скомпилированный / связанный двоичный файл) к цели, не касаясь ядра (отсоединенного от ядра). Одна RTOS, которая поддерживает такие загружаемые модули памяти (DAM) с защитой памяти, - это ThreadX от ExpressLogic ( http://rtos.com/products/threadx/).

Кто-нибудь знает другие RTOS (небольшая площадь, целевой процессор Cortex-M3), который поддерживает такую ​​концепцию DAM?

У кого-нибудь есть опыт работы с DAM от ThreadX? Некоторая утвержденная литература?

Заранее спасибо!

3 ответа

QNX Neutrino может сделать это. Это полная RTOS, а не просто ядро, и имеет Unix-подобный интерфейс и POSIX API. Он по умолчанию использует оболочку Korn, но может использовать альтернативные оболочки или интерфейс GUI для окон. Он гораздо меньше и более масштабируем, чем Linux или Windows Embedded, и в то же время является настоящей ОСРВ.


WindowsCE работает в режиме реального времени (хотя и не такая гибкая или быстрая, как обычная ОСРВ, но детерминированная и с упреждающим планировщиком, основанным на истинном приоритете).


VxWorks может динамически загружать и связывать объектные модули с уже загруженным и работающим ядром.

Это не совсем то же самое, что и в Windows или Linux, оно работает путем частичного связывания на хосте разработки, после чего связывание завершается во время выполнения с целью. Любые неразрешенные зависимости ссылок в загружаемом объектном файле должны существовать в целевом объекте, либо в ядре, либо в ранее загруженных объектных файлах.

Результирующая среда выполнения по-прежнему ведет себя как монолитное приложение, как если бы оно было полностью связано с хостом разработки, поэтому каждый модуль должен иметь уникальные внешние символы и никакой функции main(). Загрузчик / компоновщик времени выполнения не выполняет загруженный модуль, но оболочка VxWorks способна напрямую выполнять любую публичную функцию по имени функции, поэтому вы просто вызываете точку входа загруженного модуля из командной строки или скрипта.


След очень маленький. Ядро, менеджер модулей, небольшое демонстрационное приложение с защитой памяти и поддержкой модулей - менее 15 КБ.

С помощью Threadx вы можете сделать это в Cortex M3, поскольку он может использовать MPU, без необходимости MMU. Насколько я знаю, у других ОС там проблемы.

Я не эксперт по Cortex-M3, но почему бы не использовать Linux для Cortex? В Linux есть понятие "модули", которые можно загружать и выгружать во время выполнения. Не все ядро ​​и, конечно, не весь функционал.

Вы можете проверить Linux Lodable Kernel Modules HOWTO, который предоставляет отличную документацию по этому вопросу:

"Одним из преимуществ является то, что вам не нужно перестраивать свое ядро ​​так часто. Это экономит ваше время и избавляет вас от возможности появления ошибки при перестроении и переустановке базового ядра. Как только у вас есть работающее базовое ядро, хорошо оставь его нетронутым как можно дольше ".

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