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

 
 
> Сохранение структуры в самом конце флэша
Sirko
сообщение Apr 16 2011, 13:43
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Есть структура

main.c:
Код
#define NAME "Name"
#define VERSION 1

typedef struct{
    const u08 name[sizeof(NAME)];
    const u08 maxLenRespond;
    const u16 version;
    const u16 size;
}Version;

static Version version __attribute__((section(".StructVersion"))) = {
    NAME,
    sizeof(Version),
    VERSION,
    sizeof(Version)
};


makefile:
Код
STRUCT_ADDRESS = 0x700
LDFLAGS += -Wl,--section-start=.StructVersion=$(STRUCT_ADDRESS)

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

Возможно, есть некий механизм, вроде этого:
Код
#define STRUCT_ADDRESS (SizeMega128 - Sizeof(struct))
или
#define STRUCT_ADDRESS (SizeMega128 - Sizeof(struct) - MaxSizeBootMega128))



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sirko
сообщение Apr 17 2011, 09:10
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Мне процесс "заливки" видится так:
Бутлоадер - это отдельная универсальная прошивка, но которая при этом может отражать название девайса, его серийный номер, может быть какую-нибудь дату, одним словом, некоторые параметры, которые нежелательно утратить во время неудачного обновления основной программы. Правда, серийное производство меня мало волнует, но почему бы и не пофантазировать.
Цитата
А правильная страница для хранения такой структуры - это не последняя страница флеш, а страница, которая лежит непосредственно перед BOOT секцией
А вот, допустим, контрольная сумма, кол-во раз перепрошивания, возможно дата последней прошивки - такие вещи действительно необходимо хранить перед загрузчиком. Поэтому в первом моем посте один из фигурировавших параметров был MaxSizeBootMega128, к примеру. Но я так прикинул, что размер бутлоадера можно отразить в его версии, отдав под это дело пару бит. Но опять-таки, структура, а точнее ее последние поля должны быть одинаковы во всех версиях всех бутлоадеров и располагаться в самом финале флэша, т.е. относительно константы FLASHEND.
Цитата
никак не зашифровав, либо просто пока не думали

И думал, и обязательно реализую. Просто структура, о которой идет речь, должна быть доступна снаружи как при помощи бутлоадера, так и при помощи основной программы. Стало быть, пароль будет храниться либо вне пределов этой структуры, либо, что вероятнее всего, он будет зависеть от версии бутлоадера, или типа девайса, либо еще чего-нибудь. Но это к данному топику отношения не имеет.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 19 2011, 13:23
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Sirko @ Apr 17 2011, 12:10) *
может отражать название девайса, его серийный номер, может быть какую-нибудь дату, одним словом, некоторые параметры, которые нежелательно утратить во время неудачного обновления основной программы.

Достаточно только идентификатора устройства и версии bootloader'a
Для примера:
KIT-KP <-- эта строка определяет класс устройства
B1.120.5 <-- эта строка определяет тип программы - бутлоадер "B", HW ревизию платы - 1, объем флеш памяти МК доступной для App в KB - 120, и програмную реализацию bootloader'а - 5. Последняя уточняет необходимый алгоритм шифрования и ключ.

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

Цитата
А вот, допустим, контрольная сумма, кол-во раз перепрошивания, возможно дата последней прошивки - такие вещи действительно необходимо хранить перед загрузчиком.

Несомненно.

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

Про информацию бутлоадера все известно из тех двух строк приведенных вышу - их достаточно чтобы полностью идентифицировать устройство, и определить какие app в это устройство можно грузить, какие - нет. Теперь надо подумать о информации о самой прошивке - ее название, ее версия, совместимый бутлоадер (для примера выше - строка "KIT-KP", можно и с уточнением HW и флеш памяти и ключа шифрования - "1.120.5"), CRC, коментарий, дата создания и т.д. - вот именно эту информацию и надо хранить по фиксированному адресу флеш, перед BOOT секцией.

Цитата
пароль будет храниться либо вне пределов этой структуры, либо, что вероятнее всего, он будет зависеть от версии бутлоадера, или типа девайса, либо еще чего-нибудь. Но это к данному топику отношения не имеет.
Ключ (пароль) - должен быть намертво вшит в код бутлоадера обычной константой и закрыт фузами от посторонних глаз.
Go to the top of the page
 
+Quote Post



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

 


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


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