2013-09-26 4 views
1

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

huge binary files with objcopy

Для некоторых испытаний потребности. Я должен добавить следующий скрипт ссылки при ссылке.

.section_test 0x11323000: { *(.section_test) } 

Этот самостоятельный раздел должен начинаться с большого адреса 0x11323000.

Затем используйте objcopymips для создания сырой двоичный файл

objcopymips -O binary vxWorks.st E0122.bin  

Этот шаг делает окончательный сырой двоичный файл, файл BIN, слишком большой. от 27 МБ до более 270 МБ.

Таким образом, он не может быть загружен в нашу машину, которая имеет только 64MB физическую память.

Можно ли уменьшить его размер без удаления каких-либо разделов и допустить его выполнение?

ответ

1

objcopy -O binary создает образ памяти программы, основанный на адресе загрузки разделов. В вашем случае загрузка и адрес времени работы .section_test совпадают, то есть адрес загрузки 0x11323000, который объясняет большой размер файла.

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

Пример:

.section_test 0x11323000 : AT(some-small-address) { *(.section_test) } 

или

.section_test 0x11323000 : { *(.section_test) } AT> some-region-name 

Проверить эту страницу, а также: https://sourceware.org/binutils/docs/ld/Output-Section-LMA.html#Output-Section-LMA

+0

идеальный ответ, спасибо! Я проверил это руководство раньше, но пропустил эту часть .... – oyss

+0

Я понимаю ответ, но почему раздел bss не включен в большой файл? (в примере в приведенной выше ссылке) - bss-раздел не имеет значения "AT" – ransh

Смежные вопросы