как работают загрузочные разделы eMMC (/dev/mmcblk0boot0) и их обработка в Linux

Вопрос или проблема

Я хотел бы полностью понять (особое?) обращение с загрузочными разделами eMMC (в Linux).

Насколько я понимаю, eMMC предлагает некое низкоуровневое разбиение на разделы. Существует особое значение для (по крайней мере) 2 областей: BOOT и RPMB. BOOT обычно приводит к узлам устройств, таким как: /dev/mmcblk1boot0 или /dev/mmcblk1boot1. RPMB обычно обеспечивает узлы устройств, такие как: /dev/mmcblk1rpmb, но в данный момент меня не интересуют эти разделы RPMB. (к вашему сведению: интересная статья об этом находится здесь: https://sergioprado.blog/rpmb-a-secret-place-inside-the-emmc/)

Эти разделы могут, но не обязаны использоваться для самого процесса загрузки. Работая над обновлением устаревшего проекта (ядро Linux 3.12), оказалось, что в прошлом эти загрузочные разделы могли использоваться как любое другое устройство. Поэтому кто-то создал таблицу разделов и файловую систему на их основе. Это действительно работает, как ожидалось, и вы даже могли видеть эти разделы в работающей системе Linux, как это: /dev/mmcblk1boot0p1.
В то время как в более современной системе (ядро Linux 6.1) эти разделы больше не видны. Интересные детали:

  • fdisk все еще отображает разделы
  • partx может видеть эти разделы, но не может сделать их доступными
  • разделы не могут быть смонтированы
  • использование параметра командной строки ядра blkdevparts, похоже, не помогает (или я использовал его неправильно ^^)

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

Я заметил, что в более новых версиях Linux эти загрузочные разделы защищены от записи. Идея, кажется, состоит в том, чтобы предотвратить случайное нарушение системы. Также я знаю, что это можно изменить во время выполнения, просто записав 0 в force_ro в sysfs echo "0" > /sys/class/block/mmcblk1boot0/force_ro.
Но в этой ситуации некоторые данные фактически хранятся в этих разделах, и они не нужны для процесса загрузки, но очень нужны во время выполнения системы.

У меня есть следующие вопросы:

  • что изменилось за это время?
  • является ли это преднамеренным поведением?
  • существует ли способ все еще сделать эти разделы доступными?

любая подсказка или разъяснение по этому вопросу были бы очень полезны и очень ценны.

спасибо Кристиан

Ответ или решение

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

Теория

eMMC (embedded MultiMediaCard) – это вид флеш-памяти, встроенной в устройства, которые часто используются в смартфонах, планшетах и встраиваемых системах. Поддержка управления eMMC реализована в Linux, но различия между версиями ядер могут влиять на работу с устройствами.

Каждое eMMC устройство имеет несколько специальных областей, из которых наиболее известны BOOT и RPMB (Replay Protected Memory Block). BOOT-разделы, как правило, представлены именами устройств, такими как /dev/mmcblk1boot0 и /dev/mmcblk1boot1. Эти разделы могут использоваться для хранения критически важной информации, необходимой для начальной загрузки системы.

Обработка в Linux

В ядре Linux BOOT-разделы имеют особое значение и могут иметь особенности, отличающиеся от обработки обычных разделов хранения данных:

  • Запись защиты: В более новых версиях ядра Linux такие как 6.1, BOOT-разделы eMMC защищены от записи по умолчанию, что предотвращает случайное удаление или повреждение критических данных. Это положение можно временно снять, изменив соответствующий флаг в sysfs, например, командой echo "0" > /sys/class/block/mmcblk1boot0/force_ro.

  • Партиционирование: В предыдущих версиях Linux, таких как 3.12, разделы BOOT иногда использовали как обычные устройства, на которые могли быть созданы таблицы разделов и файловые системы. Однако в более новых системах такая практика может не поддерживаться должным образом из-за стремления к обеспечению стабильности и безопасности системы.

  • Доступность: Оказалось, что при попытке использования таких BOOT-разделов как стандартных блоков хранения данных в более новых версиях системы, возникают проблемы с их монтированием и доступностью. Инструменты, такие как fdisk и partx, могут видеть их наличие, но не предоставляют должного функционала для полноценной работы с ними как с обычной файловой системой.

Пример

Работа и взаимодействие с BOOT-разделами в более новом ядре может включать процедуры, которые ранее не требовались. Например, снятие защиты от записи необходимо для того, чтобы операции записи могли быть выполнены при необходимости. Если предположить, что вам нужно временно открыть доступ к этим разделам, можно выполнить следующее:

  1. Узнать текущую защиту от записи:

    cat /sys/class/block/mmcblk1boot0/force_ro
  2. Если защита активна, временно отключить её:

    echo "0" > /sys/class/block/mmcblk1boot0/force_ro
  3. После изменения сделать необходимые операции с блочными устройствами.

  4. Восстановить защиту:

    echo "1" > /sys/class/block/mmcblk1boot0/force_ro

Применение

Понимание особенностей работы с BOOT-разделами eMMC имеет критически важное значение для тех, кто поддерживает или разрабатывает операционные системы на базе Linux, особенно для встраиваемых применений. Обеспечение безопасности и целостности данных в BOOT-разделах является нижайшим приоритетом, так как повреждение данных в этих областях может привести к неработоспособности устройства.

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

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

Оцените материал
Добавить комментарий

Капча загружается...