一、Android系统启动过程概述
Android系统启动过程大体可以分为以下6个阶段:
- 硬件初始化阶段
- 内核启动阶段
- init进程启动阶段
- 系统服务启动阶段
- 应用进程启动阶段
- 系统启动完成阶段
二、硬件初始化阶段
在这个阶段,系统主要进行硬件初始化,包括基本的硬件检测和初始化,如CPU、内存、存储等。这个阶段由Bootloader来执行,它首先会在硬件检测及初始化完成后,读取内核映像文件,将内核映像文件加载到内存中,并跳转到内核映像文件的入口点。在这之后,硬件初始化阶段基本完成,系统开始进入到内核启动阶段。
int main(int argc, char** argv) {
/* Hardware initialization */
hw_init();
/* Load kernel image file to memory */
load_kernel_image();
/* Jump to kernel image entry point */
jump_to_kernel_entry_point();
/* Should not reach here */
return 0;
}
三、内核启动阶段
在这个阶段,内核主要进行的是自身的初始化,包括系统调用、内存管理、进程管理、文件系统等。其中最重要的是内存管理,因为内存管理是整个系统的基础。内核首先会创建第一个进程init,并将其放入进程调度链表中等待运行。接着,内核会解压缩RAM disk文件系统到内存中,并挂载到根文件系统中。随后,内核会读取init.rc文件,这个文件是系统启动时的主要配置文件,它通过service节点定义了系统将要启动的各种服务。
void __init start_kernel(void) {
/* Initialize memory management */
mm_init();
/* Initialize process management */
process_init();
/* Mount RAM disk file system to root file system */
mount_ram_disk();
/* Read init.rc file and start services */
start_services();
/* Should not reach here */
return 0;
}
四、init进程启动阶段
在这个阶段,系统会启动第一个用户级进程——init进程。init进程是Android系统中最重要的进程之一,它负责在系统启动时加载各种服务和模块,并启动系统中其他的进程。init进程的启动由内核完成,在用户空间中调用init可执行文件开始。
int main(int argc, char** argv) {
/* Parse command line arguments */
parse_args(argc, argv);
/* Load configuration file */
parse_config_file();
/* Load services and start modules */
load_services_and_start_modules();
/* Start other processes */
start_other_processes();
/* Should not reach here */
return 0;
}
五、系统服务启动阶段
在这个阶段,系统会启动各种系统级服务,如Wifi管理服务、蓝牙管理服务、定位服务等。这些服务都是作为系统进程在init进程启动后启动的,它们会被注册到System Server中,作为System Server的一个线程来运行。
void main() {
/* Initialize System Server */
SystemServer system_server = new SystemServer();
/* Register system services */
system_server.registerService(WifiService.class);
system_server.registerService(BluetoothService.class);
system_server.registerService(LocationService.class);
/* Start System Server */
system_server.start();
/* Should not reach here */
return 0;
}
六、应用进程启动阶段
在这个阶段,系统会启动各个应用进程,如Launcher、浏览器、短信等。应用进程由应用程序启动器Activity Manager来管理,通过应用进程启动命令am start或am startservice可以启动一个应用进程或服务。
void startActivity(String packageName, String className) {
/* Start application process */
Process applicationProcess = Runtime.getRuntime().exec("am start " + packageName + "/" + className);
/* Wait for application process to finish */
applicationProcess.waitFor();
}
七、系统启动完成阶段
在所有进程和服务都启动完成后,系统启动就算完成了。在这个阶段,启动过程会显示出系统桌面,这时用户就可以使用Android系统了。
void onSystemBootCompleted() {
/* Display system desktop */
displaySystemDesktop();
/* Should not reach here */
return 0;
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/150604.html
微信扫一扫
支付宝扫一扫