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

 
 
> EWARM. Cделать переход по известному адресу?
VladislavS
сообщение Nov 8 2007, 12:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Что-то совсем заработался... sad.gif
Ваяю начальный загрузчик. Основная программа лежит по адресу 0x10000000 в параллельном flash. По окончании всех действий надо просто передать на неё управление. Как?

EWARM 4.40. Процессор AT91RM9200.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Nov 12 2007, 06:36
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Особых проблем с изготовлением перемещаемого кода нет. В аттаче Прикрепленный файл  elfloader.zip ( 8.08 килобайт ) Кол-во скачиваний: 109
собственно простенький загрузчик эльфов, изготовленных при помощи IAR4.x (про пятый - ниже).

Сам загрузчик требует наличия функций fopen,fread,fclose,lseek,malloc,free,memset или zeromem, и специальной внешней функции IMB() - для выполнения прочистки кешей перед запуском.

Для упрощения загрузчика .xcl-файл должен представлять из себя следующее:
Код
-carm

// Declare relocation areas for code, constants and data.
-V(CODE)CODE_AREA,12
-V(DATA)DATA_AREA,12

// Place segments into the relocation areas
-Z(CODE_AREA)ELFBEGIN,DATA_ID,START,CODE,DATA_C,INITTAB,DATA_Z,DATA_N=0-FFFFFFFF
-Z(DATA_AREA)DATA_I=0-FFFFFFFF


В линкере выставляем Output Format elf/dwarf, Format variant none, Config/Override default program entry/Entry label "main", Extra Options -ynpra

Вызов функций, доступных для использования в исполняемых модулях, был сделан через swi. Описаны эти функции в файле swilib.h примерно таким методом:
Код
#pragma diag_suppress=Ta035
...
#pragma swi_number=10
__swi __arm int fopen(const char * cFileName, unsigned int iFileFlags, unsigned int iFileMode, unsigned int *ErrorNumber);
...


Код собственно вызывателя функций по их адресам из SWI могу привести, он похож на swi_handler в исходниках библиотеки иара.

Теперь собственно про пятый иар. Там конечно все уже в формате ELF, но штатный линкер не генерирует релокации. Попытка прикрутить ld от гнуся закончилась тем, что ld при генерации эльфа с релокациями просто эмитит ВСЕ релокации в выходной файл. Посему загрузчик надо дорабатывать, чтобы он понимал все возможные типы релокаций, а не только те, которые может генерить линкер от иара 4.x (этот линкер сразу обрабатывает все релокации, которые можно обработать при линковке, например BL внутри одной секции, это резко упрощает загрузчик). Ну или какой то промежуточный пререлокатор на хост-машине, который сделает это сам (но очень лениво писать smile.gif )


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 13 2007, 09:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Nov 12 2007, 08:36) *
Особых проблем ....

Спасибо за информацию по V5 - очень пригодится.


Цитата(Николай Z @ Nov 13 2007, 11:37) *
Резонно спросить - а зачем это вообще нужно в достаточно простых встроенных приложениях?

Знания никогда не помешают, вот мы их и накапливаем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Nov 13 2007, 12:30
Сообщение #4


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(zltigo @ Nov 13 2007, 12:51) *
Знания никогда не помешают, вот мы их и накапливаем.


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

Здесь же имеет смысл решать вполне конкретные задачи, но для этого нету исходной постановки задачи. Потому я и задаю все время озин и тот же вопрос - а для чего это надо...
Эффективность конкретного решения всегда выше, чем решение вообще в общем случае...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- VladislavS   EWARM. Cделать переход по известному адресу?   Nov 8 2007, 12:56
- - Сергей Борщ   Цитата(VladislavS @ Nov 8 2007, 14:56) EW...   Nov 8 2007, 13:03
- - VladislavS   Спасибо. Сработало. Как все просто когда знаешь...   Nov 8 2007, 13:23
- - Rst7   Есть еще способ (без линкера): ((void(*)(void))0x...   Nov 8 2007, 13:30
|- - Николай Z   Цитата(Rst7 @ Nov 8 2007, 16:30) Есть еще...   Nov 8 2007, 14:25
|- - Rst7   Цитата(Николай Z @ Nov 8 2007, 16:25) Дык...   Nov 8 2007, 14:41
|- - Николай Z   Цитата(Rst7 @ Nov 8 2007, 17:41) А если э...   Nov 8 2007, 15:09
|- - Rst7   Цитата(Николай Z @ Nov 8 2007, 17:09) В т...   Nov 8 2007, 15:23
||- - VladislavS   Цитата(Rst7 @ Nov 8 2007, 18:23) Представ...   Nov 8 2007, 20:01
|- - aaarrr   Цитата(Николай Z @ Nov 8 2007, 18:09) В т...   Nov 8 2007, 15:25
|- - Николай Z   Цитата(aaarrr @ Nov 8 2007, 18:25) Налили...   Nov 8 2007, 16:33
|- - aaarrr   Цитата(Николай Z @ Nov 8 2007, 19:33) Нра...   Nov 8 2007, 18:49
|- - Сергей Борщ   Цитата(aaarrr @ Nov 8 2007, 20:49) Насчет...   Nov 8 2007, 19:36
|- - aaarrr   Цитата(Сергей Борщ @ Nov 8 2007, 22:36) О...   Nov 8 2007, 23:03
|- - Сергей Борщ   Цитата(aaarrr @ Nov 9 2007, 01:03) По-мое...   Nov 8 2007, 23:29
|- - singlskv   Цитата(Сергей Борщ @ Nov 9 2007, 02:29) P...   Nov 9 2007, 00:24
|- - aaarrr   Цитата(Сергей Борщ @ Nov 9 2007, 02:29) Д...   Nov 9 2007, 02:22
|- - Николай Z   Цитата(aaarrr @ Nov 9 2007, 05:22) ИМХО, ...   Nov 9 2007, 09:56
- - VladislavS   Если делать на классическом С, то что-то типа того...   Nov 9 2007, 07:09
- - Rst7   Цитата(Николай Z @ Nov 9 2007, 11:56) Мог...   Nov 9 2007, 11:23
|- - Николай Z   Цитата(Rst7 @ Nov 9 2007, 14:23) Давайте,...   Nov 9 2007, 11:44
|- - Rst7   Цитата(Николай Z @ Nov 9 2007, 13:44) А в...   Nov 9 2007, 12:12
|- - Николай Z   Цитата(Rst7 @ Nov 9 2007, 15:12) Мне нрав...   Nov 9 2007, 13:26
||- - Rst7   Цитата(Николай Z @ Nov 9 2007, 15:26) Нра...   Nov 9 2007, 13:30
|- - Николай Z   Цитата(Rst7 @ Nov 9 2007, 16:30) Видимо я...   Nov 9 2007, 13:39
- - Rst7   Цитата(Николай Z @ Nov 9 2007, 15:39) Я н...   Nov 9 2007, 13:46
|- - Николай Z   Цитата(Rst7 @ Nov 9 2007, 16:46) А теперь...   Nov 9 2007, 16:23
- - zltigo   Да расшумелись . В общем случае несомненно (для ме...   Nov 9 2007, 14:48
- - VladislavS   Да ладно вам на пустом месте ругаться... Чтобы ник...   Nov 9 2007, 17:53
|- - Николай Z   Цитата(VladislavS @ Nov 9 2007, 20:53) Да...   Nov 9 2007, 20:27
- - VladislavS   А меня вот заинтересовал вопрос перемещаемости код...   Nov 10 2007, 05:56
|- - Николай Z   Цитата(VladislavS @ Nov 10 2007, 08:56) А...   Nov 10 2007, 08:59
|- - Сергей Борщ   Цитата(VladislavS @ Nov 10 2007, 07:56) А...   Nov 10 2007, 10:43
|- - Николай Z   Цитата(Сергей Борщ @ Nov 10 2007, 13:43) ...   Nov 10 2007, 11:52
||- - Сергей Борщ   Цитата(Николай Z @ Nov 10 2007, 13:52) Я ...   Nov 10 2007, 12:51
||- - Николай Z   Цитата(Сергей Борщ @ Nov 10 2007, 15:51) ...   Nov 11 2007, 08:33
|- - zltigo   Цитата(Сергей Борщ @ Nov 10 2007, 12:43) ...   Nov 10 2007, 13:04
|- - Николай Z   Цитата(Rst7 @ Nov 12 2007, 09:36) Особых ...   Nov 13 2007, 09:37
|- - zltigo   Цитата(Николай Z @ Nov 13 2007, 14:30) Да...   Nov 13 2007, 12:49
|- - Николай Z   Цитата(zltigo @ Nov 13 2007, 15:49) Ну в ...   Nov 14 2007, 09:23
- - Rst7   ЦитатаА мы тут уже кинулись зачем-то разрешать зад...   Nov 14 2007, 06:57
|- - alexander55   Цитата(Rst7 @ Nov 14 2007, 09:57) А тут н...   Nov 14 2007, 07:14
- - VladislavS   Не, вопрос я задал вполне конкретный и получил отв...   Nov 15 2007, 20:49


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:52
Рейтинг@Mail.ru


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