ARM голая железная компиляция программы - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь скомпилировать некоторый код C для запуска на симуляторе ARMv6, с флэш-памятью, начинающейся с @ 0x0, и ОЗУ, начинающейся с 0x800000.Прямо сейчас я могу передать двоичные файлы с симулятора просто отлично ...

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

Я использую инструментальную цепочку GNU для компиляции.

Это мой текущий скрипт компоновщика:

MEMORY
{
    rom(rx) : ORIGIN = 0x00000000, LENGTH = 0x00800000
    ram(!rx) : ORIGIN = 0x40000000, LENGTH = 0x00800000
    h : ORIGIN = 0x40000000, LENGTH = 0x00400000
}

SECTIONS
{
    .text : { *(.text*) } > rom
    .bss : { *(.bss*) } > ram
    .heap : { *(.heap*) } > h
}

    end = ORIGIN(h) + LENGTH(h);

_stacktop = ORIGIN(ram) + LENGTH(ram);

1 Ответ

1 голос
/ 31 мая 2019

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

[Добавлено после добавления в вопрос скрипта компоновщика]

Ваш скрипт компоновщика кажется необычным из-за отсутствия раздела .data:

.data : { *(.data) } > ram

Без этого не ясно, что компоновщик будет делать со статическими инициализированными данными.

Также ваш вопрос гласит, что ОЗУ начинается с 0x800000, но скрипт компоновщика явно находит его на 0x40000000. Возможно, это неправильное понимание вашей карты памяти заставляет вас ошибочно полагать, что происходят записи в область ПЗУ?

...