www.open-tager.ru

открытый лазертаг форум
Текущее время: 23 апр 2024, 22:28

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 56, 57, 58, 59, 60, 61, 62 ... 108  След.
Автор Сообщение
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 дек 2015, 20:32 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pacifist писал(а):
Как-то действительно сложно у Вас получилось.
Обычно бутлоадер пишут как отдельный проект. А потом уже любую прошивку через него загружают в кристалл без какой-либо ручной настройки.
Ваш бутлоадер сможет загрузить и запустить к примеру прошивку Пингвина?


Если делать - то делать хорошо. Постараюсь сделать такой загрузчик, который сможет прошивать с карты любую прошивку вообще, в том числе ничего про загрузчик не знающую и даже не скомпилированную в position-independent code.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 08 дек 2015, 23:44 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 27 ноя 2011, 00:22
Сообщений: 1569
Откуда: Україна
Alexies писал(а):
Pacifist писал(а):
Как-то действительно сложно у Вас получилось.
Обычно бутлоадер пишут как отдельный проект. А потом уже любую прошивку через него загружают в кристалл без какой-либо ручной настройки.
Ваш бутлоадер сможет загрузить и запустить к примеру прошивку Пингвина?


Если делать - то делать хорошо. Постараюсь сделать такой загрузчик, который сможет прошивать с карты любую прошивку вообще, в том числе ничего про загрузчик не знающую и даже не скомпилированную в position-independent code.

Загрузчики в идеале так и должны работать.

Например гипотетический примитивный чип всегда стартует с адреса 0х0000 и никаких смещений ни таблиц векторов ни других вариантов старта не имеет. Загрузчик делают приблизительно так:
- само тело загрузчика ложится в последние доступные адреса, а по адресу 0х0000 находится jmp на загрузчик.
- при старте выполняется jmp на загрузчик, тот начинает выполняться и смотрит надо ли входить в режим записи (нажата кнопка и т.д.)
- если режим загрузчика - то принимаем данные и пишем их во флеш. Пишем прошивку один к одному за исключением первой страницы - у неё надо будет первые байты изменить на jmp на загрузчик, а саму страницу дублировать где-то в верхних адресах (к примеру 0х7FC0).
- если при старте контроллера никакие кнопки не нажаты (не режим загрузчика) - то загрузчик делает переход на 0х7FC0 - и программа выполняется, как будто загрузчика и не существует.

В результате имеем одно ограничение - размер программы (чтоб вместилась и основная прошивка и загрузчик). А дальше шьём через загрузчик любое-голубое, прошивка не знает про загрузчик и работает так как будто его нет, загрузчик способен прошить и запустить любую прошивку.

Это самый трудный вариант.
В современных чипах всё проще. У некоторых даже хардварные загрузчики уже есть готовые - только подавай данные :).

_________________
Нет предела совершенству, но ресурсы заканчиваются быстро.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 06:49 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Alexies писал(а):
Pacifist писал(а):
Как-то действительно сложно у Вас получилось.
Обычно бутлоадер пишут как отдельный проект. А потом уже любую прошивку через него загружают в кристалл без какой-либо ручной настройки.
Ваш бутлоадер сможет загрузить и запустить к примеру прошивку Пингвина?


Если делать - то делать хорошо. Постараюсь сделать такой загрузчик, который сможет прошивать с карты любую прошивку вообще, в том числе ничего про загрузчик не знающую и даже не скомпилированную в position-independent code.

А зачем делать position-independent ?

Я не делаю - все работает.

А любую прошивку заливать все равно не получится - можно тогда сам бтлоадер затереть.
Или сильно мудреное тогда городить что-то, с переползанием тела бутлоадера или в оперативке его запускать, а после перепрошивки выгружать на свободное место во флеш. Но это очень ненадёжно! :?
Стоит ли игра свеч, если проект настраивается в два клика под бутлоадер?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 09 дек 2015, 07:31, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 06:57 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Pacifist писал(а):
Alexies писал(а):
Pacifist писал(а):
Как-то действительно сложно у Вас получилось.
Обычно бутлоадер пишут как отдельный проект. А потом уже любую прошивку через него загружают в кристалл без какой-либо ручной настройки.
Ваш бутлоадер сможет загрузить и запустить к примеру прошивку Пингвина?


Если делать - то делать хорошо. Постараюсь сделать такой загрузчик, который сможет прошивать с карты любую прошивку вообще, в том числе ничего про загрузчик не знающую и даже не скомпилированную в position-independent code.

Загрузчики в идеале так и должны работать.

Например гипотетический примитивный чип всегда стартует с адреса 0х0000 и никаких смещений ни таблиц векторов ни других вариантов старта не имеет. Загрузчик делают приблизительно так:
- само тело загрузчика ложится в последние доступные адреса, а по адресу 0х0000 находится jmp на загрузчик.
- при старте выполняется jmp на загрузчик, тот начинает выполняться и смотрит надо ли входить в режим записи (нажата кнопка и т.д.)
- если режим загрузчика - то принимаем данные и пишем их во флеш. Пишем прошивку один к одному за исключением первой страницы - у неё надо будет первые байты изменить на jmp на загрузчик, а саму страницу дублировать где-то в верхних адресах (к примеру 0х7FC0).
- если при старте контроллера никакие кнопки не нажаты (не режим загрузчика) - то загрузчик делает переход на 0х7FC0 - и программа выполняется, как будто загрузчика и не существует.

В результате имеем одно ограничение - размер программы (чтоб вместилась и основная прошивка и загрузчик). А дальше шьём через загрузчик любое-голубое, прошивка не знает про загрузчик и работает так как будто его нет, загрузчик способен прошить и запустить любую прошивку.

Это самый трудный вариант.
В современных чипах всё проще. У некоторых даже хардварные загрузчики уже есть готовые - только подавай данные :).


Интересный подход.
То есть, даже если прошивка криво записалась и не может запуститься - загрузчик все равно останется рабочим и стартанёт?
У меня несколько иной подход просто, но бутлоадер стартует всегда первым.

А вот тут, по моему - вся сложность такого подхода и могут быть проблемы.
Цитата:
Пишем прошивку один к одному за исключением первой страницы - у неё надо будет первые байты изменить на jmp на загрузчик, а саму страницу дублировать где-то в верхних адресах (к примеру 0х7FC0).


Дело в том, что просто так взять кусок кода и перенести с одной страницы на другую - нельзя! :?

Есть пример рабочий реализации?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 07:03 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Есть два варианта всего - либо после ресета стартует бутлоадер, либо неизменённая прошивка.
Сделать так, что сначала стартует бутлоадер, а потом неизменённая прошивка нельзя!
Если только прошивка не position-independent.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 07:19 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Вот все, что нужно сделать в кокосе, чтобы прошивка заливалась моим бутлоадером.
Раз:
в stm32f10x.с правим
Код:
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET  0xC000/*0x0*/ /*!< Vector Table base offset field.
                                  This value must be a multiple of 0x200. */

два:


Вложения:
LinkerSetup.png
LinkerSetup.png [ 66.06 KiB | Просмотров: 6097 ]

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 09 дек 2015, 07:41, всего редактировалось 2 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 07:21 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
И всё!!!!
В какие дебри вы полезли?! :o :shock:
Зачем?!!!

Любую прошивку можно залить ШТАТНЫМ STM-овским бутлоадером по USART(блютусу)!

Чего ещё надо? :? :shock:

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 10:10 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pacifist писал(а):
Загрузчики в идеале так и должны работать.

Например гипотетический примитивный чип всегда стартует с адреса 0х0000 и никаких смещений ни таблиц векторов ни других вариантов старта не имеет. Загрузчик делают приблизительно так:
- само тело загрузчика ложится в последние доступные адреса, а по адресу 0х0000 находится jmp на загрузчик.
- при старте выполняется jmp на загрузчик, тот начинает выполняться и смотрит надо ли входить в режим записи (нажата кнопка и т.д.)
- если режим загрузчика - то принимаем данные и пишем их во флеш. Пишем прошивку один к одному за исключением первой страницы - у неё надо будет первые байты изменить на jmp на загрузчик, а саму страницу дублировать где-то в верхних адресах (к примеру 0х7FC0).
- если при старте контроллера никакие кнопки не нажаты (не режим загрузчика) - то загрузчик делает переход на 0х7FC0 - и программа выполняется, как будто загрузчика и не существует.

В результате имеем одно ограничение - размер программы (чтоб вместилась и основная прошивка и загрузчик). А дальше шьём через загрузчик любое-голубое, прошивка не знает про загрузчик и работает так как будто его нет, загрузчик способен прошить и запустить любую прошивку.

Это самый трудный вариант.
В современных чипах всё проще. У некоторых даже хардварные загрузчики уже есть готовые - только подавай данные :).

Да-да, вот именно это я и хочу сделать, один в один.

Pingvin писал(а):
А зачем делать position-independent ?
Я не делаю - все работает.
А любую прошивку заливать все равно не получится - можно тогда сам бтлоадер затереть.
Или сильно мудреное тогда городить что-то, с переползанием тела бутлоадера или в оперативке его запускать, а после перепрошивки выгружать на свободное место во флеш. Но это очень ненадёжно! :?
Стоит ли игра свеч, если проект настраивается в два клика под бутлоадер?

Проблема в том, что уже написанную, бинарную прошивку нельзя "сместить" в памяти, если там не position-independent code. И даже если там PIC-code, придётся руками править всю таблицу прерываний, так как в ней всегда абсолютные адреса! Я же хочу, чтобы прошивалась любая прошивка, созданная, как отдельный проект. Отсюда следует, что прошивка с минимальными изменениями должна лежать в начале памяти, как она и ожидает. А загрузчик тогда - в конце. В общем, всё, как описал Pacifist.
Если всё получится (в чем я не сомневаюсь), такой загрузчик я выложу в открытый доступ, поскольку ничего секретного там нет, а применять его можно будет для любого проекта.

А встроенный бутлоадер с UART-а никак не поможет прошиться с карты памяти. А блютуса у меня чаще не будет, чем будет :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 10:35 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Что то я не очень понимаю - если прошивка лежит "по умолчанию" в начале флеша, как Вы без выкрутасов с её содержимым заставите после подачи питания запуститься бутлоадер? :? :shock:

И как вот это
Цитата:
Пишем прошивку один к одному за исключением первой страницы - у неё надо будет первые байты изменить на jmp на загрузчик, а саму страницу дублировать где-то в верхних адресах (к примеру 0х7FC0).


Совмещается вот с этим?

Цитата:
Проблема в том, что уже написанную, бинарную прошивку нельзя "сместить" в памяти, если там не position-independent code. И даже если там PIC-code, придётся руками править всю таблицу прерываний, так как в ней всегда абсолютные адреса!

:o :?

А если я намерено хочу разместить прошивку где-нибудь в середине флеша и соберу её подобающим образом - что будет делать ваш бутлоадер?


Но удачи!
Жду с нетерпением. ;) :)

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Система Caustic
СообщениеДобавлено: 09 дек 2015, 10:44 
Не в сети
Старожил

Зарегистрирован: 18 мар 2015, 13:19
Сообщений: 574
Откуда: Нижний Новгород
Pingvin писал(а):
Что то я не очень понимаю - если прошивка лежит "по умолчанию" в начале флеша, как Вы без выкрутасов с её содержимым заставите после подачи питания запуститься бутлоадер? :? :shock:

Но удачи!
Жду с нетерпением. ;) :)


Как Pacifist расписал. Мы делаем hook: когда бутлоадер прошивает, он запоминает адрес Reset_Handler-а прошивки (он обязательно лежит по 0x08000004), а на его место подставляет свой. То есть, модифицирует в прошивке ровно 4 байта: в качестве точки входа подставляет свою точку входа, а исходную - запоминает. Теперь при старте контроллера запускается загрузчик. Он делает всё, что хочет, а затем - просто передаёт управление по адресу настоящей точки входа прошивки, которую он запомнил.

Единственное требование к прошивке - чтобы он работала сама по себе :) Ну и в конце было место.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 1076 ]  На страницу Пред.  1 ... 56, 57, 58, 59, 60, 61, 62 ... 108  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB