Разделение исполняемого файла ELF на два файла во встроенной системе - PullRequest
1 голос
/ 03 августа 2010

Я использую ядро ​​процессора Xilinx Microblaze в Virtex4 FPGA.Я хотел бы добавить новую часть кода в мой текущий код, но тогда мой код превысит размер флэш-памяти, на которую он записан.Поэтому я хочу записать добавленный код на другую флэш-память.

Мой код копируется в ОЗУ загрузчиком, который затем переходит в ОЗУ и начинает обычное выполнение.Я намереваюсь скопировать новый код со второй флэш-памяти тем же способом, рядом (в ОЗУ) с кодом, скопированным с уже использованной флэш-памяти.

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

Мой вопрос: Как я могу создать эти отдельные файлы elf с точной спецификацией подпрограмм в каждом файле?Есть ли способ разделить один исполняемый файл на два отдельных файла?Или есть другое решение для создания отдельных исполняемых / библиотечных файлов в качестве вывода одной ссылки во встроенной системе?

Спасибо, Ишай

Ответы [ 3 ]

2 голосов
/ 04 августа 2010

Если вы можете рекомбинировать свой двоичный файл в ОЗУ, тогда должно быть вполне нормально связать один двоичный файл и затем разбить полученный файл. Вы должны гарантировать, что функции начального загрузчика содержатся в основной половине. Самый простой способ - создать бинарный файл автономного загрузчика.

Вы можете использовать утилиту, такую ​​как split или dd , чтобы разделить двоичный файл перед копированием его на флэш-память.

2 голосов
/ 05 августа 2010
  1. Предположим, что вы уже сделали очевидное и запустили 'strip', чтобы создать копию двоичного файла без символов отладки. Отладочная информация не используется для фактической цели.

  2. если ваш раздетый двоичный файл все еще больше, чем FLASH, вы можете использовать S-RECORD tools , чтобы разделить этот двоичный файл. У него есть еще много опций, помимо разделения файла, таких как добавление контрольной суммы, CRC, а также поддержка большого количества форматов файлов.

Если ваша ОЗУ достаточно велика, чтобы вместить всю вашу программу, нет особой необходимости создавать отдельный файл / DLL ELF. Просто соберите вашу программу как одну большую монолитную программу для работы в адресном пространстве ОЗУ, и пусть ваш загрузчик загружает ее части из Flash в RAM.

0 голосов
/ 03 августа 2010

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

...