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

 
 
> Технология динамической загрузки модулей для 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

Сообщений в этой теме
- 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   Цитата(haker_fox @ Jan 19 2013, 09:36) .....   Jan 20 2013, 01:28
|- - AlexandrY   Цитата(kolobok0 @ Jan 20 2013, 03:28) под...   Jan 20 2013, 10:29
|- - 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
|- - SyncLair   Цитата(AlexandrY @ Jan 20 2013, 14:29) Дл...   Jan 22 2013, 14:30
|- - AlexandrY   Цитата(SyncLair @ Jan 22 2013, 16:30) Есл...   Jan 22 2013, 15:10
|- - SyncLair   Цитата(AlexandrY @ Jan 22 2013, 19:10) Чт...   Jan 22 2013, 18:05
- - 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 - 18:30
Рейтинг@Mail.ru


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