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

 
 
 
Reply to this topicStart new topic
> fromelf, вытащить код модуля
toweroff
сообщение Oct 1 2014, 14:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!

Как получить из эльфа бинарник - известно:
Код
fromelf  --bin -o out.bin in.axf


Бинарник получается целиком содержащий код всех модулей, в него входящих. А как из .axf вытащить код отдельного модуля?
Что-то то ли в гугле забанили, то ли не так я его спрашиваю
Или утилита этого не умеет, нужно из бинарника по информации map-файла дергать? Но ведь абсурдно, эльф сам всю информацию содержит (ээ.. ну должен sm.gif )
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Oct 2 2014, 04:13
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



насколько я понимаю в эльфе содержатся секции/сегменты программы (.bss, .const и др.), а не модули на которые Вы побили свою программу. Отдельные модули объединяются линковщиком. Если два модуля содержат одинаковые секции, то они объединятся.
как-то так. может коряво объяснил.....
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 2 2014, 07:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



alexeyv, да, я уже накопал это в доке к fromelf. Это LR - Load Region
теперь бы еще найти информацию о разворачиваемых в RAM кусках...

Идея вообще такая - сделать некий механизм, который позволит подгружать к RL-RTX доп. задачи и запускать их как обычные (разумеется, будут передаваться данные о точках входа, размерах, стеках и т.д.)

Для этого сначала скомпилировать эти задачи, потом вытащить регион из эльфа, а из него уже, на основании данных о модулях в этом регионе, вытаскивать код и разворачивать самостоятельно

В общем вот такие мысли... Если есть еще идеи - с удовольствием выслушаю sm.gif
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 2 2014, 07:57
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



А почему сразу не скомпилировать их для исполнения из RAM?? Хлопот меньше с подгружением или экономия ОЗУ - загрузка на момент исполнения?


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 2 2014, 08:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(редактор @ Oct 2 2014, 11:57) *
А почему сразу не скомпилировать их для исполнения из RAM?? Хлопот меньше с подгружением или экономия ОЗУ - загрузка на момент исполнения?

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

Как-то так
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 2 2014, 08:09
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



То есть, если я правильно понял
1.Изначально загружается ядро ОС с минимальным функционалом.
2.На каком то этапе подгружаются модули (разные версии ПО или вообще ПО на разные приборы)
3.ОС определяет какие задачи добавили и запускает их на выполнение.

Тогда как вариант.
Каждую задачу (модуль) делать отдельным проектом. В проекте указывать регион исполнения отличный от основного кода, и уже оттуда вытаскивать весь модуль.
Других идей пока нет.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 2 2014, 08:16
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Ну вот и я пока к такому же варианту пришел, да и, похоже, других и нет sm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 2 2014, 08:45
Сообщение #8


Ally
******

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



Цитата(toweroff @ Oct 2 2014, 10:45) *
В общем вот такие мысли... Если есть еще идеи - с удовольствием выслушаю sm.gif


Именно так делается в ucLinux.
В результате создаются исполняемые бинарники в формате flat binary.
Очень примитивный формат с хидером из пары полей.
Его загрузчик можно написать самому даже не выковыривая оригинальных исходников из ucLinux.

Готовится бинарник утилитами elf2flt и flthdr.


Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 2 2014, 08:51
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Еще в настройках проекта KEIL (afx - ведь отттуда) есть галка "ONE ELF Section per Function" может как поможет.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 2 2014, 09:04
Сообщение #10


Ally
******

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



Цитата(редактор @ Oct 2 2014, 11:51) *
Еще в настройках проекта KEIL (afx - ведь отттуда) есть галка "ONE ELF Section per Function" может как поможет.


Правильнее использовать секцию типа overlay
Потом в IAR есть такая утилита iarchive, которая может превратить *.o файлы с оверлеями в отдельные elf файлы, ну а потом можно сделать flat файлы
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 2 2014, 09:58
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Спасибо за наводки, пойду разбираться

Еще вопрос такого плана - а как подобные секции вообще собирать?
Компилировать как часть общего проекта, а потом уже шаманить с *.o файлами?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:16
Рейтинг@Mail.ru


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