> man operating_systems
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
vv40in
Пятница 15.08.2008 17:06
ID пользователя #1076
Зарегистрирован: Суббота 07.06.2008 12:10
Сообщений: 62
всем доброго здоровья!
я никогда не программировал prom-ы. а оказалось, что тут дело серьезное!

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

вопрос: а как это делается , т.е. как сообще автоматизируется сборка и перенос static-data в ram?
Наверх
Roman I Khimov
Пятница 15.08.2008 22:01

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
Можно как-то переформулировать и сократить количество неизвестных?

В самом общем случае, ручками всё делается. Надо просто переместить всё что надо и переписать таблицу переадресации бинарника в его формате.

Собственно, стартовый код библиотек C тут может быть полезен.


Греби и улыбайся!
Наверх
Сайт
Dron
Понедельник 18.08.2008 10:33


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
2vv40in: Что касается PROM - это типа прошивка чтоль для какой-то железяки? платформа какая?

если x86 - то вероятно тут надо смотреть требования к расширениям BIOS (как они называются то). Там что-то типа того, что в бинарнике должна быть определенная сигнатура, точка входа, и собственно оттуда он запускается. Расположение в памяти вроде бы фиксированное...

2Роман: думаю что стартовый код из библиотеки си тут вряд ли поможет, он всетаки рассчитан на системное окружение...

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
vv40in
Понедельник 18.08.2008 12:25
ID пользователя #1076
Зарегистрирован: Суббота 07.06.2008 12:10
Сообщений: 62
спасибо за ответы!
у меня sparc32.
потОм, вроде, есть понятия LMA - Load memory address = Адрес памяти, куда прошивать эту секцию и VMA - Virtual memory address = Адрес памяти, где эта секция должна быть во время выполнения программы. надо только как-то и где-то указать этот VMA.
а у меня - вот что дал objdump.exe -x:
Sections:
Idx Name Size VMA LMA File off Algn
1 .data 00000b50 0001ad20 0001ad20 0001ada0 2**3
т.е. получается, что VMA==LMA и секцию .data даже нЕкуда перемещать в startup-кодом. ну, переместить-то можно, только никто ее нигде не ждет.
вопрос в том
как и где указать, чтобы VMA был в области RAM ?
заранее спасибо!
Наверх
Roman I Khimov
Понедельник 18.08.2008 12:59

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
Dron написал(а) ...

2Роман: думаю что стартовый код из библиотеки си тут вряд ли поможет, он всетаки рассчитан на системное окружение...

Какое системное окружение? Окромя ядра, нету никакого системного окружения у библиотеки C. И финты ушами она крутит только в путь. И сама себе таблицу переадресации переписывает тоже.

vv40in написал(а) ...

как и где указать, чтобы VMA был в области RAM ?

Количество неизвестных по-прежнему слишком велико. Давай по-порядку.

1) Тебе нужно прошить программу в PROM, чтобы она оттуда работала.
2) PROM отображён в память, так?
3) Программа собирается в ELF?
4) Что умеет делать с ELF загрузчик?
5) ELF состоит из нескольких секций.
6) Есть возможность прямого исполнения программы из PROM?
7) Сборка бинарника с прямым размещением .data в памяти невозможна, поскольку
а) Прошивка PROM есть прошивка PROM и памяти она не касается?
б) Программа должна легко переживать ресет?
Стало быть, .data будет зашита в PROM, но её надо _переместить_ в память при старте программы из PROM, поскольку она должна быть записываема.

Вот о чём речь и идёт. Копируешь .data в память на необходимый адрес, правишь таблицы переадресаций и готов.


Греби и улыбайся!
Наверх
Сайт
vv40in
Понедельник 18.08.2008 14:12
ID пользователя #1076
Зарегистрирован: Суббота 07.06.2008 12:10
Сообщений: 62

УРА!!! заработало!!!

вот что дал мне objdump.exe -x:

Idx Name Size VMA LMA File off Algn
1 .data 00000120 40000000 00018700 000187a0 2**3

я сделал в ld-скрипте : > ram AT > rom (см ниже):

.data :
{
....
} > ram AT > rom

всем спасиба!!!
теперь только осталось проверить - будет ли всё это работать? а это еще не скоро, т.к. железо что-то еще далеко не на подходе
так, что вопросы еще будут

еще раз всем спасиба!!!
Наверх
Dron
Понедельник 18.08.2008 14:33


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
2vv40in: интересные какие опции... знаю что можно было руками указать смещения для текста и даты в бинарнике...

2Роман: вряд ли стандартный сишный стартовый код занимается релокациями в памяти... скорее всего это делает само ядро. Хотя конечно по секциям и по таблицам имен он шуршит изрядно, во всяком случае без этого не обходится инициализация статических объектов C++...

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
Roman I Khimov
Понедельник 18.08.2008 16:15

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
Dron, я этот код в uClibc ломиком обрабатывал, сама себе библиотека перенастраивает адреса только так.


Греби и улыбайся!
Наверх
Сайт
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.