У нас есть скрипт компоновщика с пользовательским разделом, который был добавлен по причинам, связанным с проверкой соответствия IEC.Однако после добавления этого раздела размер двоичного файла, созданного с помощью objcopy -O binary input output
, увеличился с ~ 150 КБ до ~ 512 МБ.
Я проследил его до раздела, в котором отсутствует атрибут (NOLOAD)
.И я также могу несколько объяснить, почему двоичный файл был 512 Мбайт.
Наша память выглядит следующим образом:
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00007580
CUSTOM_SECTION (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000
}
Первоначально определен раздел:
CUSTOM_LOCATION:
{
CUSTOM_BEGIN = .;
KEEP(*(CUSTOM_LOCATION));
CUSTOM_END = .;
} > CUSTOM_SECTION AT > ram
Если CUSTOM_LOCATION:
заменен на CUSTOM_LOCATION (NOLOAD):
, сгенерированный двоичный файл имеет нормальный формат.Без (NOLOAD)
размер двоичного файла составляет ~ 512 Мбайт.
Я ищу причину, по которой этот двоичный файл становится таким большим.Что означает (NOLOAD)
(или его отсутствие) для objcopy
при создании бинарного файла?
Вторичный вопрос: в конце раздела мы говорим } > CUSTOM_SECTION AT > ram
, можем ли мы обойтись без этой директивы?Можно ли его заменить на } > ram
?(А можно ли удалить CUSTOM_SECTION
из MEMORY
части?
Я не видел различий в сгенерированном map
файле