Генерация серийного номера времени загрузки для приложения на печатной плате - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь сгенерировать увеличивающееся значение во время загрузки, чтобы использовать его для «сериализации» печатной платы с уникальным значением кода.Не эксперт в командах ld или препроцессора, поэтому вам нужна помощь.

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

У меня нет предвзятого представления о том, как я могу это сделать, поэтому любой работоспособный ответ, с которого можно начать, в том числе макрос перед препроцессором, подойдет.В свои старые времена я вспоминаю, как добавил пару строк в файл компоновщика, чтобы выполнить это, но я не смог воскресить эту информацию где-либо (включая ячейки памяти моего мозга).

Чем проще ответ, темлучше.

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Компоновщик не является подходящим местом по двум причинам:

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

Лучшее место для исправления исполняемого файла во время загрузки с помощьюсерийный номер.

Выберите образец данных в качестве токена, чтобы инициализировать вашу переменную с помощью идентификатора устройства (шаблон, который трудно найти в другом месте в двоичном файле вашей программы) и инициализировать переменную серийного номера для этого шаблона данных (лучше, если вы делаете это статической инициализациейпеременная массива или что-то подобное)

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

После исправления исполняемого двоичного файла вы можете загрузитьэто к устройству.

Другое решение - зарезервировать фиксированную область в вашем скрипте компоновщика для всей такой информации.Затем поместите туда все переменные информации об устройстве.Затем получите точные позиции в rom для отдельных переменных и включите правильные данные в загруженное изображение.В этом случае компоновщик - ваш друг, резервирующий некоторый фиксированный сегмент в rom вашего устройства, выделенный для хранения индивидуальных данных устройства (вы можете указать там mac-адреса, серийные номера, конфигурацию по умолчанию и т. Д.)

0 голосов
/ 16 июня 2019

Мое решение проблемы было удивительно простым.

Бинарный файл содержал

const char *serial = "XY-00000";

Затем я написал короткую программу, которая сводилась к:

char uniqueserial [8];
/* Generate serial - this was an SQL call to the manufacturing DB */
char *array;
/* Read binary into array */
memcpy(memmem(array, "XY-00000",8), uniqueserial,8);
/* Write array to temp bin file for flashing */

Зависит от уникальности последовательной строки шаблона в двоичном файле.Используйте команду strings для проверки.Я отключаю crc защищенные объектные файлы из-за вкуса.Мне нравится, что мои встроенные двоичные файлы являются точными дампами памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...