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

 
 
> Самозагрузчик
inventor
сообщение Apr 7 2016, 06:34
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Подскажите как правильно сделать вот что:

имеется какой то прибор с SD картой на проце STM32
я хочу сделать для пользователя возможность самому менять прошивку.
делал такие вещи для других процов,
с ST возникли некоторые вопросы.

предположим - нужно поменять прошивку прибора,
саму прошивку - бинарник заливаю в корень SD карты.
при включении питания маленькая программа, loader смотрит:
есть ли файл с определенным именем на SD и если есть, то
записывает его в определенный раздел внутренней flash памяти
далее после того как успешно записал бинарник на flash,
стирает его на SD карте. - передает ему управление.
если файла bin нет - то loader просто передает управление программе.

саму программу Loader я хочу разместить
по адресу Flash 0x08000000
а рабочая прошивка, предположим, будет работать с адреса 0x08001000
после того, как бинарник записан по адресу 0x08001000
как мне LOADER - ом передать ему управление?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KnightIgor
сообщение Apr 7 2016, 13:54
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(inventor @ Apr 7 2016, 07:34) *
имеется какой то прибор с SD картой на проце STM32
я хочу сделать для пользователя возможность самому менять прошивку.

У меня есть такой загрузчик. Ему требуется примерно 12K флэша. Я зарезервировал 16К, то есть, приложение компилируется так, чтобы начинаться с 16К.
Файловая система на FatFS, с которой выброшено все, кроме чтения (файл прошивки я не удаляю). Есть варианты для SPI и SDIO доступа к карте.
Если при старте карта и файл с определенным именем на ней обнаружены, загрузчик считывает версию образа и сравнивает с текущей версией прошивки. Прошивка для этого содержит соответствующие поля, которые как данные расположены непосредственно за таблицей векторов. Загрузчик, конечно, знает, что и как искать. Если на карте новая версия, производится запись образа во флэш и его запуск. Во всех остальных случаях загрузчик запускает имеющуюся прошивку сразу.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 7 2016, 21:06
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(KnightIgor @ Apr 7 2016, 16:54) *
У меня есть такой загрузчик...


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

благо флэша - как у дурака махорки sm.gif

как то так
(круглый)

Сообщение отредактировал kolobok0 - Apr 7 2016, 21:07
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Apr 8 2016, 05:37
Сообщение #4


Знающий
****

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



Цитата(kolobok0 @ Apr 8 2016, 00:06) *
в своё время сделал немного по другому.
прошивка сама себя меняет. есть понятие версия фулл, инкрементальная, модуля. каждый модуль может существовать во флэше несколько экземпляров.
загрузчик подымает последнюю устойчивую версию и все модули которые в него входят. собирает статистику, и содержит маленький проверенный код
записи во флэш. каналы апдэйтов - куча = микроСД, изернет, модбас, вайфай.

благо флэша - как у дурака махорки sm.gif


Гм, т.е. вы сделали dll на МК. Главный вопрос - зачем cranky.gif ?

И еще кучка вопросов по реализации, интересно sm.gif
* как тестировали? По идее надо проверять каждую версию с каждым набором версий других модулей
* как линковали? Каждый модуль - как отдельный проект?
* у вас код запускался из flash? Тогда как разруливались несколько экземпляров модулей (адреса же фиксированные на этапе линковки)? Или вы копировали в ОЗУ? Или не применяли команды, которые работают с фиксированными адресами, только по смещению?
* где жила системная библиотека (общая для всех модулей)?
* что происходит с глобальными и статическими переменными? У каждого модуля фиксированный регион RAM? Или все хранится в куче?
* межмодульное взаимодействие как было организовано? Т.е. как позвать функцию из другого модуля?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 8 2016, 14:07
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Непомнящий Евгений @ Apr 8 2016, 08:37) *
...* как тестировали? ..Каждый модуль - как отдельный проект?...у вас код запускался из flash?
...Или не применяли команды, которые работают с фиксированными адресами, только по смещению?
* где жила системная библиотека (общая для всех модулей)?
...Или все хранится в куче?
... как позвать функцию из другого модуля?


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

зачем = повышенная отказоустойчивость. и минимум требований к фазе дистанционной апгрэйта кода.

(круглый)



Go to the top of the page
 
+Quote Post
Kabdim
сообщение Apr 12 2016, 13:11
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(kolobok0 @ Apr 8 2016, 17:07) *
- загрузчик делает позднее связывание модулей. т.е. есть понятия импортируемых и экспортируемых функций, необходимых аппаратных прерываний,
версии модуля и запрос версии.

А вот это самодельное или от линукс-арм прикрутили?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- inventor   Самозагрузчик   Apr 7 2016, 06:34
- - KRS   Цитата(inventor @ Apr 7 2016, 09:34) посл...   Apr 7 2016, 06:51
|- - inventor   Цитата(KRS @ Apr 7 2016, 10:51) Самый луч...   Apr 7 2016, 07:05
|- - Непомнящий Евгений   Цитата(inventor @ Apr 7 2016, 10:05) у ме...   Apr 7 2016, 07:11
|- - inventor   то есть я делаю в файле линкера для прошивки испра...   Apr 7 2016, 07:46
|- - KRS   Цитата(inventor @ Apr 7 2016, 10:46) верн...   Apr 7 2016, 08:09
- - jcxz   Цитата(inventor @ Apr 7 2016, 12:34) саму...   Apr 7 2016, 08:07
|- - inventor   Цитата(jcxz @ Apr 7 2016, 11:07) В 0x1000...   Apr 7 2016, 10:13
|- - x893   Цитата(KnightIgor @ Apr 7 2016, 16:54) У ...   Apr 7 2016, 20:01
||- - KnightIgor   Цитата(x893 @ Apr 7 2016, 21:01) Вот бы е...   Apr 8 2016, 09:26
|- - kolobok0   Цитата(Kabdim @ Apr 12 2016, 16:11) А вот...   Apr 12 2016, 14:26
- - romas2010   Цитата(inventor @ Apr 7 2016, 09:34) Подс...   Apr 7 2016, 15:07
- - bugdesigner   Вот мой скелет бутлоадераю Выделено под него 16К ф...   Apr 8 2016, 09:55
- - inventor   Сделал, но чего то не получается запустить основну...   Apr 12 2016, 12:44
|- - scifi   Цитата(inventor @ Apr 12 2016, 15:44) Я в...   Apr 12 2016, 12:52
||- - inventor   Цитата(scifi @ Apr 12 2016, 15:52) А попо...   Apr 12 2016, 13:12
||- - scifi   Цитата(inventor @ Apr 12 2016, 16:12) ток...   Apr 12 2016, 13:37
|- - KRS   Цитата(inventor @ Apr 12 2016, 15:44) Код...   Apr 12 2016, 14:26
|- - aaarrr   Цитата(KRS @ Apr 12 2016, 17:26) Во первы...   Apr 12 2016, 14:49
|- - scifi   Цитата(aaarrr @ Apr 12 2016, 17:49) Где? ...   Apr 12 2016, 15:03
||- - zltigo   QUOTE (scifi @ Apr 12 2016, 18:03) Ассемб...   Apr 13 2016, 08:03
||- - scifi   Цитата(zltigo @ Apr 13 2016, 11:03) Ассем...   Apr 13 2016, 08:10
||- - KnightIgor   Цитата(scifi @ Apr 13 2016, 09:10) Я ж не...   Apr 13 2016, 09:00
||- - scifi   Цитата(KnightIgor @ Apr 13 2016, 12:00) О...   Apr 13 2016, 09:41
||- - zltigo   QUOTE (scifi @ Apr 13 2016, 12:41) А, ну ...   Apr 13 2016, 09:47
||- - scifi   Цитата(zltigo @ Apr 13 2016, 12:47) В дан...   Apr 13 2016, 09:50
||- - zltigo   QUOTE (scifi @ Apr 13 2016, 12:50) Вы сво...   Apr 13 2016, 10:03
|||- - scifi   Цитата(zltigo @ Apr 13 2016, 13:03) Абсол...   Apr 13 2016, 10:14
||- - Сергей Борщ   QUOTE (scifi @ Apr 13 2016, 11:50) Все уж...   Apr 13 2016, 11:14
|- - KRS   Цитата(aaarrr @ Apr 12 2016, 17:49) По-мо...   Apr 12 2016, 15:41
|- - aaarrr   Цитата(KRS @ Apr 12 2016, 18:41) Нет - за...   Apr 12 2016, 16:49
|- - scifi   Цитата(aaarrr @ Apr 12 2016, 19:49) А я -...   Apr 13 2016, 06:59
- - inventor   Сделал самозагрузчик, забыл вызвать функцию NVIC_...   Apr 13 2016, 06:49
|- - KnightIgor   Цитата(inventor @ Apr 13 2016, 07:49) вот...   Apr 13 2016, 07:54
- - ViKo   Коль все предъявили, тогда и я...: Код/* Адрес ...   Apr 13 2016, 10:21
|- - scifi   Цитата(ViKo @ Apr 13 2016, 13:21) Коль вс...   Apr 13 2016, 10:35
|- - ViKo   Цитата(scifi @ Apr 13 2016, 13:35) Выше б...   Apr 13 2016, 10:43
|- - aaarrr   Цитата(scifi @ Apr 13 2016, 13:35) Выше б...   Apr 13 2016, 16:28
- - inventor   В догонку. все работает, загрузчик загружает, с од...   Apr 22 2016, 18:59
- - scifi   Цитата(inventor @ Apr 22 2016, 21:59) есл...   Apr 22 2016, 19:13


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

 


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


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