реклама на сайте
подробности

 
 
> сборка бонарника для PROM, сборка бонарника для PROM
vv40in
сообщение Aug 15 2008, 15:05
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 4-06-08
Пользователь №: 38 047



всем доброго здоровья!
я никогда не программировал prom-ы. а оказалось, что тут дело серьезное! help.gif

у меня в исходниках на С есть некий статический буфер (неконстантный).
при сборке с использованием прилагающимся к компилятору ld-скриптом (если оставить в нём ram) получается бинарник (после objcopy) длиной аж 1Гб 07.gif ! начале, как положено - код, а статические даннные помещены в конец - в ram.
я выкинул ram из ld-скрипта. получился бинарник соответствующего размера. только, боюсь, что придется повозиться с пересылкой static-data в ram (если вообще будет работать 05.gif ).
и еще. у меня и нет никакого start-up кода и никакими библиотеками не пользуюсь. может дело еще в этом ?

вопрос: а как это делается , т.е. как сообще автоматизируется сборка и перенос static-data в ram?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amw
сообщение Aug 15 2008, 17:42
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(vv40in @ Aug 15 2008, 18:05) *
всем доброго здоровья!

И вам!
Цитата
я никогда не программировал prom-ы. а оказалось, что тут дело серьезное! help.gif

Чтобы понять это нужно обладать способностью к телепатии. К сожалению я ею не владею smile.gif.
Итак, попробую догадаться.
Вы имеете пример (для какого процессора?), без использования ОС, на С, предназначенный для загрузки в ОЗУ. И хотите перекомпилировать его для флеш и прошить.
Я угадал?
Цитата
у меня в исходниках на С есть некий статический буфер (неконстантный).
при сборке с использованием прилагающимся к компилятору ld-скриптом (если оставить в нём ram) получается бинарник (после objcopy) длиной аж 1Гб 07.gif ! начале, как положено - код, а статические даннные помещены в конец - в ram.
я выкинул ram из ld-скрипта. получился бинарник соответствующего размера. только, боюсь, что придется повозиться с пересылкой static-data в ram (если вообще будет работать 05.gif ).
и еще. у меня и нет никакого start-up кода и никакими библиотеками не пользуюсь. может дело еще в этом ?

вопрос: а как это делается , т.е. как сообще автоматизируется сборка и перенос static-data в ram?

Потому как в Вашем вопросе мало конкретной информации придется начать издалека.
1. Компилятор (кстати какой? предполагаю gcc) из каждого *.c файла сделает *.o файл.
2. Линкер (предполагаю ld) возмет эти *.o файлы и, в соответствии со скриптом, разместит их содержимое в памяти. Получим *.elf файл.
3. objcopy возмет этот *.elf файл, и перепишет секции .text (собственно код) и .data (инициализируемые переменные) в другой файл - *.bin. Этот файл является копией всего адресного пространства процессора. Если у Вас ARM то это 4G. Естественно, если Ваша программа "умещается" в 1G то размер будет 1G.
Естественно Вам это не подходит smile.gif.
В таком случае нужно
1. Переписать скрипт линкера так, чтобы секция .data в выходном бинарике размещалась сразу за секцией .text.
2. Написать в стартап файле - это асм - кусочек, который при каждом включении питания перенесет секцию .data из флеш в ОЗУ, на то место где ее ожидает программа.
Если у Вас ARM то поищите в этой ветке и соседней про ARM, такие вопросы уже встречались и там можно найти примеры.
Пока будете тренироваться, воспользуйтесь objdump, readelf для просмотра заголовков секций. Там указаны LMA и VMA.
LMA - Load memory address Адрес памяти, куда прошивать эту секцию
VMA - Virtual memory address. Адрес памяти, где эта секция должнабыть во время выполнения программы.
Перенос данных из LMA в VMA - это задача стартап кода.
Еще полезно смотреть дизассемблер objdump -SD prg.elf > prg.dump


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 15:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016