Перейти к содержанию

Идентификация прошивок


rmatveev

Рекомендуемые сообщения

Друзья, мне бы хотелось как-то начать "метить" прошивки, которые я заливаю в устройства на этапе разработки.

Когда-то давно, когда я еще кодил для МК51 и PIC я использовал несколько ячеек в начале памяти программ, куда автоматом записывал закодированную дату. Но это я делал с помощью своей утилиты - при компиляции я запускал свой батник, который во-первых формировал небольшой ассемблерный файлик с кодом даты, он уже линковался к основному коду и получалось у меня что-то типа такого:

            ORG          0000h
            goto         Begin

            include      'date.src'

            retw         __day
            retw         __month
            retw         __year

            ORG          0004h
            goto         INTERRUPT

Файл date.src формировался моим батником, там присваивались значения макросам __day, __month и __year.

Это ассемблер для PicMicro. Я использовал тот факт, что у него между началом пользовательского кода и единственным вектором прерывания было 4 байта, в первый байт я вставлял команду перехода на начало, а в три оставшихся байта - дату. Она была хорошо видна при считывании кода из чипа. Было очень удобно потом идентифицировать прошивку, т.к. исходники я тоже сохранял по датам. В общем, такая была доморощенная система контроля версий. Было это году в 2000-м.

Сейчас я пользуюсь Atollic TrueStudio и MBED и тоже задумался о том, как мне помечать прошивки. Может быть есть какие-то штатные способы? Или может по старинке найти в коде место, куда зашивать дату что бы ее легко было видно при считывании прошивки в ST Link Utility?

Спасибо заранее за любые мысли.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Сразу после KEEP(*(.isr_vector)). 

. = ALIGN(0x200);
    KEEP(*(.text.METAINFO))
    . = ALIGN(4);

В текстовом виде будет легко читаться прямо из бинарного файла, и всегда на своём месте.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

23 минуты назад, AVI-crak Home сказал:

Сразу после KEEP(*(.isr_vector)). 

. = ALIGN(0x200);
    KEEP(*(.text.METAINFO))
    . = ALIGN(4);

В текстовом виде будет легко читаться прямо из бинарного файла, и всегда на своём месте.

А это в каком файле? Что-то пока ума не приложу где это. Вы не приложите скрин?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Это скрипт линкера *.ld, вот только это запись секции, для записи файла нужно еще в этой секции прикрепить нужный файл (на асме в стартапе). Типа такого:

  .section  .Bootloader,"a",%progbits
  .type  Bootloader_os, %object

Bootloader_os:
  .incbin "123.bin"

  .size  Bootloader_os, .-Bootloader_os

И теперь уже сохранить секцию .Bootloader

    . = ALIGN(4);
    KEEP (*(.isr_vector))   /* сохранили таблицу векторов */

    . = ALIGN(4);
    _myID_Adr = .;
    KEEP (*(.Bootloader))     

_myID_Adr это адрес наших данных, можно обращаться через структуру для удобства к этому файлу.

Все под Atollic

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Можно еще использовать стандартные макросы типа: __DATE__ __TIME__ примерно так:

__attribute__ ((section (".Bootloader"))) uint8_t aDate[] = __DATE__;
__attribute__ ((section (".Bootloader"))) uint8_t aTime[] = __TIME__;

На выходе имеем:

080001ac <aTime>:
 80001ac:	31 33 3a 34 36 3a 35 33 00 00 00 00                 13:46:53....

080001b8 <aDate>:
 80001b8:	4d 61 72 20 32 38 20 32 30 31 39 00                 Mar 28 2019.

 

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, MasterElectric сказал:

Можно еще использовать стандартные макросы типа: __DATE__ __TIME__ примерно так:


__attribute__ ((section (".Bootloader"))) uint8_t aDate[] = __DATE__;
__attribute__ ((section (".Bootloader"))) uint8_t aTime[] = __TIME__;

 

Круто!

А куда этот код нужно встраивать?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...