Mainly there are 6 partitions in Android phones, tablets and any other Android devices. Below is the list of partition for Android File System.
Note from author: There might be some other partitions available & may also differs from Model to Model. But baseline partitions mention above do not change in any Android devices.
For SD Card Fie System Partitions.
Note to User(s):Only /sdcard partition can be found in all Android devices and SD-Ext is present only in select devices.
Now that we know the partitions avalable of our device, we can see what can be changed or wiped or erased. To illustrate: Wiping stock recovery and install TWRP recovery means just changing the recovery partition is all.
Now Let us start with the brief intro for each partition. I would be dwelling much on each of these but just brief intro to each for wider audience.
Boot partition of your Android device, as the name suggests. It includes the android kernel and the ramdisk. The device will not boot without this partition. Wiping this partition from recovery should only be done if absolutely required and once done, the device must NOT be rebooted before installing a new one, which can be done by installing a ROM that includes a /boot partition.
As the name suggests, this partition contains the entire Android OS, other than the kernel and the ramdisk. This includes the Android GUI and all the system applications that come pre-installed on the device. Wiping this partition will remove Android from the device without rendering it unbootable, and you will still be able to put the phone into recovery or bootloader mode to install a new ROM.
This is specially designed for backup. The recovery partition can be considered as an alternative boot partition, that lets the device boot into a recovery console for performing advanced recovery and maintenance operations on it.
As the name suggest, it is userdata partition. This partition contains the user’s data like your contacts, sms, settings and all android applications that you have installed. While you are doing factory reset on your device, this partition will wipe out, Then your device will be in the state, when you use for he first time, or the way it was after the last official or custom ROM installation.
I hope you have some idea about cache, as you are expert on internet browsing. This is the partition where Android stores frequently accessed data and app components. Wiping the cache doesn’t effect your personal data but simply gets rid of the existing data there, which gets automatically rebuilt as you continue using the device.
This partition contains miscellaneous system settings in form of on/off switches. These settings may include CID (Carrier or Region ID), USB configuration and certain hardware settings etc. This is an important partition and if it is corrupt or missing, several of the device’s features will will not function normally.
Android device execute following steps when you press power switch
Step 1 : Power On and System Startup
When power start Boot ROM code start execution from pre defined location which is hardwired on ROM. It load Bootloader into RAM and start execution
Step 2 : Bootloader
Bootloader is small program which runs before Android operating system running. Bootloader is first program to run so It is specific for board and processor. Device manufacturer either use popular bootloaders like redboot,uboot, qi bootloader or they develop own bootloaders, It’s not part of Android Operating System. bootloader is the place where OEMs and Carriers put there locks and restrictions.
Bootloader perform execution in two stages, first stage It to detect external RAM and load program which helps in second stage, In second stage bootloader setup network, memory, etc. which requires to run kernel, bootloader is able to provide configuration parameters or inputs to the kernel for specific purpose.
Android bootloader can be found at
<Android Source>\bootable\bootloader\legacy\usbloaderlegacy loader contain two important files that need to address here.
- init.s – Initializes stacks, zeros the BSS segments, call _main() in main.c
- main.c – Initializes hardware (clocks, board, keypad, console), creates Linux tags
If you are interested in more info, you can refer to Android 101: What Is A Bootloader?
Step 3: Kernel
Android kernel start similar way as desktop linux kernel starts, as kernel launch it start setup cache, protected memory, scheduling, loads drivers. When kernel finish system setup first thing it look for “init” in system files and launch root process or first process of system.
Step 4: init process
init it very first process, we can say it is root process or BOSS of all processes. init process has two responsibilities
- mount directories like /sys, /dev, /proc
- run init.rc script.
init process can be found at init : <android source>/system/core/init
init.rc file can be found in source tree at <android source>/system/core/rootdir/init.rc
readme.txt file can be found in source tree at <andorid source>/system/core/init/readme.txt
Android has specific format and rules for init.rc files. In Android we call it as “Android Init Language”
The Android Init Language consists of four broad classes of statements,which are Actions, Commands, Services, and Options.
Action : Actions are named sequences of commands. Actions have a trigger which is used to determine when the action should occur.
Service : Services are programs which init launches and (optionally) restarts when they exit. Syntax
service <name> <pathname> [ <argument> ]*
Options : Options are modifiers to services. They affect how and when init runs the service.
Looking @ default init.rc file; listed are some major events and services.
Action / Service
Set init and its forked children’s oom_adj.
Set the security context for the init process.
setup the global environment
Create cgroup mount point for cpu accounting
mount mtd partitions
change permissions of system directories
change permission of /data folders and sub folders
basic network init ,Memory Management ,etc
start system manager to manage all native services like location, audio, shared preference etc..
start zygote as app_process
At this stage you can see “Android/OEM” logo on device screen.
Step 5: Zygote and Dalvik
In a Java, We know that separate Virtual Machine(VMs) instance will popup in memory for separate per app, In case of Android app should launch as quick as possible, If Android os launch different instance of Dalvik VM for every app then it consume lots of memory and time. so, to overcome this problem Android OS as system named “Zygote”. Zygote enable shared code across Dalvik VM, lower memory footprint and minimal startup time. Zygote is a VM process that starts at system boot time as we know in previous step. Zygote preloads and initialize core library classes. Normally there core classes are read-only and part of Android SDK or Core frameworks. In Java VM each instance has it’s own copy of core library class files and heap objects.
Zygote loading process
- Load ZygoteInit class,
Source Code :<Android Source> /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
- registerZygoteSocket() – Registers a server socket for zygote command connections
- preloadClasses() – “preloaded-classes” is simple text file contains list of classes that need to be preloaded, you cna find “preloaded-classes” file at <Android Source>/frameworks/base
- preloadResources() – preloadReaources means native themes and layouts, everything that include android.R file will be load using this method.
At this time you can see bootanimation
Step 6: System Service or Services
After complete above steps, runtime request Zygote to launch system servers. System Servers are written in native and java both, System servers we can consider as process, The same system server is available as System Services in Android SDK. System server contain all system services.
Zygote fork new process to launch system services. You can find source code in ZygoteInit class and “startSystemServer” method.
Core Services which gets started along with the boot process
- Starting Power Manager
- Creating Activity Manager
- Starting Telephony Registry
- Starting Package Manager
- Set Activity Manager Service as System Process
- Starting Context Manager
- Starting System Context Providers
- Starting Battery Service
- Starting Alarm Manager
- Starting Sensor Service
- Starting Window Manager
- Starting Bluetooth Service
- Starting Mount Service
Other services after booting process are
- Starting Status Bar Service
- Starting Hardware Service
- Starting NetStat Service
- Starting Connectivity Service
- Starting Notification Manager
- Starting DeviceStorageMonitor Service
- Starting Location Manager
- Starting Search Service
- Starting Clipboard Service
- Starting Checkin Service
- Starting Wallpaper Service
- Starting Audio Service
- Starting HeadsetObserver
- Starting AdbSettingsObserver
Step 7 : Boot Completed
Once System Services up and running in memory, Android has completed booting process, At this time “ACTION_BOOT_COMPLETED” standard broadcast action will fire.
You Smart Phone is now at your disposal.