Difference between revisions of "Android Booting"

From eLinux.org
Jump to: navigation, search
('init')
Line 1: Line 1:
 
The bootup of an Android system consists of several phases, which are outlined here.
 
The bootup of an Android system consists of several phases, which are outlined here.
  
== Device-specific startup ==
+
== Key bootup components ==
* firmware/bootloader
+
=== Bootloader ===
** On the ADP1, there are multiple versions of the bootloader
+
The first program which runs on any Android system is the bootloader.  Technically, the
 +
bootloader is outside the realm of Android itself, and is used to do very low-level system
 +
initialization, before loading the Linux kernel.  The kernel then does the bulk of hardware,
 +
driver and file system initialization, before starting up the user-space programs and applications
 +
that make up Android.
  
* kernel
+
Often, the first-stage bootloader will provide support for loading recovery images to the
* mount root file system
+
system flash, or performing other recovery, update, or debugging tasks.
  
== 'init' ==
+
The bootloader on the ADP1 detects certain keypresses, which can be used to make it
 +
load a 'recovery' image (second instance of the kernel and system), or put the phone into
 +
a mode where the developer can perform development tasks ('fastboot' mode), such as
 +
re-writing flash images, directly downloading and executing an alternate kernel image, etc.
 +
 
 +
=== 'init' ===
 
A key component of the Android bootup sequence is the program 'init', which is a specialized program for
 
A key component of the Android bootup sequence is the program 'init', which is a specialized program for
 
initializing elements of the Android system.  Unlike other Linux systems (embedded or otherwise), Android
 
initializing elements of the Android system.  Unlike other Linux systems (embedded or otherwise), Android
Line 38: Line 47:
 
** core kernel initialization
 
** core kernel initialization
 
** driver initialization
 
** driver initialization
 +
** root file system is mounted
 +
 
=== user space ===
 
=== user space ===
 
* user space starts
 
* user space starts

Revision as of 15:36, 12 January 2010

The bootup of an Android system consists of several phases, which are outlined here.

Key bootup components

Bootloader

The first program which runs on any Android system is the bootloader. Technically, the bootloader is outside the realm of Android itself, and is used to do very low-level system initialization, before loading the Linux kernel. The kernel then does the bulk of hardware, driver and file system initialization, before starting up the user-space programs and applications that make up Android.

Often, the first-stage bootloader will provide support for loading recovery images to the system flash, or performing other recovery, update, or debugging tasks.

The bootloader on the ADP1 detects certain keypresses, which can be used to make it load a 'recovery' image (second instance of the kernel and system), or put the phone into a mode where the developer can perform development tasks ('fastboot' mode), such as re-writing flash images, directly downloading and executing an alternate kernel image, etc.

'init'

A key component of the Android bootup sequence is the program 'init', which is a specialized program for initializing elements of the Android system. Unlike other Linux systems (embedded or otherwise), Android uses its own initialization program. (Linux desktop systems have historically used some combination of /etc/inittab and sysV init levels - e.g. /etc/rc.d/init.d with symlinks in /etc/rc.d/rc.[2345]). Some embedded Linux systems use simplified forms of these -- such as the init program included in busybox, which processes a limited form of /etc/inittab, or a direct invocation of a shell script or small program to do fixed initialization steps.

The init program processes two files, executing the commands it finds in them, called 'init.rc' and 'init.<machine_name>.rc', where <machine_name> is the name of the hardware that Android is running on. (Usually, this is a code word. The name of the HTC1 hardware for the ADP1 is 'trout', and the name of the emulator is 'goldfish'.

the 'init.rc' file is intended to provide the generic initialization instructions, while the 'init.<machine_name>.rc' file is intended to provide the machine-specific initialization instructions.

The syntax for these .rc files is documented in a readme file in the source tree. See the Android init language reference

Sequence of boot steps on ADP1

firmware

  • first-stage bootloader runs
    • it detects if a special key is held, and can launch the recovery image, or the 'fastboot' bootloader

kernel

  • kernel is loaded
  • kernel boots
    • core kernel initialization
    • driver initialization
    • root file system is mounted

user space

  • user space starts
    • kernel runs /init
      • /init processes /init.rc and /init.rc.<machine_name>
      • activity manager is run
      • dalvik VM is started (zygote)
  • activity manager starts core applications
    • com.android.phone - phone application
    • android.process.acore - home (desktop) and a few core apps.
  • other processes started by /init:
    • adb
    • mediaserver
    • dbus-daemon
    • akmd

Tools for analyzing Android Bootup

Notes on the Android startup procedure

Overview

See "Android Initialization Process" at: http://blog.chinaunix.net/u2/85805/showart_1421736.html

strace

http://benno.id.au/blog/2007/11/18/android-runtime-strace

Interaction of different processes on application initialization

Talking about Android Process - http://blog.csdn.net/mawl2002/archive/2009/06/24/4295905.aspx