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

 
 
> Bootloader или загрузчик, расскажите по подробней...
Anatrulij
сообщение Apr 24 2009, 10:06
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Расскажите какие функции выполняет встроенный bootloader и как написать свой(и где он будет находиться). (ядро LPC2468/78)

З.Ы. когда на форумах вспоминуют про Bootloader и про загрузчик - то имеют ввиду одно и тоже?

Сообщение отредактировал Anatrulij - Apr 24 2009, 10:09
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jul 1 2010, 09:40
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alvy @ Jul 1 2010, 06:21) *
Можно с этого места поподробнее? rolleyes.gif Т.е. саму идею понял, но как это все должно выглядеть - не совсем

для gcc примерно так:
Код
boot_app_cross_table.h:
struct boot_app_cross_table
{
     uint32_t (*Serial_no)();
     void (*AES_init)(uint32_t *init_vector);
     void (*AES_decode)(uint32_t *block);
     bool (*TCP_send)(void const * from, size_t size);
}extern Bootloader;

//=========
bootloader.cpp:

extern uint32_t Serial_no();
void AES_init(uint32_t * init_vector)
{
     AES.init(init_vector);
}

void AES_decode(uint32_t * block)
{
     AES.decode(block);
}
extern void TCP_send(void const * from, size_t size);

__attribute__((section, ".boot_app_cross"))
Bootloader =
{
    Serial_no,
    AES_init,
    AES_decode,
    TCP_send,
};

//=========
bootloader.ld:
MEMORY
{
  .....
  CROSS               (rx)  : ORIGIN = 0x00100040, LENGTH = 4 * 4
  ....
}

SECTIONS
{
  .....
  .cross :
  {
    KEEP(*(.boot_app_cross*))
  } > CROSS

//=========
application.cpp:
#include "boot_app_cross_table"
void Test()
{
   printf("Serial number: %d", Bootloader.Serial_no());
}

//=========
makefile:
LDFLAGS += -Wl,--defsym,Bootloader=0x00100040


Цитата(Yaumen @ Jul 1 2010, 08:30) *
Вот тут немного поподробнее. С загрузчиком все понятно, у него свой main(), который может располагаться где угодно в пределах первых 2-х секторов, а переход на main() действительно будет по 0-му адресу.
До main() еще дойти надо. До вызова main() исполняется startup-код, который готовит переменные, настраивает стеки и кое-какую периферию, вызывает конструкторы глобальных объектов и уже после всего этого вызывает main(). А сам стартап-код вызывается из вектора исключения RESET.
Цитата(Yaumen @ Jul 1 2010, 08:30) *
Теперь о пользовательской программе. У него также main может располагаться в любом месте оставшейся памяти и об адресе этого main() загрузчик естественно ничего не знает.
У приложения точно так-же есть своя таблица векторов. В которой вектор RESET указывает на стартап-код. А стартап-код вызывает main(). Загрузчик копирует эту таблицу в начало ОЗУ и делает remap. Таблица оказывается отражена на адрес 0. По адресу 0 оказывается команда перехода на стартап-код приложения. Осталось перейти на адрес 0.
Цитата(Yaumen @ Jul 1 2010, 08:30) *
Есть еще один минус у двух проектов. Я планирую использовать AES шифрование, которое жестко будет зашито в загрузчик, а значит все пользовательские программы необходимо шифровать одним и тем же ключем, это же касается и сигнатуры. Мне кажется это неправильно!!!
Почему? А если все программы будут с разными ключами - как вы их загрузите в одно устройство?
Цитата(Yaumen @ Jul 1 2010, 08:30) *
разработан протокол обмена, позволяющий передавать файлы больших размеров, склеивать их на приемном устройстве, вести одновременный прием от нескольких устройств, ну и т.д. Это достаточно большой кусок куда, который не хотелось бы дублировать
Нужна ли вся эта функциональность загрузчику? Может ему достаточно сильно урезанной версии? Или может у приложения есть возможность сохранить образ прошивки в какой-то внешней памяти, а загрузчик тогда будет брать шифрованную прошивку из этой памяти? А как аварийный вариант и для первоначальной загрузки предусмотреть что-нибудь типа uart?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Jul 1 2010, 10:56
Сообщение #3


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

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Цитата(Сергей Борщ @ Jul 1 2010, 12:40) *
Почему? А если все программы будут с разными ключами - как вы их загрузите в одно устройство?


Имелось в виду, что создавая загрузчик как отдельный проект я его буду зашивать во все свои устройства, а это могут быть совершенно разные устройства и модули

Цитата
Нужна ли вся эта функциональность загрузчику? Может ему достаточно сильно урезанной версии? Или может у приложения есть возможность сохранить образ прошивки в какой-то внешней памяти, а загрузчик тогда будет брать шифрованную прошивку из этой памяти? А как аварийный вариант и для первоначальной загрузки предусмотреть что-нибудь типа uart?

Если бы в микроконтроллерах RAMа было бы больше ROMa, то можно было бы использовать RAM как временный буфер, но увы это не так. А случись что во время программирования, то и вообще этот механизм накрывается медным тазом.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 1 2010, 11:35
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Yaumen @ Jul 1 2010, 13:56) *
Имелось в виду, что создавая загрузчик как отдельный проект я его буду зашивать во все свои устройства, а это могут быть совершенно разные устройства и модули
Так что мешает при компиляции под конкретный модуль подставлять заголовочный файл с ключами шифрования для этого конкретного устройства. Или просто держать копию исходников загрузчика в папке с проектом конкретного модуля (у меня так).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Jul 1 2010, 12:20
Сообщение #5


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

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Цитата(Сергей Борщ @ Jul 1 2010, 14:35) *
Так что мешает при компиляции под конкретный модуль подставлять заголовочный файл с ключами шифрования для этого конкретного устройства. Или просто держать копию исходников загрузчика в папке с проектом конкретного модуля (у меня так).


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

Сообщений в этой теме
- Anatrulij   Bootloader или загрузчик   Apr 24 2009, 10:06
- - HARMHARM   Цитата(Anatrulij @ Apr 24 2009, 13:06) Ра...   Apr 24 2009, 10:14
- - Anatrulij   В данных ссылках я не увидел где конкретно находит...   Apr 24 2009, 14:17
|- - HARMHARM   Цитата(Anatrulij @ Apr 24 2009, 17:17) В ...   Apr 24 2009, 14:52
|- - Anatrulij   Я под системным загрузчиком имел в виду загрузчик ...   Apr 24 2009, 15:31
|- - Сергей Борщ   Цитата(Anatrulij @ Apr 24 2009, 18:31) Ес...   Apr 24 2009, 21:19
- - Anatrulij   А по какому адресу он расположен, и какие его функ...   Apr 24 2009, 21:26
|- - Сергей Борщ   Цитата(Anatrulij @ Apr 25 2009, 00:26) А ...   Apr 24 2009, 22:29
- - Anatrulij   На этом этапе мне пока все понятно. Как я понял за...   Apr 28 2009, 11:02
|- - Сергей Борщ   Цитата(Anatrulij @ Apr 28 2009, 14:02) Ко...   Apr 28 2009, 11:26
- - Anatrulij   Из загрузчика я считаю контрольную сумму записанно...   Apr 28 2009, 11:42
|- - HARMHARM   Цитата(Anatrulij @ Apr 28 2009, 14:42) Из...   Apr 28 2009, 12:11
- - Anatrulij   HARMHARM >> Да, конечно. Удобно положить кон...   Apr 28 2009, 12:49
|- - Сергей Борщ   Цитата(Anatrulij @ Apr 28 2009, 15:49) А ...   Apr 28 2009, 16:48
- - Anatrulij   А где в стартапе указано адрес начала программы, а...   Apr 29 2009, 13:07
|- - HARMHARM   Цитата(Anatrulij @ Apr 29 2009, 16:07) А ...   Apr 29 2009, 13:21
- - Anatrulij   А линкер это тоже отдельный фалик прикрученный к п...   Apr 29 2009, 13:57
|- - HARMHARM   Цитата(Anatrulij @ Apr 29 2009, 16:57) А ...   Apr 29 2009, 14:08
- - Anatrulij   я пишу на Keil   Apr 29 2009, 14:15
|- - HARMHARM   Цитата(Anatrulij @ Apr 29 2009, 17:15) я ...   Apr 29 2009, 14:18
|- - defunct   Цитата(Anatrulij @ Apr 29 2009, 17:15) я ...   Apr 29 2009, 14:25
- - Anatrulij   defunct>>для RVDS компилятора - см scatter f...   Apr 30 2009, 05:41
- - sergeeff   А Reset_Addr - это метка первой команды вашего boo...   Apr 30 2009, 05:55
|- - Anatrulij   Цитата(sergeeff @ Apr 30 2009, 08:55) Воо...   Apr 30 2009, 06:01
- - Anatrulij   Что-то я не могу найти в Кейле, где указывается с ...   Apr 30 2009, 09:24
|- - HARMHARM   Цитата(Anatrulij @ Apr 30 2009, 12:24) Чт...   Apr 30 2009, 11:36
- - Anatrulij   А где в scatter file указан адрес начала программи   Apr 30 2009, 11:42
|- - HARMHARM   Цитата(Anatrulij @ Apr 30 2009, 14:42) А ...   Apr 30 2009, 14:12
- - Anatrulij   А как с бутлоадера передать управление на загружен...   Apr 30 2009, 14:33
|- - HARMHARM   Цитата(Anatrulij @ Apr 30 2009, 17:33) А ...   Apr 30 2009, 18:49
- - Anatrulij   А для Keil?   May 1 2009, 07:32
|- - sergeeff   Цитата(Anatrulij @ May 1 2009, 10:32) А д...   May 1 2009, 10:15
- - Anatrulij   После окончания работы функции, куда передается уп...   May 1 2009, 10:50
|- - sergeeff   Цитата(Anatrulij @ May 1 2009, 13:50) Пос...   May 1 2009, 11:11
|- - Anatrulij   Цитата(sergeeff @ May 1 2009, 14:11) Так ...   May 2 2009, 11:25
|- - HARMHARM   Цитата(Anatrulij @ May 2 2009, 14:25) я п...   May 2 2009, 11:53
|- - Anatrulij   Цитата(HARMHARM @ May 2 2009, 14:53) Есть...   May 2 2009, 12:10
|- - HARMHARM   Цитата(Anatrulij @ May 2 2009, 15:10) Мож...   May 3 2009, 19:27
- - Anatrulij   Спасибо за ссылку. Сложновато пока для меня. может...   May 4 2009, 11:38
|- - zltigo   Цитата(Anatrulij @ May 4 2009, 14:38) или...   May 4 2009, 11:48
|- - Anatrulij   Цитата(zltigo @ May 4 2009, 14:48) Значит...   May 4 2009, 12:08
- - sergeeff   Никак не могу понять, что же вам не понятно? Сами ...   May 7 2009, 08:53
|- - Anatrulij   Цитата(sergeeff @ May 7 2009, 11:53) Ника...   May 7 2009, 11:38
|- - Сергей Борщ   Цитата(Anatrulij @ May 7 2009, 14:38) я к...   May 8 2009, 07:34
|- - Anatrulij   Был отвлечен другим делом, теперь можно вернуться ...   Jun 12 2009, 07:32
- - sergeeff   Для начала, считайте, что у вас пока одна единстве...   May 7 2009, 18:01
|- - Anatrulij   Цитата(sergeeff @ May 7 2009, 21:01) Для ...   May 7 2009, 19:34
- - Anatrulij   В IAP указано что можно писать до 4kB, а как быть ...   Jun 12 2009, 08:35
|- - SasaVitebsk   Цитата(Anatrulij @ Jun 12 2009, 11:35) В ...   Jun 12 2009, 10:54
|- - Anatrulij   Цитата(SasaVitebsk @ Jun 12 2009, 13:54) ...   Jun 12 2009, 11:08
|- - HARMHARM   Цитата(Anatrulij @ Jun 12 2009, 14:08) Из...   Jun 13 2009, 06:08
|- - Anatrulij   Цитата(HARMHARM @ Jun 13 2009, 09:08) Сек...   Jun 13 2009, 11:26
|- - HARMHARM   Цитата(Anatrulij @ Jun 13 2009, 14:26) Ес...   Jun 13 2009, 12:08
|- - Anatrulij   Цитата(HARMHARM @ Jun 13 2009, 15:08) Нет...   Jun 13 2009, 13:28
- - Anatrulij   Во флеш хочу писать блоками по 4кБ, для этого мне ...   Jun 17 2009, 07:42
|- - HARMHARM   Цитата(Anatrulij @ Jun 17 2009, 10:42) Во...   Jun 17 2009, 08:37
||- - Anatrulij   Цитата(HARMHARM @ Jun 17 2009, 11:37) Име...   Jun 17 2009, 08:40
|- - zltigo   Цитата(Anatrulij @ Jun 17 2009, 10:42) Ка...   Jun 17 2009, 14:50
|- - Anatrulij   Цитата(zltigo @ Jun 17 2009, 17:50) Не пи...   Jun 17 2009, 19:01
|- - zltigo   Цитата(Anatrulij @ Jun 17 2009, 22:01) Я ...   Jun 17 2009, 21:22
|- - Anatrulij   Цитата(zltigo @ Jun 18 2009, 00:22) Зачем...   Jun 18 2009, 05:47
|- - HARMHARM   О, да!   Jun 18 2009, 13:38
- - Anatrulij   Ложу я прошивку с помощью бутлоадера(сам он находи...   Jun 23 2009, 12:51
|- - Anatrulij   Цитата(Anatrulij @ Jun 23 2009, 15:51) мо...   Jun 24 2009, 06:19
- - Nixon   Вот только перейдете вы по этому адресу в user-mod...   Jun 24 2009, 07:29
|- - Anatrulij   Цитата(Nixon @ Jun 24 2009, 10:29) Вот то...   Jun 24 2009, 07:53
- - Nixon   Что именно тут комментировать? Вы вызываете SWI пр...   Jun 24 2009, 09:13
|- - Anatrulij   Цитата(Nixon @ Jun 24 2009, 12:13) Что им...   Jun 24 2009, 10:12
- - Yaumen   Для организации загрузки программы написал несколь...   Jun 30 2010, 14:32
|- - Сергей Борщ   Цитата(Yaumen @ Jun 30 2010, 17:32) Была ...   Jun 30 2010, 15:52
|- - alvy   Цитата(Сергей Борщ @ Jun 30 2010, 22:52) ...   Jul 1 2010, 03:21
|- - Yaumen   Цитата(Сергей Борщ @ Jun 30 2010, 18:52) ...   Jul 1 2010, 05:30
- - MrYuran   Цитата(Yaumen @ Jul 1 2010, 16:20) Т.е., ...   Jul 1 2010, 12:34
- - Сергей Борщ   Цитата(Yaumen @ Jul 1 2010, 15:20) Т.е., ...   Jul 1 2010, 14:20


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

 


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


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