|
STM32. Свой загрузчик и прошивка через Mass storage |
|
|
|
Oct 2 2015, 11:42
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Третий день в голове крутится идея. Прошелся поиском по форуму, понял, что эту мысль несколько раз тут осторожно высказывали, но никаких выводов за/против я не увидел. Итак: Сделать свой загрузчик, который при загрузке проверяет условие, например состояние ноги. Если выбрана простая загрузка - передает управление по адресу с основной прошивкой. А если нет, инициализирует USB Mass Storage. В системе появляется накопитель с текущей прошивкой (данные по конкретному адресу флеш). Запись нового файла ведет к перезаписи содержимого флеш. Можно организовать настройку - только запись, это уже нюансы. Теперь про сложности, которые я увидел: 1) Нужна ФС. Или ее эмуляция. FATFS, которую STM поставляет с Cube занимает около 20кб флеша, что для загрузчика многовато. Хотя, можно и пережить 2) Непонятно, как заставить ФС напрямую превратить последовательный блок данных в файл, чтоб он был виден на ПК. Тут есть решение в виде эмулятора ФС, но он read only. 3) ОС может жонглировать секторами и писать прошивку не сплошным потоком. Хотя, это решаемо, если использовать FATFS и писать в промежуточную область памяти, а после записи копировать файл функциями ФС. Минус - Надо в 2 раза больше флеша, размер прошивки уменьшается. Предлагаю обсудить, насколько проблема решаема? Может быть, кто-то реализовал? Просьба не тыкать в DFU, программатор и т.д. На мой взгляд, решение красивое, кроме прошивки можно отображать в виде файлов другие данные, например инженерный конфиг. Тут скорее спортивный интерес: другие варианты загрузчика решаются куда проще.
Сообщение отредактировал drozel - Oct 2 2015, 11:44
|
|
|
|
|
 |
Ответов
|
Oct 5 2015, 10:42
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
А еще такой вот тупой вопрос: правильно я понимаю, что вызовы функций в слинкованном коде не относительные и линкер, который собирает прошивку, заливаемую через такой бутлоадер, должен знать смещение? Не получится сделать один файл, который будет шиться как самостостоятельно, через программатор, так и с подобным бутлоадером по другому адресу? Цитата(KnightIgor @ Oct 5 2015, 14:58)  Именно так, собственно говоря, работает перепрошивка ST/Link'ов, которые там на всяких Discovery платах сидят. У меня STM32F4discovery, ничего такого не видел, поясните?
Сообщение отредактировал drozel - Oct 5 2015, 10:44
|
|
|
|
|
Oct 5 2015, 13:12
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(drozel @ Oct 5 2015, 11:42)  Не получится сделать один файл, который будет шиться как самостостоятельно, через программатор, так и с подобным бутлоадером по другому адресу? Без титанических усилий - вряд ли. В KEIL, например, есть опция трансляции с перемещаемым кодом, что на мысль наводит. Ни разу не пробовал, но предполагаю, что написать всю программу перемещаемой будет очень сложно: неясным остаются предкомпилированные С-шные библиотеки. Цитата У меня STM32F4discovery, ничего такого не видел, поясните? Я специально ничего не делал, чтобы увидеть MassStorage-проявление, но наблюдал: когда новый драйвер решает актуализировать прошивку в ST/Link, он чего-то там делает, после чего РС характерно трезвонит по причине пересоединения USB устройств, и я подглядел, что появляется и через некоторое время снова пропадает Mass Storage.
Сообщение отредактировал KnightIgor - Oct 5 2015, 13:13
|
|
|
|
|
Oct 6 2015, 00:11
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(KnightIgor @ Oct 5 2015, 16:12)  Без титанических усилий - вряд ли. В KEIL, например, есть опция трансляции с перемещаемым кодом, что на мысль наводит. Ни разу не пробовал, но предполагаю, что написать всю программу перемещаемой будет очень сложно: неясным остаются предкомпилированные С-шные библиотеки. Титаническое - это оверлеи. По остальным вариантам - можно компилить в секции с такими адресами, которых нет в железе. а потом по разбору инструкций вычитать смещения рабочих относительно нерабочих Цитата(drozel @ Oct 2 2015, 14:42)  1) Нужна ФС. Или ее эмуляция. FATFS, которую STM поставляет с Cube занимает около 20кб флеша, что для загрузчика многовато. Хотя, можно и пережить read only файлы - 6кб на libopencm3 эмулируется boot sector, корневой каталог и fat16
|
|
|
|
Сообщений в этой теме
drozel STM32. Свой загрузчик и прошивка через Mass storage Oct 2 2015, 11:42 scifi Цитата(drozel @ Oct 2 2015, 14:42) 2) Неп... Oct 2 2015, 11:53 drozel Цитата(scifi @ Oct 2 2015, 17:53) Зная ус... Oct 2 2015, 12:00 mantech Цитата(drozel @ Oct 2 2015, 14:42) Предла... Oct 2 2015, 12:16 drozel Цитата(mantech @ Oct 2 2015, 18:16) народ... Oct 2 2015, 12:21 mantech Цитата(drozel @ Oct 2 2015, 15:21) Кстати... Oct 2 2015, 12:24 drozel Цитата(mantech @ Oct 2 2015, 18:24) Подав... Oct 2 2015, 12:32 mantech Цитата(drozel @ Oct 2 2015, 15:32) Само с... Oct 2 2015, 17:32 esaulenka Цитатакак бы хорошо было, если бы вдруг от дома пр... Oct 2 2015, 12:47 drozel Цитата(esaulenka @ Oct 2 2015, 18:47) А т... Oct 2 2015, 13:04 esaulenka Есть готовый эмулятор флешки - от ST (плохого, на ... Oct 2 2015, 13:39 YAM Все уже реализовано, например тут в YAM-TOUCH-CAP-... Oct 4 2015, 17:09 drozel Цитата(YAM @ Oct 4 2015, 23:09) Все уже р... Oct 5 2015, 04:33  YAM Цитата(drozel @ Oct 5 2015, 07:33) Спасиб... Oct 5 2015, 05:52 KnightIgor Цитата(drozel @ Oct 2 2015, 12:42) Третий... Oct 5 2015, 08:58 YAM Цитата(drozel @ Oct 5 2015, 13:42) А еще ... Oct 5 2015, 14:49 KnightIgor Цитата(drozel @ Oct 5 2015, 11:42) А еще ... Oct 5 2015, 18:36  drozel Цитата(KnightIgor @ Oct 6 2015, 00:36) по... Oct 6 2015, 03:43 kolobok0 Цитата(drozel @ Oct 5 2015, 13:42) .. что... Oct 5 2015, 21:34 YAM Что-то Вы плохо ужимаетесь, как я писал, под boot ... Oct 6 2015, 09:44 drozel Цитата(YAM @ Oct 6 2015, 15:44) как я пис... Oct 6 2015, 09:49  YAM Цитата(drozel @ Oct 6 2015, 12:49) Как я ... Oct 6 2015, 09:56
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|