|
gnu ld - как сделать "дырку" в памяти |
|
|
|
Aug 14 2012, 11:10
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Мне надо расположить прошивку в нижней и верхней части флеша, с пустым местом посередине. Оптимально - чтобы было занято нижние 4к и столько, сколько нужно - сверху. Но в принципе пойдет и указать размер верхнего сегмента руками. Пробовал так: Код MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x0000C000 rom1 (rx) : ORIGIN = 0x08000000, LENGTH = 0x00001000 rom2 (rx) : ORIGIN = 0x08000000 + 0x00040000 - 0x0001000, LENGTH = 0x00001000 }
SECTIONS { .text : { KEEP(*(.vectors)) *(.text .text.*) *(.rodata) } > rom1
.text2 : { *(.text .text.*) *(.rodata) } > rom2 ... } Ругается section `.text' will not fit in region `rom1'. Понятно, что можно руками распихать разные файлы по разным секциям, но нет ли способа сделать это автоматически?
|
|
|
|
|
 |
Ответов
|
Sep 4 2012, 12:39
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(MBR @ Sep 4 2012, 13:48)  Обычно у первичного загрузчика свой протокол, у вторичного - поверх первичного - свой. А зачем второму свой протокол? Цитата Есть таблица вызова функций для работы с железом. В смысле - вторичный загрузчик дергает по этой таблице функции из первичного? Цитата Первичный загрузчик гарантирует доставку пакетов, вторичный - занимается логикой. Ну так получается, что первичный загрузчик должен уже уметь практически все, чтобы запрошить вторичный. Во вторичный особо нечего выносить... Если бы к примеру надо было еще какую-нить дополнительную память писать - датафлеш скажем - ну тогда да, можно было бы вынести в отдельный загрузчик. А так... Цитата Кстати, вторичный загрузчик, вообще можно не держать во флеше. Грузить непосредственно первичным в ram и стартовать оттуда. Решает кучу проблем. А каких? Вроде с флешем только одна проблема - во время записи флеша проц "виснет". При стирании страницы получается ощутимо.
|
|
|
|
|
Sep 5 2012, 05:36
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748

|
Цитата(Непомнящий Евгений @ Sep 4 2012, 16:39)  А зачем второму свой протокол? Как зачем? Первичный - пакет принял, пакет отправил. Проконтролировал отправку контрольными суммами, если нужно, переслал. Что находится в пакете - ему знать не нужно, он лишь гарантированно доставляет данные, устраняя вероятные ошибки в физическом канале связи. Вторичный - парсит пакеты без траспортных заголовков, определяет, какая там логическая команда, какие данные и занимается непосредственно логикой. OSI же. Цитата(Непомнящий Евгений @ Sep 4 2012, 16:39)  В смысле - вторичный загрузчик дергает по этой таблице функции из первичного? Да. Набор этих функций минимален, и, скорее всего, не будет нуждаться в доработке. Цитата(Непомнящий Евгений @ Sep 4 2012, 16:39)  Ну так получается, что первичный загрузчик должен уже уметь практически все, чтобы запрошить вторичный. Во вторичный особо нечего выносить... Если бы к примеру надо было еще какую-нить дополнительную память писать - датафлеш скажем - ну тогда да, можно было бы вынести в отдельный загрузчик. А так... Надо исходить из того, что основные задачи первичного загрузчика: - транспортный канал с хостом - загрузка вторичного загрузчика через канал связи - обеспечить проверку подлинности и запуск вторичного загрузчика. - запустить основную прошивку, если условия запуска загрузчика не выполнены Все это занимает меньше килобайта. Цитата(Непомнящий Евгений @ Sep 4 2012, 16:39)  А каких? Вроде с флешем только одна проблема - во время записи флеша проц "виснет". При стирании страницы получается ощутимо. Главное: не нужно поддерживать на уровне хоста зоопарк версий. Прогрузили вторичный загрузчик, запустили - вот и новый протокол. Можно их делать несколько - для каждой задачи - прошивка основного флеша, прошивка датафлеш. Да хоть сброс настроек.
|
|
|
|
|
Sep 5 2012, 05:49
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(MBR @ Sep 5 2012, 09:36)  Как зачем? Первичный - пакет принял, пакет отправил. Проконтролировал отправку контрольными суммами, если нужно, переслал. Что находится в пакете - ему знать не нужно, он лишь гарантированно доставляет данные, устраняя вероятные ошибки в физическом канале связи. Вторичный - парсит пакеты без траспортных заголовков, определяет, какая там логическая команда, какие данные и занимается непосредственно логикой. OSI же. Если первому загрузчику надо заливать второй, то так не получится - ему придется парсить пакеты и отвечать на них... А заливка второго загрузчика ничем не отличается от заливки самой программы (по крайней мере в моем случае, когда прога живет во встроенном флеше). Так что опять получается, что в первом загрузчике сидит все, а во втором - почти ничего Цитата Надо исходить из того, что основные задачи первичного загрузчика: - транспортный канал с хостом - загрузка вторичного загрузчика через канал связи - обеспечить проверку подлинности и запуск вторичного загрузчика. - запустить основную прошивку, если условия запуска загрузчика не выполнены Все это занимает меньше килобайта. Ну хз насчет килобайта. У меня практически эта функциональность + шифрование + еще кое-что по мелочи едва влезла в 8 к. Компилятор gnu gcc от бывшего кодесоурсери. Писал на С с классами, без всяких наворотов, CMSIS юзал по минимуму. Цитата Главное: не нужно поддерживать на уровне хоста зоопарк версий. Прогрузили вторичный загрузчик, запустили - вот и новый протокол. Можно их делать несколько - для каждой задачи - прошивка основного флеша, прошивка датафлеш. Да хоть сброс настроек. А зачем нам новый протокол? Опять таки, функциональность устройства по железу фиксирована на момент заливки туда основного загрузчика. Т.е. если в основном загрузчике иметь разные варианты компиляции в зависимости от устройства - это с головой хватит.
|
|
|
|
Сообщений в этой теме
Непомнящий Евгений gnu ld - как сделать "дырку" в памяти Aug 14 2012, 11:10 Непомнящий Евгений Судя по вот этому http://sourceware.org/ml/binutil... Aug 14 2012, 14:40 demiurg_spb В Makefile
КодMY_FLASH_ABS_ADDRESS = 0x0F80
LDFLAG... Aug 15 2012, 05:36  aas Цитата(demiurg_spb @ Aug 15 2012, 09:36) ... Aug 16 2012, 06:30   demiurg_spb Цитата(aas @ Aug 16 2012, 10:30) У нас пр... Aug 16 2012, 07:44 Непомнящий Евгений Да, линкер какой-то недоделанный
Вроде и мощный... Aug 15 2012, 06:40 MBR Цитата(Непомнящий Евгений @ Aug 15 2012, 10... Aug 16 2012, 04:35  Сергей Борщ QUOTE (MBR @ Aug 16 2012, 07:35) С линкер... Aug 16 2012, 04:50  Непомнящий Евгений Цитата(MBR @ Aug 16 2012, 08:35) С линкер... Aug 16 2012, 10:20   aas Непомнящий Евгений,
я так понял, с дыркой собирает... Aug 16 2012, 17:49    Непомнящий Евгений Цитата(aas @ Aug 16 2012, 21:49) Ну то ес... Aug 17 2012, 05:15   MBR Цитата(Непомнящий Евгений @ Aug 16 2012, 14... Sep 4 2012, 07:30 Непомнящий Евгений радикальная идея.
Минусы:
1. надо поместиться в т... Sep 4 2012, 07:40 MBR Цитата(Непомнящий Евгений @ Sep 4 2012, 11... Sep 4 2012, 08:17 Непомнящий Евгений Тогда плиз напишите поподробнее.
Вот у меня загруз... Sep 4 2012, 09:28     Непомнящий Евгений Цитата(_Артём_ @ Sep 5 2012, 10:04) Что-т... Sep 5 2012, 06:29      _Артём_ Цитата(Непомнящий Евгений @ Sep 5 2012, 09... Sep 5 2012, 06:34    MBR Цитата(Непомнящий Евгений @ Sep 5 2012, 09... Sep 5 2012, 06:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|