Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save minhdangoz/6706dea8bb273af7439ed65511e53b88 to your computer and use it in GitHub Desktop.
Save minhdangoz/6706dea8bb273af7439ed65511e53b88 to your computer and use it in GitHub Desktop.
Some information about firmware files
Some informations about partitions from Android devices.

Mediatek - MTK Helio/Dimensity - MTnnnn

File partition - Description

pgpt

Is an abbreviation for Partition GUID PartitionTable image. It is a file that contains the partition layout and information for a disk or storage device using the GUID Partition Table (GPT) scheme. GPT is a newer partitioning scheme that has largely replaced the older Master Boot Record (MBR) in modern systems. It is designed to overcome the limitations of MBR, such as the maximum partition size and number of partitions supported. The "pgpt.img" file typically contains a binary image of the GPT, including information about the number, size, and type of partitions on a disk. This file is often used in various software tools and utilities to manage and manipulate partitions on GPT-based disks.

flashinfo

Is a binary image file that contains information about the device's flash memory. It typically stores data such as the partition layout, bootloader configuration, and other device-specific information required for the proper functioning of the device's firmware. This file is commonly found in firmware or system images used for flashing or updating the operating system on Android devices.

recovery.img

The recovery partition is a ramdisk mode with kernel - dt - dtbo files (often referred to as the recovery mode) used for various system maintenance and recovery tasks. This partition is responsible for functions like installing firmware updates, performing factory resets, clearing caches, and backing up or restoring system data. The recovery.img file can be used to flash or replace the recovery partition on an Android device, often through tools like fastboot or custom recovery software.

boot.img

Is a image file that contains kernel file, ramdisk, and other necessary files that are loaded into the device's memory during the boot process. The kernel is responsible for managing hardware resources, executing system processes, and acting as an interface between the hardware and the software on the device. The ramdisk contains the initial file system and essential system files needed for the boot process.

dpm.img

Is a system file that is generated by Android devices. It stands for Device Policy Manager and contains the device-specific settings and policies for managing enterprise functionalities on the device. This file is used by Mobile Device Management (MDM) solutions to enforce policies, security settings, and restrictions on the device.

dtbo.img

Is a binary file used in the Android operating system to store the Device Tree Blobs Overlay. (DTBO) has informations in the responsible for configuring hardware-specific settings and customizations for various devices. It is commonly found in the boot image of an Android device and is loaded by the bootloader during the boot process. The dtbo.img file contains the device-specific configuration data that can be applied dynamically to the device's device tree.

persist.EXT4_IMG

It contains persistent system configurations and settings that are retained across reboots and software updates. This file typically stores device-specific information such as network configurations, keys for decript, SIM card data, and hardware settings. It is separate from the main system partition and is used to ensure the persistence of critical system-level data.

gz.img

GenieZone hypervisor about camera drivers, settings, performance, improvements, etc. GenieZone is a software that allows users to create virtual environments or containers on their computers. These containers can be used to isolate specific applications, files, or processes from the main operating system.

lk.img

Refers to a file that contains the bootloader image of a device and called Little Kernel. Bootloader is the initial program that runs when a device is powered on, and it helps load the operating system or firmware. The lk.img file contains the necessary software to initialize the hardware components, verify the integrity of the operating system, and start the booting process.

logo.bin\img

Is typically a file extension used for an image file containing a logo or emblem. It is commonly used in software or website development to include company logos in the user interface or in promotional material and charger logos. The file format can vary but it is often saved as a compressed image file such as JPEG, PNG, or GIF.

mcupm.img

Is a hardware module which is used for MCUSYS Power Management. Is an image file used by main control board. It contains the necessary files and instructions to install the updates and upgrade its functionality. The mcupm.img file is typically loaded onto a USB drive and then connected to the projector for a firmware update. Module Control Update Power Management

md1img.img

Is a binary image file that contains the MD1 - Modem 1 component of a device, typically a smartphone. The MD1 is responsible for handling cellular communication and data transfer functions. The md1img.img file often accompanies firmware updates and is used to update or flash the firmware of the MD1. It is a crucial component that ensures proper functioning of the modem and its associated cellular capabilities. The modem is responsible for handling the wireless network connectivity, such as 3G, 4G, or Wi-Fi, on the device.

odm.img

Is an Android system image file that contains the Original Device Manufacturer partition. It is typically found on Android devices that use the Project Treble architecture. The ODM partition contains various vendor-specific files and customizations required to run the device.

odm_dlkm.img

Is a system image file used by Android devices. It is typically found in the OEM (Original Equipment Manufacturer) partition of the device's internal storage. This file contains the operating system files and drivers specific to the device's hardware, and it helps in the proper functioning of the device. The "odm_dlkm" stands for Original Device Manufacturer Device-specific Linux kernel module" and it is related to the low-level drivers required for the device's hardware components.

scp.img

Refers to the System Control Processor that contains the firmware or software. The SCP, which is a specialized microcontroller or processor found in network devices or communication equipment such as routers, switches, and network appliances. The SCP.img file contains the code necessary for the SCP to perform its functions, manage communication protocols, and control the hardware components of the device.

spmfw.img

Is a firmware image (fw) file associated with MediaTek's Secure Platform Module. SPM is a hardware security solution for mobile devices that provides features such as secure boot, secure storage, and secure communication. The spmfw.img file contains the firmware code and data used by the SPM to perform its security functions.

sspm.img

Is an image file that contains the firmware for the System Security Processor Manager of a device. The SSP is a dedicated processor within a computer system that handles security-related tasks such as encryption, decryption, and authentication. The sspm.img file typically contains the software code and configuration settings for the SSP, which is often a separate chip or component on the motherboard. The firmware in this file is responsible for controlling the operation and behavior of the SSP to ensure the security and integrity of the system.

tee.img

Is typically associated with the Trusted Execution Environment in computing systems. TEE is a secure area within the main processor of a device that ensures the confidentiality and integrity of sensitive data and processes. The tee.img file contains the secure operating system necessary for TEE's proper functioning. It is commonly found in mobile devices, such as smartphones, that incorporate TEE technology.

vbmeta*.img

Is a partition image file used in Android devices with A/B partition layout. It contains the AVB - verification metadata for the system and vendor partitions, which are used to verify the integrity and authenticity of these partitions before loading them into memory. The vbmeta.img file is digitally signed and checked by the bootloader during the device boot process to ensure that the system hasn't been tampered with and that the firmware being loaded is genuine and unmodified.

proinfo

Is a partition image file on Android devices that contains the important device-specific information, such as the product code, IMEI, MAC address, and other hardware-related data. It is typically located in the system partition of the device's storage and is responsible for providing crucial information for device identification and configuration. Modifying or replacing this file can potentially lead to device malfunction or even bricking if not done correctly.

misc

Is a binary image file that contains miscellaneous system information, settings, or configurations for an Android device. It is commonly found in the system partition of Android devices. The file may include details such as bootloader state, recovery mode flags, and other specific parameters related to the device's software and hardware configurations. The contents of the misc.img file are typically used by the device's bootloader during the boot process to determine the appropriate actions or settings required.

para.bin/img

Related to device firmware or software updates. It typically represents a partition table file that contains information about the layout of device partitions. These partitions include the system, vendor, boot, recovery, userdata, cache, and other essential areas on the storage of the device. The para.bin file is often used in conjunction with tools like fastboot or FlashTools to flash firmware or update files onto Android devices. When flashing a new firmware or updating the device, the partition table information in the para.bin file helps to correctly allocate space for different partitions and ensure a successful installation process. In summary, the para.bin file provides partition table details for firmware or software updates and plays a crucial role in the overall structure and functioning of the Android system.

expdb

Is a binary file that contains the information and configurations related to the Android package manager. This file is located in the /data directory of an Android device and it is used by the Android system to manage the installation, update, and uninstallation of applications on the device. The expdb.bin file consists of a database that stores details about the various packages installed on the device, such as package name, version number, installation path, permissions, signatures, and other metadata. It is used by the system to keep track of the installed packages, manage their updates, and resolve dependencies between different applications. This file is critical for the proper functioning of the Android package manager (PackageManager) and should not be modified or deleted manually, as it could lead to issues with the installation and management of applications on the device.

frp

Is a Factory Reset Protection binary file, a security feature on Android devices that is designed to prevent unauthorized users from accessing the device after a factory reset or software update. The frp.bin file contains the necessary security measures and authentication files to verify the user's identity and prevent any potential bypass of the FRP protection. The frp.img file is a firmware file that is used to enable or disable FRP on Android devices. It is commonly used in the process of resetting an Android device to its factory settings, especially if the device is locked or inaccessible due to FRP. The frp.img file is flashed to the device using tools like FlashTools or fastboot, and it helps remove the Google account verification step during the setup process after a factory reset.

nvcfg.EXT4_IMG

This file contains the non-volatile device-specific configuration settings for the various parameters related to the GPU's performance and behavior, such as frequency, voltage, temperature thresholds, and power management settings. These configuration settings are specific to the device's hardware and are utilized by the GPU driver to optimize performance and power efficiency. The nvcfg.bin file is typically located in the system partition of the Android device and is not directly accessible or editable by regular users.

nvdata.EXT4_IMG

Is a binary file that contains non-volatile device configuration data. This data includes important settings and calibration data related to the device's hardware and network connectivity. is a firmware file that contains important device-specific data, configuration settings, and calibration data for certain hardware components on Android devices. This file is typically found in the /system/etc/mddb/ directory on the device's storage. It stores information related to the device's radio frequency, Wi-Fi, Bluetooth, and other system settings. The nvdata.img file is used by the device's firmware to initialize and configure these components during system startup.

metadata

Is a file that contains metadata information about the specific application package. Stores information such as the layout and organization of data, the location of files and directories, file permissions, and other attributes related to the file system. It helps the operating system to manage and access the data stored on the respective file system or partition. Stores details such as the package name, version code, version name, signing information, and other relevant information about the APK. This file is used by the Android system and package manager to verify the integrity and authenticity of the app package, ensure that it has not been tampered with, and manage the installation and updates of the app.

protect1\2.EXT4_IMG -- protect_f_s

Contains a copy of the protected or encrypted data from a device or storage media. Also known as the Product Partition, is a read-only partition. Is to store system-specific configuration files, firmware, and other system-related data that are required during the boot process. It ensures the integrity and security of the system by protecting critical files and preventing unauthorized modifications. Contains cryptographic digests (SHA256 hash values) of each block in the Android system partition. These hash values are used to verify the integrity of the system partition during the device boot process. If any modifications or tampering attempts are detected, the device will prevent the booting of the modified software. Contains the metadata and cryptographic signatures necessary for verifying the integrity of the boot and system partition. It contains information like the hash values of the boot and system partitions, public key certificates used for signature verification, and the version of AVB being used.

seccfg

It contains Security configuration settings for the device, including encryption, device lock or unlock, and other security features. It is usually located in the device's system partition and is typically not accessible to the user unless the device is rooted. Stands for Secure Configuration Image. This file contains various configuration settings related to the device's security. These settings include secure boot settings, cryptographic keys, device and memory partition configurations, and other security-related parameters.

otp

Contains the One-Time Programmable data for the Android device. This data is used for various purposes, such as device-specific configuration, unique identifiers, device calibration data, and security keys. The OTP data is stored in read-only memory and cannot be modified or erased, hence the term "One-Time Programmable".

pi_img

Is a system image used by the Device Policy Manager (DPM) framework. This file contains the encrypted security policy data and configuration settings applied to managed devices. It is stored in the data partition of an Android device and is used to enforce device management policies and restrictions set by an administrator or a mobile device management (MDM) solution. Refers to the private image" file. It is a sparse image file containing the user's data and applications installed on an Android device.

sec1

It is specifically used for security purposes on Android devices. This file typically contains security-related data, such as uthentication information, encryption keys, and secure boot configurations. Sector image files are used to capture or replicate the contents of a specific sector on a storage device.

nvram

Is a binary file that stands for Non-Volatile Random Access Memory. It is a type of firmware that stores settings and onfiguration data for a device. The file contains information such as device-specific settings, network parameters, and hardware configurations. This file is commonly found on Android devices and is used to preserve and restore such as IMEI numbers, network settings, and calibration data.

boot_para

The boot parameter information includes details such as memory map, kernel command line parameters, initial boot configuration, and device-specific settings required for successful booting of the device. These parameters include configurations and settings that are necessary for the bootloader and kernel to properly initialize the device hardware and software during the boot-up sequence. Is read by the bootloader during the booting process. It helps the bootloader determine how to configure the hardware components, such as the CPU, memory, display, and other system peripherals, for the successful startup of the device. It also contains information such as the kernel command line options, kernel address, and other boot-related settings.

md_udc

Is responsible for storing various data related to the User Datagram Control driver. Maybe a Module but can used as metadata partition too. Specifically the "USB Driver Composer" or "UDC" functionality. This file contains the necessary drivers and software components for the device to communicate with a computer via USB connection. It allows for data transfer, software updates, and other interactions between the device and the computer. The UDC driver is used to manage USB functionality on the device, including USB connections to other devices and USB debugging. The md_udc.img file contains the firmware or software code that controls the UDC driver, allowing it to communicate with the hardware and perform its functions.

vendor_boot.img

Is a boot image specific to the vendor partition on Android devices that contains the necessary files and instructions for the device to boot up and initialize the vendor-specific hardware, firmware, and software components. This partition is separate from the system partition and is maintained by the device manufacturer or vendor to customize and optimize the software for their specific hardware configuration.

vendor_dlkm.img

Is an image file that contains the vendor-specific Driver Loadable Kernel Module for Android devices. DLKMs are kernel modules (*.ko) used by the Android operating system to extend functionality or provide drivers for specific hardware components or features. The vendor_dlkm.img file is typically found in Android firmware or system update packages, and it is used during the bootloader or firmware update process to update or install the vendor-specific DLKM on the device.

preloader_raw.img

Is a component of the Android operating system. It is a specific partition on the device's internal storage that contains the preloader firmware. The preloader firmware is responsible for initializing the hardware components of the device during the boot process. It helps in connecting with the bootloader and loading the necessary software components for the device to function properly. This file is typically found on MediaTek-based Android devices.

product.img

Is a system partition image file used in Android operating systems. It contains the complete firmware or system software for a specific Android device model. This file is typically used for flashing or installing custom ROMs, firmware updates, or modifications on Android devices using specialized software like TWRP (Team Win Recovery Project) or fastboot.

vendor.img

Is a system image file that contains various files and resources specific to the vendor\OEM of a device running on the Android operating system. It includes drivers, libraries, and proprietary components necessary for the proper functioning of the device. The vendor.img file is typically found in the system partition of an Android device and is responsible for providing hardware-specific functionalities to the operating system.

Some information about firmware files.1

File Description Information
boot.img linux kernel image regular image or EFI in newer models
dpm.img Deep idle power management firmware partially encrypted
dtbo.img Device Tree Binary Overlay information about SoC resources, for example, component models
gz.img GenieZone hypervisor its trusted applications in the form of elf files - the section is encrypted
lk.img Little Kernel second stage bootloader
logo.bin\img section with pictures that are displayed by LK when loading into different modes
mcupm.img power management Sensor Hub
md1img.img Modem DSP firmware, uses L4 RTOS, the partition itself consists of several components consider the firmware in the firmware
odm.img Original design manufacturers software
odm_dlkm.img ODM kernel modules often empty partition; dklm - dynamic loadable kernel modules
preloader_raw.img program to start flashing SoC partitions
product.img software specific to a particular phone
scp.img Sensor Hub main firmware (tinysys, FreeRTOS) runs on Cortex M4
spmfw.img SoC Power Management suspend state firmware
sspm.img Sensor Hub firmware Power management (tinysys) partially encrypted
tee.img Trusted Execution Environment
vbmeta*.img Android Verified Boot hashtree descriptors
vendor.img overlays specific to the SoC manufacturer OEM files
vendor_boot.img section with images of different RAM disks ramdisk from boot or/and recovery
vendor_dlkm.img section with mediatek-specific kernel modules dklm - dynamic loadable kernel modules

Why can some phones have all kinds of dpm/mcupm/spmfw, but in Are there any missing ones? As LK develops and a hypervisor is added, some of the blobs that were previously loaded by the kernel are now loaded and/or managed by LK itself, for example, and there are no file system drivers, so the blobs are placed in separate partitions. The same thing is observed with qualcomm, for example. The same applies to the VPU - in some models it is controlled by the kernel and its firmware is in the file system, and somewhere it is placed in its own partition.

Some images consist of subsections for ease of loading, because mtk does not even have an elf bootloader in LK, and the sections are divided into code/data, this is especially visible on tinysys sections. The modem has its own boot system, but there the components are also cut into parts: code, rw data, ro data, discardable, etc.

Footnotes

  1. Reference: Description of the various firmware files for the MTK - 4pda by Nothing89

Unisoc - SPD - Spreadtrum

File partition - Description

socko.img

Is not a common file format or extension. It could potentially be a custom or proprietary file format specific to a certain software or system. Without further context or information, it is difficult to determine the exact nature or purpose of the file. Has *.ko driver files - same like vendor_dlkm.img.

odmko.img

Same like odm_dlkm.img. Generally empty.

prodnv.img

contains important configuration and calibration data for the device's hardware components. It is specifically related to the Non-Volatile Memory (NVM) partition on the device. The prodnv.img file contains various settings and parameters that are used by the device's hardware and software to ensure proper functionality. This includes things like radio frequency calibration data, touchscreen calibration data, Wi-Fi and Bluetooth MAC addresses, and other device-specific information.

fbootlogo.img

Is a file used in the Android mobile operating system for storing the boot logo image. The boot logo is the image that appears on the screen when the device is turned on or restarted. It is typically displayed during the booting process and can be customized by manufacturers or users to personalize the appearance of their Android device. The fbootlogo.img file contains the binary data of the boot logo image.

trustos.img

Is a binary image file that contains the firmware of the Trust OS (Operating System) used in Android devices. Trust OS, also known as TrustZone OS, is a secure, isolated operating system that runs alongside the main Android OS, providing a secure environment for executing sensitive operations and protecting sensitive data. It handles security-related functions such as secure boot, secure storage, secure communication, and secure execution environment for trusted applications. The trustos.img file contains the pre-compiled binary code of Trust OS and is loaded during the boot process of the Android device.

############### Others - ?? - ???

cdt_engineering.img

Is a file format used in engineering software called a Custom Data Table (CDT). This file contains data related to customizations and settings specific to the engineering software application. It may include information such as user-defined parameters, formulas, calculations, and other data used for engineering analysis and design. The cdt_engineering.img file is typically used by the software to load and store the custom data table for use within the application.

External links

Here's a pdf file by mirfatif: ANDROID DEVICE PARTITIONS and FILESYSTEMS

Other reference: An Introduction to Android Firmware

Standard partitions from source android.

  • boot partition. This partition contains a kernel image and is created using mkbootimg. You can use a virtual partition to flash either image directly without flashing a new boot partition. This partition also contains the generic ramdisk in devices launched before Android 13.

  • kernel. The virtual kernel partition overwrites the kernel (zImage, zImage-dtb, Image.gz-dtb) by writing the new kernel image over the old kernel image. If the development kernel supplied is incompatible, you might need to update the vendor, system, or dtb partition (if present) with associated kernel modules.

  • ramdisk. The virtual ramdisk partition overwrites the ramdisk by writing the new ramdisk image over the old ramdisk image.

The overwrite operation determines the start location of the existing image in eMMC and copies the new image to that location. The new image (kernel or ramdisk) might be larger than the existing one; to make space, the bootloader can move data following the image or abandon the operation with an error.

  • init_boot partition. This partition contains the generic ramdisk for devices launching with Android 13 and beyond.

  • system partition. This partition contains the Android framework. Common system image used for OEM products.

  • odm partition. This partition contains original design manufacturer (ODM) customizations to system-on-chip (SoC) vendor board-support packages (BSPs). Such customizations enable ODMs to replace or customize SoC components, and implement kernel modules for board-specific components, daemons, and ODM-specific features on hardware abstraction layers (HALs). This partition is optional; typically, it's used to contain customizations so that devices can use a single vendor image for multiple hardware SKUs. For details, see ODM Partitions.

  • odm_dlkm partition. This partition is dedicated to storing ODM kernel modules. Storing ODM kernel modules in the odm_dlkm partition (as opposed to the odm partition) makes it possible to update ODM kernel modules without updating the odm partition.

  • recovery partition. This partition stores the recovery image, which is booted during the OTA process. Devices that support seamless updates can store the recovery images as a ramdisk contained in the boot or init_boot image (rather than a separate image).

  • cache partition. This partition stores temporary data and is optional if a device uses seamless updates. The cache partition doesn't need to be writable from the bootloader, but does need to be erasable. The partition size depends on the device type and the availability of space on userdata; typically, 50 MB–100 MB is sufficient.

  • misc partition. This partition is used by the recovery partition and is 4 KB or larger.

  • userdata partition. This partition contains user-installed apps and data, including customization data.

  • metadata partition. This partition is used to store the metadata encryption key when the device uses metadata encryption. The size is 16 MB or larger. It is not encrypted and its data is not snapshotted. It is erased when the device is factory reset. Usage of this partition is strictly limited.

  • vendor partition. This partition contains any binary that isn't distributable to AOSP. If the device doesn't contain proprietary information, you can omit this partition.

  • vendor_dlkm partition. This partition is dedicated to storing vendor kernel modules. Storing vendor kernel modules in the vendor_dlkm partition (as opposed to the vendor partition) makes it possible to update kernel modules without updating the vendor partition.

  • radio partition. This partition contains the radio image and is needed only for devices that include a radio with radio-specific software in a dedicated partition.

  • tos partition. This partition stores the binary image of the Trusty OS and is used only if the device includes Trusty. For details, see TOS Partitions.

  • product partition. This partition can now use permitted interfaces to install product-specific modules that aren't bundled with any other partitions.

  • system_ext partition. A new partition that can use system resources and can include system modules.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment