Разработка интерфейса доступа к памяти в аппаратно-программном модуле доверенной загрузки | Статья в сборнике международной научной конференции

Отправьте статью сегодня! Журнал выйдет 18 мая, печатный экземпляр отправим 22 мая.

Опубликовать статью в журнале

Автор:

Рубрика: 4. Информатика

Опубликовано в

LXX международная научная конференция «Исследования молодых ученых» (Казань, декабрь 2023)

Дата публикации: 02.12.2023

Статья просмотрена: 10 раз

Библиографическое описание:

Леонтян, И. Ю. Разработка интерфейса доступа к памяти в аппаратно-программном модуле доверенной загрузки / И. Ю. Леонтян. — Текст : непосредственный // Исследования молодых ученых : материалы LXX Междунар. науч. конф. (г. Казань, декабрь 2023 г.). — Казань : Молодой ученый, 2023. — С. 1-5. — URL: https://moluch.ru/conf/stud/archive/504/18254/ (дата обращения: 08.05.2024).



В современном мире вопрос защиты информации является одним из самых актуальных в сфере информационных технологий. Одним из методов защиты информации персонального компьютера считается запрет доступа посторонних лиц к операционной системе. Устройством, выполняющим такую роль, является аппаратно-программный модуль доверенной загрузки (АПМДЗ).

Производством и поддержкой АПМДЗ занимается фирма «Анкад». В рамках опытно-конструкторских работ было разработано несколько разновидностей таких модулей (АПМДЗ-Е3, АПМДЗ-МИНИ и др.). Все они различаются производительностью микроконтроллера, форм-фактором разъема подключения и другими характеристиками. Особенностью АПМДЗ-М2 является то, что в микроконтроллере физически отсутствует один из видов памяти — FRAM-память, все данные модуля хранятся в eMMC-памяти. Основные последствия такого технического решения это потеря в скорости доступа к памяти, но возрастающее число циклов перезаписи.

При работе прошивки АПМДЗ необходимо записывать некоторые данные о пользователях, логировать события, а также сохранять считывать сохраненные данные для дальнейшего пользования.Вся работа с памятью происходит через интерфейс памяти. Общая структура функций такова:

<код ошибки> Название функции (<буфер данных>, <отступ>, <размер>)

— Код ошибки — числовое значение, возвращаемое из функции, сигнализирующее о статусе операции (успех / ошибка)

— Буфер данных — область памяти, куда передаются данные при чтении, либо откуда читаются данные при записи

— Отступ — числовое значение, указывающее, с какой структурной единицы памяти начинать чтение

— Размер — числовое значение, указывающее размер читаемых / записываемых данных

Почти все функции работы с памятью реализованы с похожей сигнатурой. Проблема в том, что во FRAM-памяти интерфейс позволяет обращаться к данным начиная с любого байта, в eMMC же доступ осуществляется поблочно. Это значит, что элементарной единицей eMMC-памяти является блок, размера которого равен 512 байт.

Исходя из этого, возникают следующие варианты решения проблемы:

  1. Модифицировать интерфейс работы с eMMC-памятью так, чтобы он поддерживал побайтовое чтение данных. Такой вариант плох тем, что придется менять передаваемые параметры во всех местах вызова функций интерфейса работы с eMMC-памятью
  2. Разработать отдельный вариант прошивки АПМДЗ на моделях, поддерживающих FRAM-память и моделях, где этот вид памяти отсутствует. Это чревато множественным дублированием кода и ведением двух схожих проектов, которые отличаются незначительно друг от друга.
  3. Реализовать интерфейс FRAM-памяти, используя функции работы с eMMC-памятью и переопределять интерфейс памяти в тех вариантах прошивки и на тех моделях АПМДЗ, где это необходимо. Такой вариант решения проблемы будет самым выгодным из-за минимального числа изменения и использования уже существующих наработок.

Было принято решение реализовать интерфейс доступа к памяти в отдельном файле исходного кода и подключать его к заголовочному файлу интерфейса при сборке прошивки для отдельных типов АПМДЗ.

Интерфейс должен быть реализован на языке C, он больше всего подходит для встроенных систем благодаря производительности, кроме того, вся прошивка выполнена также на С. Компиляция программного обеспечения проходит средствами IAR Build Tools, в качестве программной среды выбран редактор Sublime Text.

Далее, следует решить проблему соответствия данных, хранящихся во FRAM и eMMC памяти. Из-за расхождения интерфейсов возникают следующие ситуации обращения к памяти:

  1. Через FRAM-интерфейс были запрошены данные размером не более одного блока eMMC, и все данные хранятся в пределах одного блока данных.
  2. Запрошенные данные не превышают размером один блок, но их расположение таково, что придется считать два блока eMMC-памяти и объединить возвращаемые данные в буфер.
  3. Запрошенные данные не только превышают размером один блок, но и их расположение таково, что понадобится считывать более двух блоков данных и объединять нужные данные в общий буфер.

Можно сразу подумать, что достаточно динамически выделить память, равную количеству считываемых блоков, а затем оттуда извлечь нужные данные. Проблема в том, что такой метод будет крайне ненадежным во встроенных системах. Размер считываемых/ записываемых данных может быть очень большим, и в микроконтроллере попросту не хватит не аллоцируемой памяти, чтобы вместить все данные, что приведет к сбою системы.

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

Такой алгоритм хоть и будет менее эффективен по времени, его надежность намного выше, так как все данные объявлены в стеке микроконтроллера.

Для реализации данного алгоритма понадобится хранить переменные со следующими значениями:

— Номер очередного блока для считывания, нужен для передачи в качестве параметра в функцию чтения из eMMC-памяти

— Размер данных, которые нужно считать из очередного блока, также передается как параметр

— Размер данных, оставшихся для считывания, используется, чтобы контролировать, когда следует перестать читать данные из eMMC

Алгоритм чтения и записи внешне очень похожи друг на друга, их единственное отличие в назначении входного параметра буфера. Если при чтении данные из eMMC будут переданы в буфер, то при записи, наоборот, данные из буфера будут записаны в eMMC.

При записи в eMMC данные все равно читаются в рабочий буфер, затем данные из входного буфера передаются в рабочий буфер, и затем уже модифицированные рабочий буфер возвращается в eMMC

Кроме самих методов чтения и записи, следует реализовать методы инициализации, тестирования и чтения/записи с сохранением контрольной суммы.

Из-за специфики eMMC-памяти, ее тестирование и инициализация проходит намного раньше FRAM-памяти, поэтому повторное тестирование не требуется. Тем не менее, такие методы должны быть, так как они применяются в других местах прошивки. Чтобы не нарушать бизнес-логику прошивки, данные методы возвращают успех.

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

Наконец, осталось позаботиться о том, что исходный код будет автоматически подключен для нужного типа АПМДЗ. Это выполняется с помощью внутренних программных флагов, указывающих, для каких типов АПМДЗ поддерживается переопределение интерфейса записи во FRAM-память.

Литература:

  1. Кнут, Д. Э. Искусство программирования для ЭВМ. Том 1. Основные алгоритмы. / Д. Э. Кнут. —: Мир, 1976. — 735 c.
  2. Вирт, Н. Алгоритмы и структуры данных. / Н. Вирт. —: ДМК Пресс, 2010. — 272 c.
  3. Подбельский, В. В. Курс программирования на языке Си. / В. В. Подбельский. —: ДМК Пресс, 2018. — 384 c.
  4. Прата, С. Язык программирования C. Лекции и упражнения. / С. Прата. —: Диалектика-Вильямс, 2018. — 928 c.
  5. Стивенс, Р. Алгоритмы. Теория и практическое применение. / Р. Стивенс. — 2-е изд. —: Эксмо, 2022. — 544 c.