Android: Partition tables

In this article, I will tell you about partition tables for MTK and QCOM devices.
Unlike the OS on computers, smartphones don’t have dynamic partition table.

Android

How to view partitions

To view the main partitions, you just need to perform one of two methods:

To view all partitions, you need a superuser rights or TWRP recovery.

Bootloaders

Bootloader is a low-level program which manages boot modes and then calls kernel to load the OS or recovery kernel to load recovery ramdisk.

As we know, Android has several alternative boot modes. You will learn more about them in my next article.

ABOOT (UBOOT on MTK) is the first bootloader. This partition contains the low-level software for power and volume buttons. Each key combination corresponds to a different boot mode.

SBL is a secondary bootloader. Its code is executed after first bootloader, and depending on the boot mode, either the kernel is loaded — boot.img, or boot for recovery, or fastboot.

Main partitions

To begin with, it is worth noting that information about the main partitions of the partition tables on the Internet has been outdated: after Project Treble, a vendor partition was added, and later the arm64_ab architecture was released with a new partition table and mounting the system partition to the root (SAR, System As Root). And later, the manufacturers updated A-only — they added another partition and updated the recovery partition.

In this article I will cover all the main types of the partition table.

Before Android 8.1 and Project Treble, the partition table looked like this:

System-only partition table

Then Project Treble given us a new partition — vendor. Our diagram has become a little more complicated:

Treble-compatible partition table

With the arrival of Treble, the world saw another architecture — arm64_ab and a new complicated partition table. Now the low-level recovery partition is right in boot. The cache partition was removed, and the main system partitions were duplicated. Such partition table clearly takes up more memory, and less space is left on storage.

But the main feature is that with this architecture, Android devices can update in the background! You download the update and continue to use your phone, and then just reboot into the new system, which is installed on duplicate partitions. And if update was unsuccessful, phone will boot into the first half of the partitions.

A/B partition table

Old architecture arm64_a wasn’t abandoned. The manufacturers added a product partition and mounted system to the system_root:

SAR A-only partition table

SoС-specific partitions

SoC-specific partitions implement a SoC-specific low-level instructions independently of the OS.

is_unlocked
is_tampered
is_verified
charger_screen_enabled
display_panel
bootloader_version
radio_version

You can view values by typing fastboot oem device-info command in ADB shell. Before loading the OS, bootloader checks rsadvinfo’s data.

Sources

This article is based on my previously made article in VK Unix Power group.
Source

throw new NoSuchElementException("Bio is not found");

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store