реклама на сайте
подробности

 
 
> Технология динамической загрузки модулей для RTOS, Какие есть методы и инструменты.
AlexandrY
сообщение Dec 29 2012, 21:48
Сообщение #1


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



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

Очевидно, что это реализовать для небольших проектов и даже не с ОС совершенно элементарно.
Для этого при компиляции основного ядра делают symbol definition file и потом этот файл и файлы хидеров передают третьей стороне чтобы те могли правильно скомпилировать и слинковать свои приложения для ядра.

Но когда в ядре количество функций переваливает за тысячу, то сделать переносимые хидеры в ручную представляется проблемой.
Также желательно сделать отдельный модуль с так называемой jump table чтобы уменьшить зависимость от мелких изменений и перекомпиляций ядра. Как-то подумать о фильтрации, чтобы не все подряд сущности из ядра попадали в symbol definition file и т.д.

И тогда вопрос - заморачивается ли кто-нибудь с этим и известны ли инструменты автоматизации всего этого процесса.


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
desh
сообщение Jan 13 2013, 07:56
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 113
Регистрация: 25-10-07
Из: Краснодар
Пользователь №: 31 725



Контики от А. Дункельса и компании поддерживает загрузку модулей через elf для AVR, MSP430, x86 и др.
Ознакомиться с исходниками можно в contiki-2.6\core\loader\.
Сайт проекта http://www.contiki-os.org/
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Jan 18 2013, 19:30
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(desh @ Jan 13 2013, 11:56) *
Контики от А. Дункельса и компании поддерживает загрузку модулей через elf для AVR, MSP430, x86 и др.
Ознакомиться с исходниками можно в contiki-2.6\core\loader\.
Сайт проекта http://www.contiki-os.org/

для AVR он немного "испортил" эльф и сделал его 16-и битным

Цитата(neiver @ Jan 16 2013, 19:01) *
Насчёт взаимодействия загружаемого модуля и ядра, моногие ARM-ы, например, имеют команду SVC - Supervisor Call, которая вызывает соответствующий .....

Вот этот пример показывает разницу между ABI и API ибо в первом случае чётко определены параметры вызовов и поэтому любая "прикладная задача" в ОС может воспользоваться функциями. Вопрос только в с ледующем а как же быть если есть задача и библиотека, и сначала грузиться библиотека а потом задача? и функции библиотеки не определены в SVC.


И на последок:

Координальное на мой взгляд решение в ембеддед мире -- специально готовить исполняемый прикладной файл с учётом того, что уже есть на плате. То есть линкер должен знать какое состояние флеши в контроллере и готовить очередной "прикладной процесс" (понятно что прикладной в смысле не ОС которая УЖЕ в МК) с учётом того что уже есть на плате. То есть ну вот есть функция TimeDelay() по адресу А так и не зачем пихать ещё одну а делаем вызов по адресу A.

Или если совсем просто, то пусть линкер линкует старые и новые объектные файлы только старые размещает по старому с нулевого адреса а новые далее. В этом случае загрузчику остаётся только сначала сделать memcmp, а уж потом оставшийся новый код догрузить во FLASH.


--------------------
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 19 2013, 05:36
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (SyncLair @ Jan 19 2013, 04:30) *
То есть ну вот есть функция TimeDelay() по адресу А так и не зачем пихать ещё одну а делаем вызов по адресу A.

Это правильно, но как этого добиться от линкера? Он-то о существовании оси не знает.
Допустим, у нас есть API для уже загруженной в МК операционки:
CODE
namespace OSAPI
{
void sleep( msec );
...
...
...
TPrio getSelfPrio();
...
...
...
void sendchar( char a );
}

Совершенно разные функции, которые уже есть в оси, на которые уже все заточено (прерывания, периферия, ядро). Допустим, мы решили воспользоваться одной из функций в нашем прикладном коде (драйвер, подгружаемая библиотека, просто программа):
CODE
....
int main( void )
{
....
while( 1 )
  {
    OSAPI::sleep( 100 );
    OSAPI::sendchar( '!' );
  }
....

Вот как объяснить линкеру, что нужно подставить только адреса функций, передать и принять аргументы.
Кроме, как в заголовочнике задать адреса этих функций (точно также, как мы делаем это в одном проекте "по месту") у меня идей нет... Вопрос, как сделать это красиво? rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 20 2013, 01:28
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(haker_fox @ Jan 19 2013, 09:36) *
..есть API для уже загруженной в МК операционки...мы решили воспользоваться одной из функций в нашем прикладном коде...нужно подставить только адреса функций, передать и принять аргументы..


под AVR делал так:
имеем таблицу джампов переходов. Адресс таблицы "зашит жёстко". Сам по себе вектор может указыватьна любой адресс. А чтоб вызвать из прикладной прожки - то адресс известен. получается, что из любого места позвали известный адресс джамп перехода из ядра.

под stm32 сейчас делаю более навороченную модель - там собственно уже всё динамически вяжется. и собственно в загрузчике почти ничего уже и нетsm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 20 2013, 10:29
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(kolobok0 @ Jan 20 2013, 03:28) *
под stm32 сейчас делаю более навороченную модель - там собственно уже всё динамически вяжется. и собственно в загрузчике почти ничего уже и нетsm.gif


А вот интересно , какой смысл у такой организации софта.

Вижу три варианта: для себя, для коллег в своей организации, для сторонних разработчиков.

Чтобы делать это для себя тут я вижу оправдание только в некоей эстетике, не относящейся к объективной необходимости.
Чтобы делать для коллег, то наверно это вызвано технологическими особенностями процесса разработки, а не потребностью приложения как такового.
Для сторонних разработчиков такой подход вызовет потребность создания огромного объема документации, проблемы с тех поддержкой. Для самих сторонних разработчиков вызовет проблемы с отладкой.

А где положительные стороны такого подхода? Я не могу увидеть.
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Jan 22 2013, 14:30
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(AlexandrY @ Jan 20 2013, 14:29) *
Для сторонних разработчиков такой подход вызовет потребность создания огромного объема документации, проблемы с тех поддержкой. Для самих сторонних разработчиков вызовет проблемы с отладкой.

Если вы предоставляете систему сборки и бинарый файл ОСи то ничего он не создаёт!

Цитата(haker_fox @ Jan 21 2013, 04:58) *
Хотя нет. У меня есть один проектик, который работает круглые сутки, и управляет неким процессом.

У меня тоже есть пример когда. "Обновление ПО контроллера без остановки контроллера." В этом случае мне бы как раз помогло обновлять только то что хочу. Ну например: загрузил вверсию 2 а работает версия 1, далее перезапустил процесс на новую версию.


Цитата(kolobok0 @ Jan 21 2013, 12:47) *
как бы Вы поспешили я так понимаешь. мегабайты через какой-нить вяложующий протокол и вся ваша прыть с крутым камнем идёт лесом.

Поддерживаю аргумент -- вот Дункельс и пляшет с обновлением по всяким там Mesh сетям.


--------------------
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 22 2013, 15:10
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(SyncLair @ Jan 22 2013, 16:30) *
Если вы предоставляете систему сборки и бинарый файл ОСи то ничего он не создаёт!


У меня тоже есть пример когда. "Обновление ПО контроллера без остановки контроллера." В этом случае мне бы как раз помогло обновлять только то что хочу. Ну например: загрузил вверсию 2 а работает версия 1, далее перезапустил процесс на новую версию.



Поддерживаю аргумент -- вот Дункельс и пляшет с обновлением по всяким там Mesh сетям.


Что такое "система сборки" и как она заменяет документацию?

Приведите хотя бы маленький реалистичный примерчик сценария обновления только какого то фрагмента кода, и реалистичную причину зачем это надо было делать.

Дункельс умеет доволить все до примитива, в этом ему не откажешь.
Только потом приходится сидеть и гадать от какой важной функциональности он отказался, и чем за это придется заплатить. wink.gif
Go to the top of the page
 
+Quote Post
SyncLair
сообщение Jan 22 2013, 18:05
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197



Цитата(AlexandrY @ Jan 22 2013, 19:10) *
Что такое "система сборки" и как она заменяет документацию?

Приведите хотя бы маленький реалистичный примерчик сценария обновления только какого то фрагмента кода, и реалистичную причину зачем это надо было делать.

Система сборки -- на входе ваши бинарники + исходники клента -- на выходе исполняемый файл -- ну makefile например и куча куча всяких служебных скриптов и файлов или плагин к Eclipse-у.

Никак не заменяет, просто уменшает ОГРОМНЫЙ размер документации если клиенту иногда надо
пином подёргать и вывести на екран что-нибудь, в то время как ваши внутренние модули могут быть впринципе не продокументированы хорошо.

В случае проблем со сборкой и даже наоборот требует на себя ЕЩЁ документацию в самом плохом случае biggrin.gif но если вы просто дали вашему клиенту инструмент по сборке -- он же студия разработки, то у вас до поры до времени нет проблем (а рано или поздно клиенту что-то экзотическое потребуется по закону мерфи).
Ну и конечно ваша базовая часть, естественно, должна быть продокументирована НО только интерфейсы, а внутренности вшей базовой части конечно можно не документировать.


часть 1 -- ОС(с загрузчиком) + часть2 -- управление каким-нибудь технологическим процессом

часть1 -- с 0 по ххх адрес
часть2.0 --- с ххх адреса по ууууу адрес
часть2.1 --- с уууу адреса по зззззз адрес

изменяя адрес начальной загрузки 2 части создаём образ части№2 и по меееееедленому каналу загружаем часть2 во флеш ПАРАЛЕЛЬНО с работающей системой Далее TaskDelete(2.0) + TaskCreate(2.1)


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AlexandrY   Технология динамической загрузки модулей для RTOS   Dec 29 2012, 21:48
- - a9d   Для начала ЦитатаОперационная система (Operating ...   Dec 29 2012, 22:03
|- - AlexandrY   Цитата(a9d @ Dec 30 2012, 00:03) Как видн...   Dec 30 2012, 13:41
- - haker_fox   QUOTE (AlexandrY @ Dec 30 2012, 06:48) И ...   Dec 30 2012, 13:09
- - a9d   Насколько я помню в винде адреса API функций прогр...   Dec 30 2012, 14:31
|- - AlexandrY   Цитата(a9d @ Dec 30 2012, 16:31) Наскольк...   Dec 31 2012, 12:09
- - haker_fox   Гм... чувствую благовейный ветерок) Как когда-то д...   Dec 31 2012, 06:04
- - a9d   А как планируете решать проблему с MMU ? Также как...   Dec 31 2012, 14:59
|- - AlexandrY   Цитата(a9d @ Dec 31 2012, 16:59) А как пл...   Dec 31 2012, 15:31
- - a9d   Вот об отсутствии и идет речь. Вот простой пример...   Dec 31 2012, 15:37
|- - AlexandrY   Цитата(a9d @ Dec 31 2012, 17:37) Вот об о...   Dec 31 2012, 16:50
|- - haker_fox   QUOTE (AlexandrY @ Jan 1 2013, 01:50) Сущ...   Jan 2 2013, 09:39
- - vshemm   ЦитатаКак-то тут проскочила мысль, что настоящая о...   Jan 2 2013, 20:42
|- - AlexandrY   Цитата(vshemm @ Jan 2 2013, 22:42) Про за...   Jan 3 2013, 07:51
|- - vshemm   Цитата(AlexandrY @ Jan 3 2013, 11:51) Нас...   Jan 8 2013, 16:07
|- - AlexandrY   Цитата(vshemm @ Jan 8 2013, 18:07) Боюсь,...   Jan 16 2013, 12:07
|- - AlexandrY   Цитата(haker_fox @ Jan 19 2013, 07:36) Эт...   Jan 19 2013, 11:08
||- - haker_fox   QUOTE (AlexandrY @ Jan 19 2013, 20:08) Вы...   Jan 20 2013, 08:54
|- - kolobok0   Цитата(AlexandrY @ Jan 20 2013, 14:29) .....   Jan 20 2013, 16:25
||- - AlexandrY   Цитата(kolobok0 @ Jan 20 2013, 18:25) вос...   Jan 20 2013, 19:24
||- - haker_fox   QUOTE (AlexandrY @ Jan 21 2013, 03:24) Т....   Jan 21 2013, 00:58
||- - kolobok0   Цитата(AlexandrY @ Jan 20 2013, 23:24) .....   Jan 21 2013, 08:47
- - neiver   Насчёт взаимодействия загружаемого модуля и ядра, ...   Jan 16 2013, 15:01
- - _Pasha   Цитата(neiver @ Jan 16 2013, 19:01) SVC -...   Jan 16 2013, 15:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01949 секунд с 7
ELECTRONIX ©2004-2016