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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> stm32 bootloader, разьясните новичку
batisto4ka
сообщение Apr 26 2012, 13:00
Сообщение #46


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Прилагаю свой проект с функцией перехода по адресу приложения. Подскажите, почему не хочет линковаться проект?

Сообщение отредактировал batisto4ka - Apr 26 2012, 13:00
Прикрепленные файлы
Прикрепленный файл  MyBootLoaderV1.0Test.rar ( 1.45 мегабайт ) Кол-во скачиваний: 105
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 26 2012, 13:59
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lotor @ Apr 26 2012, 18:08) *
По-моему обойти это можно только, если неизменяемый загрузчик в первом секторе флеш, зашиваемый вами на заводе, будет иметь возможность "засасывать" прошивку из вне.

Каким образом?
Учтите мои требования по интерфейсам, приплюсуйте сюда необходимость реализации некоего рабочего протокола обмена (довольно сложного) в бутлоадере, необходимость определения параметров конфигурации каналов связи (формат этой конфигурации каналов связи может от прошивки к прошивке поменяться и бутлоадер должен заранее знать какой он был в прошлом и будет в будущем sm.gif
Т.е. - вам придётся еще раз реализовать все те функции, что есть в рабочем ПО + необходимо как-то определить, что основное рабочее ПО функционирует неверно
(а ведь определить это бутлоадеру будет очень сложно, раз на этапе тестирования новой прошивки вы сами не выявили её неработоспособности, значит эту неработоспособность очень сложно даже вам определить не говоря уже о бутлоадере sm.gif
Таким образом вам придётся написать бутлоадер значительно сложнее самого рабочего ПО! Значит если у нас рабочее ПО перед пуском в серию должно пройти опытную эксплуатацию на объекте как минимум месяц, то и такой бутлоадер тем более надо ставить на опытную эксплуатацию. Только как вы будете его отлаживать, ставить на опытную эксплуатацию на объект и УДАЛЁННО ОБНОВЛЯТЬ??? smile3046.gif
Таким образом - приходим к абсурдности этой идеи wink.gif

А если вы о простом интерфейсе для обновления ПО, не подразумевающем использование различных каналов связи с переменной конфигурацией, то по-моему это уже есть в самом проце в ROM изначально - у NXP в её LPC есть ISP через UART.

Цитата(lead_seller @ Apr 26 2012, 18:52) *
Раздумывал над таким вариантом. Придумал такой вариант тестирования прошивки: в самой прошивке пишем функцию и располагаем ее по четко указанному адресу памяти программ, задача функции получить какое-нибудь число, выполнить некие действия (например, какие то арифметические действия) и вернуть ответ. Перед загрузкой основной прошивки бутлоадер сделает вызов этой функции с какими-то данными, получит от нее результат, выполнит такие же операции с этим же набором данных сам, сравнит результаты, если результаты совпадут то прошивка будет считаться валидной. Получится эдакий аналог системы пароль-отзыв.
Конечно, от необнаруженных при помощи CRC ошибок в прошивке это может и не спасти (если ошибки в прошивке есть, а сама функция-ключ будет работоспособной), но хотя бы спасет от заливки "левых" прошивок и выполнения устройством непредусмотренных действий.

Всё то же самое, но гораздо лучше реализует обычное CRC всей прошивки. Ведь вы предлагаете контролировать малую часть прошивки (функцию), а я - всю прошивку.
А спасение от заливки левых прошивок в моём способе делает бутлоадер, проверяя эту самую CRC перед обновлением поверх рабочей. Считать CRC генерируемой прошивки должен линковщик, благо к примеру в IAR-е это есть. Либо сторонее ПО - автоматом следующим шагом после линковки.
Go to the top of the page
 
+Quote Post
spasbyspas
сообщение Apr 26 2012, 17:06
Сообщение #48


Участник
*

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



Цитата(batisto4ka @ Apr 26 2012, 16:00) *
Прилагаю свой проект с функцией перехода по адресу приложения. Подскажите, почему не хочет линковаться проект?

После компиляции выдает сообщение:
"
.\Listings\MSU_KDM-3322.axf: Warning: L6310W: Unable to find ARM libraries.
.\Listings\MSU_KDM-3322.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
"
А у вас?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 27 2012, 04:23
Сообщение #49


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(jcxz @ Apr 26 2012, 17:59) *
Таким образом вам придётся написать бутлоадер значительно сложнее самого рабочего ПО! Значит если у нас рабочее ПО перед пуском в серию должно пройти опытную эксплуатацию на объекте как минимум месяц, то и такой бутлоадер тем более надо ставить на опытную эксплуатацию. Только как вы будете его отлаживать, ставить на опытную эксплуатацию на объект и УДАЛЁННО ОБНОВЛЯТЬ??? smile3046.gif
Таким образом - приходим к абсурдности этой идеи wink.gif

Абсурдные идеи говорите? Представьте, что кто-то хочет сделать диверсию на вашем приборе и выставить фирму в неприглядном свете, он просто зальет 3 левых байта с правильной crc. И как удаленно вы почините такое при вашей "100% надежной" реализации?)


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2012, 05:01
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lotor @ Apr 27 2012, 10:23) *
Абсурдные идеи говорите? Представьте, что кто-то хочет сделать диверсию на вашем приборе и выставить фирму в неприглядном свете, он просто зальет 3 левых байта с правильной crc. И как удаленно вы почините такое при вашей "100% надежной" реализации?)

Интересно - откуда этот злодей знает где должна храниться эта CRC и по какому алгоритму она должна быть посчитана? А если он это узнал из неких источников, то из них же он и узнает всё про вашу функцию контроля и добавит и её.
Защита от таких злодеев реализуется защитой канала связи.
В нашем ПО этому злодею сначала надо узнать пароль доступа ДЛЯ ОБНОВЛЕНИЯ ПО, а также ключ шифрования для доступа к каналу С ПРАВАМИ ОБНОВЛЕНИЯ ПО.
Или Вы в ваших устройствах позволяете обновлять ПО кому попало без защиты канала связи???
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 27 2012, 05:17
Сообщение #51


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(jcxz @ Apr 27 2012, 09:01) *
Или Вы в ваших устройствах позволяете обновлять ПО кому попало без защиты канала связи???

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2012, 05:33
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lotor @ Apr 27 2012, 11:17) *
Зачем столько эмоций, я лишь показал вам две потенциально возможных ситуации, когда назвать такую реализацию 100% надежной нельзя.

Да я спокоен как удафф wink.gif
Цитата(Lotor @ Apr 27 2012, 11:17) *
А злодеи могут быть и бывшими сотрудниками вашей фирмы, которые затаили обиду. sm.gif

Всё решается на своём уровне - ключ доступа для обновления ПО (или методику формирования такого ключа на основании серийного номера изделия и текущего времени к примеру) знает узкий круг лиц и если произошёл такой инцидент - тут должна подключаться служба безопасности и проверять подозреваемых из этого круга.
Если все эти мероприятия выполнены в полном объёме - надёжность будет близка к 100%.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 27 2012, 05:59
Сообщение #53


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(jcxz @ Apr 27 2012, 09:33) *
Если все эти мероприятия выполнены в полном объёме - надёжность будет близка к 100%.

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
batisto4ka
сообщение Apr 27 2012, 06:36
Сообщение #54


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Цитата(spasbyspas @ Apr 26 2012, 21:06) *
После компиляции выдает сообщение:
"
.\Listings\MSU_KDM-3322.axf: Warning: L6310W: Unable to find ARM libraries.
.\Listings\MSU_KDM-3322.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
"
А у вас?

Все, вопрос снят. Нужно подключить core_m3.c
Go to the top of the page
 
+Quote Post
batisto4ka
сообщение May 3 2012, 07:59
Сообщение #55


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Помогите домучать бутлоадер.
Программа бутлоадера записана по адресу 0x08000000. Программа пользователя пишется по адресу 0x0819000. Алгоритм бутлоадера такой: при сбросе ждем 5 секунд, если за это время по юсарту приходит нужная комбинация (короче устанавливается связь с внешним загрузчиком), то работает бутлоадер. А если связь не стуанавливается- загружается программа пользователя если она есть.
Не могу понять одного, как работает эта функция
Код
void    JumpToApplication    (uint32_t ApplicationAddress)
{
typedef     void         (*pFunction)(void);
            pFunction     Jump_To_Application;
            uint32_t     JumpAddress;


//__disable_interrupt();                                                      // Запрещаем прерывания
NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_PROG_OFFSET);
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) //Проверяем, есть ли что-нибудь по адресу (там должно лежать значение SP для приложения, его кладет линкер)
    {
                //Адрес перехода из вектора Reset
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);      
Jump_To_Application = (pFunction) JumpAddress;                     //Указатель на функцию перехода
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);                    //Устанавливаем SP приложения
      Jump_To_Application();                                            //Запускаем приложение
    }
}

Вроде бы все правильно работает до момента
[code]JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

Насколько я понимаю, JumpAddress должна содержать адрес функции SystemInit. Но, у меня получается, что формируется фообще какой-то левый адрес, в котором расположен код бутлоадера.
Я так подозреваю, что причина в том, что нужно прежде чем билдить проект программы пользователя, которую нужно запистаь в память, нужно опредленным образомнастроить адрессацию где-то в настройках, то ли линковщик то ли не знаю. Потому что если брать обыкновенный проект в кейле, где настройки стоят по умолчанию, по адресу вектора сброса записывается адресс, где хранится программа, скомпилированная и слинкованная для базового адресса 0х08000000, поэтому если эту программу через программатор записать в камень и отлаживать, то адрес систем инит там будет к примеру по адресу 0х08000431. А если этот hex переслать в бутлоадер, то соответственно JumpAddress=0х08000431 будет принадлежать области порграммы бутлоадера.
Подскажите, пожалуйста, правильно ли я мыслю? И как настроить проект в Кейле, чтобы все хорошо работало???))))))))))))))))
Go to the top of the page
 
+Quote Post
EugenyAM
сообщение May 4 2012, 03:34
Сообщение #56


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 14-10-08
Из: Omsk
Пользователь №: 40 929



Цитата(batisto4ka @ May 3 2012, 13:59) *
Я так подозреваю, что причина в том, что нужно прежде чем билдить проект программы пользователя, которую нужно запистаь в память, нужно опредленным образомнастроить адрессацию где-то в настройках, то ли линковщик то ли не знаю. Потому что если брать обыкновенный проект в кейле, где настройки стоят по умолчанию, по адресу вектора сброса записывается адресс, где хранится программа, скомпилированная и слинкованная для базового адресса 0х08000000, поэтому если эту программу через программатор записать в камень и отлаживать, то адрес систем инит там будет к примеру по адресу 0х08000431. А если этот hex переслать в бутлоадер, то соответственно JumpAddress=0х08000431 будет принадлежать области порграммы бутлоадера.
Подскажите, пожалуйста, правильно ли я мыслю? И как настроить проект в Кейле, чтобы все хорошо работало???))))))))))))))))

Все рассуждения верные, как конкретно настроить в кейле не знаю, по аналогии с IAR надо смотреть опции линковщика.
Надо изменить начальные адреса FLASH и Intvec на начальный адрес программы.
В самой программе не забыть первым действием установить новый адрес таблицы векторов, я про это уже говорил.
Код
NVIC_SetVectorTable(NVIC_VectTab_FLASH, USER_PROG_OFFSET);

Go to the top of the page
 
+Quote Post
batisto4ka
сообщение May 4 2012, 05:37
Сообщение #57


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Так все решено. На самом деле в программу, которая загружается, нужно добавить

Код
__set_PRIMASK(1);//отключить все прерывания
/* Set the Vector Table base location at 0x08010000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x19000);     //перенести таблицу векторов прерываний по адресу 0х08019000
/*Тут функции настройки NVICа*/
__set_PRIMASK(0);//включить все прерывания


Сообщение отредактировал batisto4ka - May 4 2012, 11:37
Go to the top of the page
 
+Quote Post
veteq
сообщение Dec 23 2013, 05:26
Сообщение #58


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Вопрос по встроенному загрузчику STM, возможно ли его запустить находясь в основной программе не использую ножки BOOT? Например такая возможность имеется у LPC подав специальную команду внутри своей программы перейти в встроенный загрузчик и прошить контроллер с помощью flashmagic.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 23 2013, 06:45
Сообщение #59


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(veteq @ Dec 23 2013, 09:26) *
Тут пишут, что это возможно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
veteq
сообщение Dec 23 2013, 10:47
Сообщение #60


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Спасибо, действительно все заработало. Основное можно подглядеть: http://www.youtube.com/watch?v=cvKC-4tCRgw
Go to the top of the page
 
+Quote Post

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

 


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


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