Разделы памяти Android
В этой статье я расскажу основные разделы памяти AOSP для MTK и QCOM устройств.
В отличие от ОС на компьютерах, смартфоны не имеют динамической разметки накопителя. Вместо этого вы найдете множество каких-то непонятных разделов с непонятными названиями. Давайте разбираться.
Как посмотреть разделы памяти
Два варианта прсмотра смонтированных (не всех) разделов накопителя на своем телефоне:
Установить Device Info HW и посмотреть разделы
Скачать 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 разметкаЗатем Project Treble принес нам новый раздел — vendor. Наша схема немного усложнилась:
Treble-compatible разметкаС приходом Treble мир увидел еще одну архитектуру — arm64_ab и новую усложненную разметку. Теперь низкоуровневый раздел recovery находится прямо в boot. Раздел cache убрали (вместо него оставили урезанный fota), а остальные системные разделы дублировали. Такая разметка явно занимает больше памяти, и на storage остается меньше места.
Но весь подвох в том, что с такой архитектурой Android-устройства могут обновляться в фоне! Вы скачиваете обновление и продолжаете использовать свой телефон, а затем просто перезагружаетесь в новую систему, которая установилась на разделы-дубликаты. А в случае неудачного обновления вы загрузитесь в первую половину разделов.
AB разметкаРазметку старой архитектуры arm64_a не забросили. Производители добавили раздел product и примонтировали system в корень — system_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.