本文共 6997 字,大约阅读时间需要 23 分钟。
The first program which runs on any Android system is the bootloader. Technically, thebootloader is outside the realm of Android itself, and is used to do very low-level systeminitialization, 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 applicationsthat make up Android.
Often, the first-stage bootloader will provide support for loading recovery images to thesystem 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 intoa mode where the developer can perform development tasks ('fastboot' mode), such asre-writing flash images, directly downloading and executing an alternate kernel image, etc.
A key component of the Android bootup sequence is the program 'init', which is a specialized program forinitializing elements of the Android system. Unlike other Linux systems (embedded or otherwise), Androiduses 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]). Someembedded Linux systems use simplified forms of these -- such as the init program included in busybox, whichprocesses a limited form of /etc/inittab, or a direct invocation of a shell script or small program todo fixed initialization steps.
The Android '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 hardwarethat Android is running on. (Usually, this is a code word. The name of the HTC1 hardwarefor the ADP1 is 'trout', and the name of the emulator is 'goldfish'.
The 'init.rc' file is intended to provide the generic initializationinstructions, while the 'init.<machine_name>.rc' file is intended to provide themachine-specific initialization instructions.
The syntax for these .rc files is documented in a readme file in the source tree.See the
Or, see also:
See also
01-01 00:00:08.396 I/boot_progress_start( 754): 1255901-01 00:00:13.716 I/boot_progress_preload_start( 754): 1787901-01 00:00:24.380 I/boot_progress_preload_end( 754): 2854601-01 00:00:25.068 I/boot_progress_system_run( 768): 2923001-01 00:00:25.536 I/boot_progress_pms_start( 768): 2969701-01 00:00:25.958 I/boot_progress_pms_system_scan_start( 768): 3011701-01 00:00:40.005 I/boot_progress_pms_data_scan_start( 768): 4417101-01 00:00:45.841 I/boot_progress_pms_scan_end( 768): 5000601-01 00:00:46.341 I/boot_progress_pms_ready( 768): 5050501-01 00:00:49.005 I/boot_progress_ams_ready( 768): 5316601-01 00:00:52.630 I/boot_progress_enable_screen( 768): 56793
10-15 00:00:17.748 I/Zygote ( 535): ...preloaded 1873 classes in 2438ms.10-15 00:00:17.764 I/Zygote ( 535): ...preloaded 0 resources in 0ms.10-15 00:00:17.772 I/Zygote ( 535): ...preloaded 15 resources in 7ms.
Here is an example of using strace to follow the startup of zygote, and the apps that are forkedfrom it.
Replace:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
with
service zygote /system/xbin/strace -f -tt -o /cache/debug/boot.strace /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
Here is some sample data:
$ head boot.strace571 00:00:11.389939 execve("/system/bin/app_process", ["/system/bin/app_process", "-Xzygote", "/system/bin", "--zygote", "--start-system-server"], [/* 15 vars */]) = 0571 00:00:11.658878 brk(0) = 0x804b000571 00:00:11.659048 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x77f9a000571 00:00:11.659169 readlink("/proc/self/exe", "/system/bin/app_process", 4096) = 23571 00:00:11.659339 access("/etc/ld.so.preload", R_OK) = 0571 00:00:11.659440 open("/etc/ld.so.preload", O_RDONLY) = 3571 00:00:11.659548 fstat64(0x3, 0x7fa76650) = 0571 00:00:11.659887 mmap2(NULL, 36, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x77f99000571 00:00:11.659970 close(3) = 0571 00:00:11.660071 open("/lib/libc_sse.so", O_RDONLY) = 3
Please note that writing the strace data takes extra time. For long sequences of very fast syscalls (such as when the timezone file is being read) the overhead of strace itself exaggerates the timings in the trace. Use the timing information with caution.
See "Android Initialization Process" at: (this address is not work), using instead.
Talking about Android Process -
See - notes and material for a talk at LinuxCon North America, 2010 by Tim Bird
Ubiquitous Corporation has announced boot of ARM-based Android system in 1 second.Actually, it's more like a suspend and resume than a boot.See[March, 2010]
转载地址:http://lqfvb.baihongyu.com/