Связывание двоичного кода с функциями / данными в определенном месте в памяти

В настоящее время я нахожусь в процессе написания загрузчика промежуточной памяти для ATMega.

Я хотел бы разместить раздел часто используемых функций и данных в определенном месте в памяти, например:

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

Для наглядности ниже приведена карта желаемого расположения памяти:

После некоторой помощи вэта тема на avrfreaks я дошел до того, что смог переместить весь код (в моем загрузчике + среда разработки библиотеки - приложения будут разрабатываться в отдельных проектах) без тегов__attribute__ ((section(".boot"))) в раздел с общей библиотекой успешно с помощью специального сценария компоновщика.

В ветке avrfreaks было предложено связать свои приложения с помощьюavr-objcopy --strip-all --keep-symbol=fred --keep-symbol=greg ... boot.elf dummy.elf создать символьную ссылку на то, что у меня есть в моей общей библиотеке, а затем связать мои приложения с этим макетом памяти с помощьюavr-gcc -o app.elf -Wl,--just-symbols=dummy.elf app1.o app2.o ....

Проблема, с которой я здесь сталкиваюсь, заключается в том, что мне нужно указать каждый символ, который я хочу сохранить в моем dumy.elf. Я могу использоватьkeep-symbols=<file> директива, чтобы указать текстовый файл список символов, чтобы сохранить, но я все еще должен создать этот список.

Я заметил, что есть куча символов, которые яне хочу включить (например, код настройки среды C, который является общим по названию, но отличается по функциональности как для загрузчика, так и для приложения), который начинается с префикса '_' (но, конечно, есть некоторые полезные и большие библиотечные функции с одинаковым префиксом, например * printf и математические процедуры). Возможно, не будет конфликтов, если я свяжу свое приложение с существующим кодом времени выполнения в приложении / загрузчике?

Как я могу сгенерировать список символов для моего раздела библиотеки, который содержит код, который я написал (возможно, некоторую магию sed и файлы заголовков сканирования) / исключает любые символы, которые могут конфликтовать при связывании приложения?

Проект можно посмотреть в его текущем состоянии наэтот репозиторий GitHub.

Изменить: я хочу пояснить, что ямог пометить все, что я хочу быть в разделе общей библиотеки с__attribute__ ((section(".library"))), но так как я также хочу поделиться некоторыми довольно большими вещами libc (vsprintf и т. д.) между загрузчиком и приложением, это очень быстро становится громоздким. Поэтому я решил поместить все, не помеченное как загрузочное, в память библиотеки.область, край через скрипт компоновщика.

Возможно, мне просто нужен совет помой скрипт компоновщика, поскольку я не супер уверен, что я там делаю.

Ответы на вопрос(1)

Ваш ответ на вопрос