Разъединенные прикладные модули - PullRequest
2 голосов
/ 06 января 2012

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

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

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

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

Ответы [ 3 ]

1 голос
/ 08 января 2012

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


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


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

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

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


0 голосов
/ 03 марта 2015

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

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

0 голосов
/ 06 января 2012

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

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

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

...