onbootphase systemready顺序
- 格式:docx
- 大小:36.62 KB
- 文档页数:2
从按下计算机开关启动计算机,到登入到桌面完成启动,一共经过了以下几个阶段:1. 预引导(Pre-Boot)阶段;2. 引导阶段;3. 加载内核阶段;4. 初始化内核阶段;5. 登陆。
每个启动阶段的详细介绍a)预引导阶段在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test(POST),POST检测系统的总内存以及其他硬件设备的现状。
如果计算机系统的BIOS(基础输入/输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。
计算机的基础输入/输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。
在预引导阶段,计算机要加载Windows XP的NTLDR文件。
b)引导阶段Windows XP Professional引导阶段包含4个小的阶段。
首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR将计算机微处理器从实模式转换为32位平面内存模式。
在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。
接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FA T文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。
接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。
WinCE启动顺序解析一、stepldrstepldr流程分为以下几步。
①SetupCopySection(pTOC)②MMU_EnableICache()——使能ICache③Port_Init()——GPIO端口初始化④Uart_Init()——初始化UART(调试端口)⑤NF_Init()——初始化nand flash接口⑥将Image从flash拷贝到RAM⑦((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))()——跳转二、EBOOTMain()调用BootloaderMain()调用KernelRelocate()将全局变量定位到RAMOEMPlatformInit()平台初始化(时钟,驱动等)OEMDebugInit()初始化调试端口(串口)OEMPreDownload()初始化以太网,判断是否要下载OEMLaunch()启动操作系统DownloadImage()下载文件要下载1 eboot的工作流程从eboot目录中的startup.s中的starup函数开始。
Startup函数需要完成的工作:①把CPU设置为合适的运行状态作(特权态,Supervisor Mode),这一状态下可以没有限制的访问内存和硬件。
②在CPU级别关闭所有中断。
③确保MMU和TLB都已经关闭。
④使Cache和Write Buffer失效。
⑤初始化内存控制器。
⑥初始化其它的片上设备,例如时钟。
只需要做最基本的初始化。
⑦设置栈指针,后面C语言执行环境需要用到。
⑧设置并打开MMU进行物理和逻辑地址映射,并打开Cache。
⑨把EBoot的代码复制到RAM中,然后跳转到RAM中的EBoot 代码。
⑩跳转到C语言的main函数。
2 跳转到C语言的main函数后,有八个函数需要执行。
main.c(\Src\Bootloader\Eboot\)中的五个函数:Main 函数,OEMDebugInit 函数,OEMPlatformInit 函数,OEMPreDownload 函数,OEMLaunch 函数和blcommon.C (\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON\)中的三个函数:BootloaderMain 函数,KernelRelocate 函数,DownloadImage 函数其中:KernelRelocate():把Boot Loader中的全局变量重定位到RAM 中。
Linux系统的启动过程可以分为以下五个阶段:
内核引导:当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入/boot目录下的内核文件。
运行init:init进程是系统所有进程的起点,可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init程序首先需要读取配置文件/etc/inittab。
系统初始化:在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit,它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
建立终端:rc执行完毕后,返回init。
这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。
用户登录系统:命令行登录、ssh登录、图形界面登录3种方式。
Boot操作过程中的Second Boot阶段可以理解为引导Kernel启动和命令行调试环境的过程。
具体来说,Second Boot阶段主要完成以下任务:
初始化尚未被初始化的硬件,主要是SoC外部硬件,如iNand、网卡芯片等。
初始化U-Boot本身的一些东西,例如U-Boot的命令、环境变量等。
初始化完必要的东西后,进入U-Boot的命令行,准备接受命令。
其中,初始化过程可以包括硬件设备的初始化和软件相关结构体的初始化。
引导Kernel启动过程则是载入内核并启动内核。
而命令行调试环境运行过程则是运行U-Boot调试的命令机制。
在Second Boot阶段结束后,U-Boot的命令行将进入一个死循环,不断重复接收命令、解析命令、执行命令的过程,这就是U-Boot最终的归宿。
标准linux系统启动流程
标准Linux系统的启动流程通常分为以下几个阶段,BIOS/UEFI 启动、引导加载程序、内核加载、系统初始化和用户空间启动。
首先是BIOS/UEFI启动阶段。
当计算机开机时,计算机会首先执行基本输入/输出系统(BIOS)或统一可扩展固件接口(UEFI)固件程序。
在这个阶段,计算机进行自检(POST)以及硬件初始化,然后寻找启动设备。
接下来是引导加载程序阶段。
在BIOS/UEFI确定了启动设备之后,它会加载引导加载程序(如GRUB或LILO)。
引导加载程序的作用是加载操作系统内核并将控制权转交给内核。
然后是内核加载阶段。
引导加载程序会加载Linux内核,内核是操作系统的核心部分,负责管理系统的各种资源和提供各种系统服务。
一旦内核加载完成,它开始初始化系统的各种硬件设备,并创建第一个用户空间进程init。
接着是系统初始化阶段。
在内核初始化完毕后,init进程接管控制权,开始进行系统初始化。
这个阶段包括挂载文件系统、启动
系统服务和设置系统参数等操作。
最后是用户空间启动阶段。
一旦系统初始化完成,init进程会启动其他系统服务和用户空间进程,最终将控制权交给登录管理器(如GDM或KDM),用户就可以登录系统了。
总的来说,标准Linux系统的启动流程经历了硬件初始化、引导加载程序、内核加载、系统初始化和用户空间启动等多个阶段,最终完成了整个系统的启动过程。
U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 硬件设备初始化 加载U-Boot第二阶段代码到RAM空间 设置好栈 跳转到第二阶段代码入口 (2)第二阶段的功能 初始化本阶段使用的硬件设备 检测系统内存映射 将内核从Flash读取到RAM中 为内核设置启动参数 调用内核 1.1.1 U-Boot启动第一阶段代码分析 第一阶段对应的文件是cpu/arm920t/start.S和board/samsung/mini2440/lowlevel_init.S。
U-Boot启动第一阶段流程如下: 图 2.1 U-Boot启动第一阶段流程 根据cpu/arm920t/u-boot.lds中指定的连接方式: ENTRY(_start) SECTIONS { . = 0x00000000;
. = ALIGN(4); .text : { cpu/arm920t/start.o (.text) board/samsung/mini2440/lowlevel_init.o (.text) board/samsung/mini2440/nand_read.o (.text) *(.text) } … … } 第一个链接的是cpu/arm920t/start.o,因此u-boot.bin的入口代码在cpu/arm920t/start.o中,其源代码在cpu/arm920t/start.S中。下面我们来分析cpu/arm920t/start.S的执行。
1. 硬件设备初始化 (1)设置异常向量 cpu/arm920t/start.S开头有如下的代码: .globl _start _start: b start_code /* 复位 */ ldr pc, _undefined_instruction /* 未定义指令向量 */ ldr pc, _software_interrupt /* 软件中断向量 */ ldr pc, _prefetch_abort /* 预取指令异常向量 */ ldr pc, _data_abort /* 数据操作异常向量 */ ldr pc, _not_used /* 未使用 */ ldr pc, _irq /* irq中断向量 */
(一)U-Boot启动过程--详细版的完全分析我们知道,bootloader是系统上电后最初加载运行的代码。
它提供了处理器上电复位后最开始需要执行的初始化代码。
在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GRUB),并进一步引导操作系统的启动。
然而在嵌入式系统中通常没有像BIOS那样的固件程序,因此整个系统的加载启动就完全由bootloader来完成。
它主要的功能是加载与引导内核映像一个嵌入式的存储设备通过通常包括四个分区:第一分区:存放的当然是u-boot第二个分区:存放着u-boot要传给系统内核的参数第三个分区:是系统内核(kernel)第四个分区:则是根文件系统如下图所示:u-boot是一种普遍用于嵌入式系统中的Bootloader。
Bootloader介绍Bootloader是进行嵌入式开发必然会接触的一个概念,它是嵌入式学院<嵌入式工程师职业培训班>二期课程中嵌入式linux系统开发方面的重要内容。
本篇文章主要讲解Bootloader 的基本概念以及内部原理,这部分内容的掌握将对嵌入式linux系统开发的学习非常有帮助!Bootloader的定义:Bootloader是在操作系统运行之前执行的一小段程序,通过这一小段程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
意思就是说如果我们要想让一个操作系统在我们的板子上运转起来,我们就必须首先对我们的板子进行一些基本配置和初始化,然后才可以将操作系统引导进来运行。
具体在Bootloader中完成了哪些操作我们会在后面分析到,这里我们先来回忆一下PC的体系结构:PC机中的引导加载程序是由BIOS和位于硬盘MBR中的OS Boot Loader(比如LILO和GRUB等)一起组成的,BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给OS Boot Loader。
onbootphase systemready顺序
OnBootPhase和SystemReady是Android系统启动过程中的两个重要阶段。
在这两个阶段中,系统会执行一系列的操作,以确保系统能够正常启动并运行。
OnBootPhase是Android系统启动过程中的第一个阶段。
在这个阶段中,系统会执行一些基本的初始化操作,例如加载内核、初始化硬件、启动服务等。
这些操作都是为了确保系统能够正常启动,并为后续的操作做好准备。
在OnBootPhase阶段中,系统会按照一定的顺序执行各项操作。
首先,系统会加载内核,并初始化硬件。
然后,系统会启动一些基本服务,例如Zygote进程、System Server进程等。
接着,系统会加载一些必要的库文件,并启动一些系统应用程序,例如Launcher、Settings等。
最后,系统会启动一些第三方应用程序,例如社交网络应用、游戏等。
SystemReady是Android系统启动过程中的第二个阶段。
在这个阶段中,系统会执行一些更加复杂的操作,例如加载应用程序、初始化用户界面等。
这些操作都是为了确保系统能够正常运行,并为用户提供更好的体验。
在SystemReady阶段中,系统会按照一定的顺序执行各项操作。
首先,系统会加载所有的应用程序,并初始化它们。
然后,系统会初始化用户界面,并启动Launcher应用程序。
接着,系统会启动一些系统服务,例如通知服务、位置服务等。
最后,系统会启动一些第三方应用程序,例如社交网络应用、游戏等。
总的来说,OnBootPhase和SystemReady是Android系统启动过程中的两个重要阶段。
在这两个阶段中,系统会执行一系列的操作,以确保系统能够正常启动并运行。
在执行这些操作时,系统会按照一定的顺序进行,以确保各项操作能够顺利完成。
因此,在开发Android应用程序时,我们需要了解这些阶段和操作,以便更好地优化我们的应用程序,提高用户体验。