当前位置: 首页 > 科技观察

深入解析Android开机流程

时间:2023-03-16 21:42:40 科技观察

当你按下Android设备的电源键时会发生什么?Android的启动过程是怎样的?什么是Linux内核?桌面系统linux内核和安卓系统linux内核有什么区别?什么是引导加载程序?合子是什么?什么是X86和ARMLinux?什么是init.rc?什么是系统服务?当我们想到Android的启动过程时,总会有很多问题浮现在我们的脑海中。本文将介绍Android的启动过程,希望能帮助您找到上述问题的答案。Android是一个基于Linux的开源操作系统。x86(x86是一系列基于intel8086CPU的计算机微处理器指令集架构)是最常见的部署linux内核的系统。但是,所有的Android设备都运行在ARM处理器上(ARM来源于AdvancedReducedInstructionSetMachine,源于ARM架构),Intel的Xolo设备除外(http://xolo.in/xolo-x900-features)。Xolo源自Atom1.6GHzx86处理器。与桌面版本相比,Android设备或嵌入式设备或基于Linux的ARM设备的启动过程略有不同。在本文中,我将解释Android设备的启动过程。深入linux启动过程是一篇关于桌面linux启动过程的好文章。当您按下电源开关时,Android设备会执行以下步骤。第一步:打开电源,启动系统。当按下电源时,引导芯片代码从预定义的位置开始执行(固化在ROM中)。将引导加载程序加载到RAM中,然后执行。第二步:BootloaderBootloader是Android操作系统开始运行前的一个小程序。引导加载程序是第一个运行的程序,因此它特定于特定的主板和芯片。设备制造商要么使用流行的引导加载程序,如redboot、uboot、qi引导加载程序,要么开发自己的不属于Android操作系统的引导加载程序。引导加载程序是OEM或运营商锁定和限制的地方。引导加载程序分两个阶段执行。第一阶段检测外部RAM,加载对第二阶段有用的程序;在第二阶段,引导加载程序设置网络、内存等。这些是运行内核所必需的,引导加载程序可以根据特定目的的配置参数或输入数据来设置内核。Android引导加载程序可以在\bootable\bootloader\legacy\usbloader中找到。这里需要解释一下传统加载器中包含的文件:init.s初始化栈,清除BBS段,调用main.c的_main()函数;main.c初始化硬件(闹钟、主板、键盘、控制台),创建linux标签。在此处了解有关Android引导加载程序的更多信息。第3步:内核Android内核的启动方式与桌面linux内核的启动方式相同。当内核启动时,它会设置缓存、受保护内存、计划列表并加载驱动程序。当内核完成系统设置后,首先在系统文件中寻找“init”文件,然后启动根进程或系统的第一个进程。第四步:init进程init是第一个进程,可以说是根进程,也可以说是进程的父进程。init进程有两个职责,一是挂载目录,如/sys、/dev、/proc,二是运行init.rc脚本。init进程可以在/system/core/init中找到。init.rc文件可以在/system/core/rootdir/init.rc中找到。readme.txt可以在/system/core/init/readme.txt找到。对于init.rc文件,在Android中有特定的格式和规则。在Android中,我们称之为Android初始化语言。Android初始化语言由四种类型的声明组成,分别是Actions(动作)、Commands(命令)、Services(服务)和Options(选项)。动作:动作以命令流命名,有一个触发器决定动作是否发生。语法onService(服务):服务是由init进程启动的程序。当服务退出时,init进程会酌情重启服务。语法service[]*