Разделы памяти Android

В этой статье я расскажу основные разделы памяти AOSP для MTK и QCOM устройств.

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

Как посмотреть разделы памяти

Два варианта прсмотра смонтированных (не всех) разделов накопителя на своем телефоне:

  1. Установить Device Info HW и посмотреть разделы

  2. Скачать Termux и ввести команду mount

Для просмотра всех разделов нужны или root-права, или терминал в TWRP. Так же вводите команду mount в терминале (Termux или терминал TWRP) и смотрите разделы.

Загрузчики

Загрузчик ОС предназначен для того, чтобы непосредственно загружать эту ОС. О том, как Android запускается, вы узнаете в моих следующих статьях.

Как нам известно, Android имеет несколько альтернативных режимов загрузки. Подробнее о них вы узнаете в моей следующей статье.

ABOOT (UBOOT на МТК) — первичный загрузчик. В этом разделе содержится низкоуровневое ПО для обработки нажатий кнопок питания и громкости. Каждая комбинация клавиш соответствует своему режиму загрузки.

SBL — вторичный загрузчик. Его код выполняется после aboot и в зависимости от режима загрузки загружает или ядро — boot.img, или recovery boot, или fastboot.

Основные разделы

Для начала стоит отметить, что в Интернете информация про основные разделы накопителя давно устарела: после Project Treble добавился раздел vendor, а позже была выпущена arm64_ab архитектура с принципиально новой таблицей разделов и монтированием системного раздела в корень (SAR, System As Root). А еще позже производители обновили A-only — добавили еще один раздел и обновили рекавери. В этой статье я расскажу про все основные виды разметки памяти.

BOOT — ядро Android.

VENDOR — раздел, содержащий много бинарников и драйверов для всего и вся. Ранее все эти бинарники находились в системном разделе, с приходом Project Treble их отделили в отдельный раздел.

PRODUCT — новый раздел (его добавили в конце 2019 года), содержащий предустановленные приложения и сервисы.

SYSTEM — главный системный раздел. В нем содержатся фреймворки, множество файлов-пропов, fstab, оверлеи, RRO, ПО для работы с бинарниками из vendor. Ранее в этом разделе хранили еще и приложения (хранят и сейчас, но только самые важные).

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

Зная эти разделы, можно посмотреть на разметку памяти в целом.

До прихода Android 8.1 и Project Treble таблица разделов выглядела так:

Blobs-in-system разметкаBlobs-in-system разметка

Затем Project Treble принес нам новый раздел — vendor. Наша схема немного усложнилась:

Treble-compatible разметкаTreble-compatible разметка

С приходом Treble мир увидел еще одну архитектуру — arm64_ab и новую усложненную разметку. Теперь низкоуровневый раздел recovery находится прямо в boot. Раздел cache убрали (вместо него оставили урезанный fota), а остальные системные разделы дублировали. Такая разметка явно занимает больше памяти, и на storage остается меньше места.

Но весь подвох в том, что с такой архитектурой Android-устройства могут обновляться в фоне! Вы скачиваете обновление и продолжаете использовать свой телефон, а затем просто перезагружаетесь в новую систему, которая установилась на разделы-дубликаты. А в случае неудачного обновления вы загрузитесь в первую половину разделов.

AB разметкаAB разметка

Разметку старой архитектуры arm64_a не забросили. Производители добавили раздел product и примонтировали system в корень — system_root:

System-as-root разметкаSystem-as-root разметка

SoС-специфичные разделы

MODEM (RADIO на MTK) — модем телефона (baseband). Этот раздел отвечает за сигналы и на старых устройствах может управлять Wi-Fi, Bluetooth и GPS (на большинстве новых устройств они обрабатываются ядром). Модем — это мини-ОС для чипа сотовой радиосвязи, имеющего собственный процессор. Раздел модема особенный, потому что для работы кода modem в телефонах стоит собственный отдельный процессор, поэтому модем не входит в образ системы в ее собственном разделе.

RIL (Radio Interface Layer) — низкоуровневый раздел-прослойка между ядром ОС и baseband. Задача RIL — преобразовать все телефонные запросы из среды телефонии Android и сопоставить их с соответствующими AT-командами модема и обратно. Набор команд AT используется для связи с модемом, то есть процессором основной полосы частот (BP), который должен иметь процессор на устройствах Android в дополнение к обычному процессору, то есть процессору приложений (AP).

TZ (TrustZone) — раздел, использующийся на ARM-архитектурах для дополнительных функций безопасности. Он объединяет ключ шифрования пользователя с аппаратным ключом, сгенерированным процессором шифрования, чтобы затруднить нарушение безопасности.

RPM (Resource & Power Management), который запускает выполнение Primary / Primitive BootLoader (PBL) в BootROM — контролирует питание радио, модема и т. Д.

DSP (Digital Signal Processor) — раздел на Qualcomm-устройствах для помощи в таких вещах, как плавное воспроизведение видео (процессор мультимедиа и датчиков в реальном времени).

HYP (HyperVisor) — гипервизор. Нужен для поддержки виртуализации.

PERSIST — хранит драйвера датчиков Wi-Fi, Bluetooth, LTE/CDMA/GSM и Hotspot.

RECOVERY — раздел с меню восстановления.

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

FOTA — раздел, куда скачиваются OTA обновления. Но в большинстве случаев вместо fota эти обновления загружаются в раздел cache.

FSC — файлы cookie файловой системы модема.

SSD (Secure Software Download) — раздел памяти для хранения некоторых зашифрованных ключей. Эти ключи проверяются при скачивании обновлений ОС.

RSADEVINFO — информация об устройстве, включая:

is_unlocked
is_tampered
is_verified
charger_screen_enabled
display_panel
bootloader_version
radio_version

Содержимое этого раздела отображается командой fastboot oem device-info. Перед загрузкой загрузчик проверяет данные именно этого раздела.

FRP (Factory Reset Protection) — Специальный раздел, созданный для сохранения информации об аккаунтах производителей смартфона (Например, Mi Account на Xiaomi). Хитрость заключается в том, что при сброче настроек FRP не стирается, поэтому избавиться от входа в ми аккаунт на украденном сяоми у вас не получится.

DEVCFG — используется TZ для обновлений.

LKSECAPP — онлайн-проверка и обновление компонентов RPM.

TZLIMITS — драйвер Qualcomm Limits Management Hardware. Хранит метаданные для вторичного загрузчика SBL.

SYSCFG — Регулятор Qualcomm Core Power Reduction для повышения производительности и энергосбережения процессора приложений за счет управления напряжением.

DIP, MDTP — проверка загрузки. Данный раздел реализует технологию Qualcomm SafeSwitch для блокировки и отслеживания украденных телефонов.

CMNLIB, KEYMASTER, SEC — верификация загрузки по хэшу. Если хэш ОС не совпадает с хэшем, пописанным в keymaster, ваш телефон не загрузит ОС. Это главная причина, почему нельзя прошить кастомную прошивку на заблокированный загрузчик.

OEMKEYSTORE — относится к data Full Disc Encryption (FDE).

MCFG (Modem Configuration) — на устройствах с двумя SIM-картами загружает файлы MBN (двоичные файлы модема).

SPLASH — заставка или загрузочный логотип, который появляется при загрузке устройства на этапе ABOOT. После него уже подгружается бутанимация «Powered by Android».

CHGLOGO — тот самый экран зарядки разряженного телефона.

MSADP, APDP, DPO — политика отладки.

EFS — раздел, содержащий информацию про IMEI, SN и IMEI SV.

© Habrahabr.ru