www.open-tager.ru http://www.open-tager.ru/forum/ |
|
Система Caustic http://www.open-tager.ru/forum/viewtopic.php?f=5&t=4128 |
Страница 60 из 108 |
Автор: | Pingvin [ 09 дек 2015, 10:47 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Pingvin писал(а): Что то я не очень понимаю - если прошивка лежит "по умолчанию" в начале флеша, как Вы без выкрутасов с её содержимым заставите после подачи питания запуститься бутлоадер? Но удачи! Жду с нетерпением. Как Pacifist расписал. Мы делаем hook: когда бутлоадер прошивает, он запоминает адрес Reset_Handler-а прошивки (он обязательно лежит по 0x08000004), а на его место подставляет свой. То есть, модифицирует в прошивке ровно 4 байта: в качестве точки входа подставляет свою точку входа, а исходную - запоминает. Теперь при старте контроллера запускается загрузчик. Он делает всё, что хочет, а затем - просто передаёт управление по адресу настоящей точки входа прошивки, которую он запомнил. Единственное требование к прошивке - чтобы он работала сама по себе Ну и в конце было место. Ну это круто, если это работает! А как узнать Reset_Handler бутлоадера? Его же надо собирать со смещением во флеше? Спасибо за информацию, может ссылки есть? |
Автор: | Alexies [ 09 дек 2015, 11:23 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): А как узнать Reset_Handler бутлоадера? Его же надо собирать со смещением во флеше? Спасибо за информацию, может ссылки есть? Так же, как и при сборке таблицы прерываний - там он используется. Просто берем адрес от функции. В процессе линковки он подставится корректный. А вот с ссылками по теме - беда. Сам кусочно сбирал информацию несколько дней и экспериментировал. Нет такого, чтобы где-то было всё сразу написано, что делать. Про ld можете тут почитать: https://www.opennet.ru/docs/RUS/gnu_ld/gnuld-3.html Но это само по себе не особо поможет. |
Автор: | Pingvin [ 09 дек 2015, 11:31 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Pingvin писал(а): А как узнать Reset_Handler бутлоадера? Его же надо собирать со смещением во флеше? Спасибо за информацию, может ссылки есть? Так же, как и при сборке таблицы прерываний - там он используется. Просто берем адрес от функции. В процессе линковки он подставится корректный. А вот с ссылками по теме - беда. Сам кусочно сбирал информацию несколько дней и экспериментировал. Нет такого, чтобы где-то было всё сразу написано, что делать. Про ld можете тут почитать: https://www.opennet.ru/docs/RUS/gnu_ld/gnuld-3.html Но это само по себе не особо поможет. Спасибо! На верном пути, ИМХО! |
Автор: | Pingvin [ 09 дек 2015, 13:42 ] |
Заголовок сообщения: | Re: Система Caustic |
А представим ситуацию - бутлоадер прошивку то залил (возможно - частично), а вот Ресет Хандл заменить - не успел. Вырубили питание. Усе - помер бутлоадер! В моём варианте такая ситуация не может наступить. Бутлоадер всегда жив! P.S. Вроде есть выход - может об этом и писал Пацифист... Первую (верхнюю) страницу пишем куда-нибудь много ниже или в оперативку. Таким образом даже если питание вырубят, ресет хендл останется корректным в первой странице. Только после того, как скопировали первый сектор прошивки во временное хранилище (можно даже в оперативку), меняем хендл и лишь потом пишем во флеш в первую страницу. Вероятность потерять корректный хендл - минимальна, хотя теоретически возможна. Решаемо! |
Автор: | Alexies [ 09 дек 2015, 15:18 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): А представим ситуацию - бутлоадер прошивку то залил (возможно - частично), а вот Ресет Хандл заменить - не успел. Вырубили питание. Усе - помер бутлоадер! В моём варианте такая ситуация не может наступить. Бутлоадер всегда жив! P.S. Вроде есть выход - может об этом и писал Пацифист... Первую (верхнюю) страницу пишем куда-нибудь много ниже или в оперативку. Таким образом даже если питание вырубят, ресет хендл останется корректным в первой странице. Только после того, как скопировали первый сектор прошивки во временное хранилище (можно даже в оперативку), меняем хендл и лишь потом пишем во флеш в первую страницу. Вероятность потерять корректный хендл - минимальна, хотя теоретически возможна. Решаемо! Ну мы же по-любому первую страницу сначала в оперативку засунем с диска, а потом только во флеш. Но по-любому останется промежуток времени между стиранием первой страницы и её записью. Очевидно, что он настолько мал, что вероятность пропадания питания ничтожна: время записи одной страницы меньше 0.1 сек даже через программатор с компа. Особенно учитывая, что перепрошиваются люди не каждый день. При записи же остальных страниц проблем не возникнет. Вероятность поломки системы от других источников гораздо выше: можно наступить ногой, удолбать об асфальт или положить в стиральную машину Ваш бутлоадер, к сожалению, не может защитить от этих факторов А писать первую страницу основной прошивки не по нулевому адресу, а в другое место, очевидно, нельзя, поскольку на этой странице не только таблица прерываний помещается, но ещё и куча кода с абсолютной адресацией. |
Автор: | Pingvin [ 09 дек 2015, 17:13 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): А писать первую страницу основной прошивки не по нулевому адресу, а в другое место, очевидно, нельзя, поскольку на этой странице не только таблица прерываний помещается, но ещё и куча кода с абсолютной адресацией. Ну и что? Прошивка то собирается спецом под конкретный адрес! Я же выше показал, как это делается - 10 секунд на настройку проекта! Хоть десять прошивок вряд и прыгай с одной на другую в произвольном порядке. Нет тут проблем. |
Автор: | Alexies [ 09 дек 2015, 18:17 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Alexies писал(а): А писать первую страницу основной прошивки не по нулевому адресу, а в другое место, очевидно, нельзя, поскольку на этой странице не только таблица прерываний помещается, но ещё и куча кода с абсолютной адресацией. Ну и что? Прошивка то собирается спецом под конкретный адрес! Я же выше показал, как это делается - 10 секунд на настройку проекта! Хоть десять прошивок вряд и прыгай с одной на другую в произвольном порядке. Нет тут проблем. Да я понимаю, что так можно сделать. У меня есть 2 варианта: 1) загрузчик, который может прошить любую бинарную, не подготовленную заранее прошивку, но уязвим для пропадания питания на <0.1 сек. 2) загрузчик, для которого специальным образом нужно компилировать прошивку, зато теоретически неуязвимый по питанию. Кстати, там будет не 0.1, а гораздо меньше, ибо нужно записать только первые 8 байт (собственно, значение stack pointer-а и адрес reset handler), чтобы загрузчик работал. Всё остальное можно потерять. А 0.1с - это время записи всей 2Kb страницы. Сужу по тому, что на запись 100 страниц уходит около 10с. через программатор. Мне кажется очевидным, что первый загрузчик полезнее и универсальнее второго. Кроме того, если рассматривать плату "мозга", как самостоятельный коммерческий продукт, первый загрузчик смотрится хорошим дополнением. Например для тех, кто не хочет разрабатывать, но хочет просто повторить какое-то устройство на "мозге", не связанное даже с лазертагом. |
Автор: | Pingvin [ 09 дек 2015, 18:37 ] |
Заголовок сообщения: | Re: Система Caustic |
Не надо меня убеждать - я уже сам загорелся попробовать, и что всего 8 байт надо успеть записать - тоже просек. Уже думаю над конкретной реализацией - вроде несложно. Полагаю - за полдня можно мой бутлоадер сделать "универсальным". Цитата: Мне кажется очевидным, что первый загрузчик полезнее и универсальнее второго. Кроме того, если рассматривать плату "мозга", как самостоятельный коммерческий продукт, первый загрузчик смотрится хорошим дополнением. Например для тех, кто не хочет разрабатывать, но хочет просто повторить какое-то устройство на "мозге", не связанное даже с лазертагом. Категорически поддерживаю! |
Автор: | Alexies [ 10 дек 2015, 01:19 ] |
Заголовок сообщения: | Re: Система Caustic |
Тестовая версия загрузчика заработала! Успешно прошил с карточки свою основную прошивку без всякой её подготовки и запустил. Теперь осталось причесать код, довести его до ума, оптимизировать размер. Как только доделаю, выложу на гитхаб! |
Автор: | Pingvin [ 10 дек 2015, 06:46 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Тестовая версия загрузчика заработала! Успешно прошил с карточки свою основную прошивку без всякой её подготовки и запустил. Теперь осталось причесать код, довести его до ума, оптимизировать размер. Как только доделаю, выложу на гитхаб! Поздравляю! |
Страница 60 из 108 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |