|
|
 |
Ответов
|
Nov 12 2007, 06:36
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 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 внутри одной секции, это резко упрощает загрузчик). Ну или какой то промежуточный пререлокатор на хост-машине, который сделает это сам (но очень лениво писать  )
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Nov 13 2007, 09:51
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 13 2007, 12:30
|
Местный
  
Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930

|
Цитата(zltigo @ Nov 13 2007, 12:51)  Знания никогда не помешают, вот мы их и накапливаем. Не помешают, и это правда... Но вот только ведь они давно уже никакие не сакральные... Давно описанных способов реализации динамической загрузки более чем достаточно есть в литературе... Здесь же имеет смысл решать вполне конкретные задачи, но для этого нету исходной постановки задачи. Потому я и задаю все время озин и тот же вопрос - а для чего это надо... Эффективность конкретного решения всегда выше, чем решение вообще в общем случае...
|
|
|
|
|
Nov 13 2007, 12:49
|

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

|
Цитата(Николай Z @ Nov 13 2007, 14:30)  Давно описанных способов реализации динамической загрузки более чем достаточно есть в литературе... Ну в какой 'литературе' описан нюанс поведения линкера от V5.10 IAR при попытке сваять загружаемый модуль? Цитата Здесь же имеет смысл решать вполне конкретные задачи... Вот чистой конкретикой Rst7 и поделился.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 14 2007, 09:23
|
Местный
  
Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930

|
Цитата(zltigo @ Nov 13 2007, 15:49)  Ну в какой 'литературе' описан нюанс поведения линкера от V5.10 IAR при попытке сваять загружаемый модуль?
Вот чистой конкретикой Rst7 и поделился. А я не об ньюансах линкера... Я об организации оверлеев. Это никак не зависит от конкретной тулзы и может быть реализовано на любой из имеющихся в наличии. Просто большими или меньшими усилиями. Тулза - это всего лишь инструмент - его свойства знать полезно, но решают не свойства тулзы, а цели которые надо достичь. За конкретику - спасибо - она несомнено никому не мешает, а может и кому-то поможет. Теперь остается только понять зачем она и куда ее применить.. Собственно мои сомнения скорее всего в том, что в топе задан несколько иной вопрос и товарищ(в топе) просто не то ищет, что ему реально было нужно... Но это как бы мои сомнения.
Сообщение отредактировал Николай Z - Nov 14 2007, 09:28
|
|
|
|
Сообщений в этой теме
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 Rst7 ЦитатаА мы тут уже кинулись зачем-то разрешать зад... Nov 14 2007, 06:57 alexander55 Цитата(Rst7 @ Nov 14 2007, 09:57) А тут н... Nov 14 2007, 07:14 VladislavS Не, вопрос я задал вполне конкретный и получил отв... Nov 15 2007, 20:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|