У меня есть прошивка, созданная с помощью GCC, которая работает на микроконтроллере на базе ARM Cortex M0. Сборка в настоящее время генерирует одно двоичное изображение, которое может быть записано в программную память микроконтроллера.
По причинам, связанным с обновлением полей, мне нужно разделить это изображение на две части, которые можно обновлять отдельно. Я назову их Core и App.
Ядро: содержит таблицу векторов прерываний,
main()
процедуру, а также различные драйверы и библиотечные процедуры. Он будет расположен в первой половине программной памяти.Приложение: содержит код конкретного приложения. Он будет расположен во второй половине программной памяти. У него будет одна точка входа по известному адресу, которая вызывается ядром для запуска приложения. Он будет получать доступ к функциям и данным в ядре через известные адреса.
Здесь есть некоторые очевидные ограничения, о которых я хорошо осведомлен:
При создании приложения необходимо знать адреса символов в ядре. Таким образом, сначала необходимо создать ядро, и оно должно быть доступно при связывании приложения.
Образ приложения будет совместим только с конкретным основным образом, для которого он был создан.
Можно будет обновить приложение без обновления ядра, но не наоборот.
Все в порядке.
У меня простой вопрос: как создать эти образы с помощью GCC и GNU binutils?
По сути, я хочу создать ядро, как обычный образ прошивки, а затем создать образ приложения, при этом приложение будет обрабатывать ядро как библиотеку. Но ни совместное связывание (которое потребует механизма динамического связывания), ни статическое связывание (которое копирует основные функции, используемые в двоичный файл приложения), здесь не применимы. То, что я пытаюсь сделать, на самом деле намного проще: связать существующий двоичный файл с его известными фиксированными адресами. Мне просто непонятно, как это сделать с помощью инструментов.
INCLUDE
этот фрагмент в сценарии компоновщика приложения. - person user58697   schedule 03.02.2016objcopy
для создания файла символов для ядра и передача егоld
с--just-symbols
кажется частью решения, но по-прежнему оставляли неопределенные ссылочные ошибки. - person Martin L   schedule 04.02.2016