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

 
 
> gnu ld - как сделать "дырку" в памяти
Непомнящий Евген...
сообщение Aug 14 2012, 11:10
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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'.

Понятно, что можно руками распихать разные файлы по разным секциям, но нет ли способа сделать это автоматически?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MBR
сообщение Sep 4 2012, 09:48
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Ну да, вполне стандартные задачи. Обычно у первичного загрузчика свой протокол, у вторичного - поверх первичного - свой. Есть таблица вызова функций для работы с железом. Первичный загрузчик гарантирует доставку пакетов, вторичный - занимается логикой.

Кстати, вторичный загрузчик, вообще можно не держать во флеше. Грузить непосредственно первичным в ram и стартовать оттуда. Решает кучу проблем.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 4 2012, 12:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(MBR @ Sep 4 2012, 13:48) *
Обычно у первичного загрузчика свой протокол, у вторичного - поверх первичного - свой.

А зачем второму свой протокол?

Цитата
Есть таблица вызова функций для работы с железом.

В смысле - вторичный загрузчик дергает по этой таблице функции из первичного?

Цитата
Первичный загрузчик гарантирует доставку пакетов, вторичный - занимается логикой.

Ну так получается, что первичный загрузчик должен уже уметь практически все, чтобы запрошить вторичный. Во вторичный особо нечего выносить... Если бы к примеру надо было еще какую-нить дополнительную память писать - датафлеш скажем - ну тогда да, можно было бы вынести в отдельный загрузчик. А так...

Цитата
Кстати, вторичный загрузчик, вообще можно не держать во флеше. Грузить непосредственно первичным в ram и стартовать оттуда. Решает кучу проблем.

А каких? Вроде с флешем только одна проблема - во время записи флеша проц "виснет". При стирании страницы получается ощутимо.

Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 5 2012, 05:36
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 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) *
А каких? Вроде с флешем только одна проблема - во время записи флеша проц "виснет". При стирании страницы получается ощутимо.

Главное: не нужно поддерживать на уровне хоста зоопарк версий. Прогрузили вторичный загрузчик, запустили - вот и новый протокол. Можно их делать несколько - для каждой задачи - прошивка основного флеша, прошивка датафлеш. Да хоть сброс настроек.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 5 2012, 05:49
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(MBR @ Sep 5 2012, 09:36) *
Как зачем? Первичный - пакет принял, пакет отправил. Проконтролировал отправку контрольными суммами, если нужно, переслал. Что находится в пакете - ему знать не нужно, он лишь гарантированно доставляет данные, устраняя вероятные ошибки в физическом канале связи. Вторичный - парсит пакеты без траспортных заголовков, определяет, какая там логическая команда, какие данные и занимается непосредственно логикой. OSI же.

Если первому загрузчику надо заливать второй, то так не получится - ему придется парсить пакеты и отвечать на них... А заливка второго загрузчика ничем не отличается от заливки самой программы (по крайней мере в моем случае, когда прога живет во встроенном флеше). Так что опять получается, что в первом загрузчике сидит все, а во втором - почти ничего

Цитата
Надо исходить из того, что основные задачи первичного загрузчика:
- транспортный канал с хостом
- загрузка вторичного загрузчика через канал связи
- обеспечить проверку подлинности и запуск вторичного загрузчика.
- запустить основную прошивку, если условия запуска загрузчика не выполнены
Все это занимает меньше килобайта.

Ну хз насчет килобайта. У меня практически эта функциональность + шифрование + еще кое-что по мелочи едва влезла в 8 к. Компилятор gnu gcc от бывшего кодесоурсери. Писал на С с классами, без всяких наворотов, CMSIS юзал по минимуму.


Цитата
Главное: не нужно поддерживать на уровне хоста зоопарк версий. Прогрузили вторичный загрузчик, запустили - вот и новый протокол. Можно их делать несколько - для каждой задачи - прошивка основного флеша, прошивка датафлеш. Да хоть сброс настроек.

А зачем нам новый протокол? Опять таки, функциональность устройства по железу фиксирована на момент заливки туда основного загрузчика. Т.е. если в основном загрузчике иметь разные варианты компиляции в зависимости от устройства - это с головой хватит.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Непомнящий Евгений   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, 08...   Sep 5 2012, 06:04
|- - Непомнящий Евгений   Цитата(_Артём_ @ 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:20
Рейтинг@Mail.ru


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