i.mx6 linux启动流程分析
linux系统的流程
![linux系统的流程](https://img.taocdn.com/s3/m/cb4c04375bcfa1c7aa00b52acfc789eb172d9e1a.png)
Linux系统的启动流程可以大致分为以下几个步骤:1.开机自检(BIOS):服务器主机开机以后,将根据主板BIOS中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2.MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录的引导信息调用启动菜单(如GRUB)。
3.GRUB菜单:对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
4.内核加载:内核是操作系统最基本的部分,负责管理系统的硬件和软件资源。
当GRUB将系统控制权转交给内核时,内核开始运行并加载必要的驱动程序和模块。
5.用户层init依据inittab文件设定运行等级:内核加载之后,第一个运行的程序是/sbin/init,该程序会读取/etc/inittab文件来设定系统的运行等级。
运行等级决定了系统的运行方式和提供的服务。
6.执行rc.sysinit:在设定运行等级之后,/etc/rc.d/rc.sysinit脚本被执行,用于进行系统初始化工作,如设置PATH环境变量、网络配置、分区挂载等。
7.启动内核模块和执行不同级别的脚本程序:根据不同的运行等级,系统会加载相应的内核模块,并执行不同级别的脚本程序,以启动或停止相应的服务。
8.进入系统登陆界面:最后,系统进入登录界面,用户可以输入用户名和密码进行登录,开始使用Linux系统。
以上步骤是一般的Linux系统启动流程,具体细节可能因不同的Linux发行版和配置而有所不同。
linux系统启动的具体流程
![linux系统启动的具体流程](https://img.taocdn.com/s3/m/581fd33f178884868762caaedd3383c4bb4cb41c.png)
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种方式。
Linux的启动流程
![Linux的启动流程](https://img.taocdn.com/s3/m/42b30c3f6294dd88d1d26b31.png)
Linux的启动流程1. 从BIOS到KERNELBIOS自检->MBR(GRUB)->KERNEL->KERNEL自解压->内核初始化->内核启动BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作要紧是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等要紧是为了检查这些设备在开机的时候是否能通过检测,假如能通过检测,说明电脑能够正常的工作。
-----------------------------------------一、载入启动程序BIOS自检完成后,BIOS会依照用户设置的启动顺序来由那个设备来启动电脑的操作系统,那个设备一样是硬盘。
也确实是进入到硬盘的MBR区域(引导扇区),那个区域中的有512个字节的大小,其中前446个字节中储存的程序是选择启动分区,也确实是电脑由那个硬盘分区来载入开机的程序。
那么在那个446个字节的空间中储存的确实是启动程序,然后由那个小程序来加载存储在其他位置的操作系统,也确实是启动grub程序。
当找到启动设备(硬盘)时,第一时期所用的boot loader(存放在引导扇区)被装载到RAM中并被执行。
那个地点的boot loader在大小上小于一个扇区的大小,也确实是512字节,而它的任务,确实是加载第二时期的boot loader。
当负责第二时期的boot loader位于内存中并被执行时,通常会显示一个一闪而过的屏幕,然后linux以及可选的初始化内存盘(一种临时的根文件系统,假如想得到具体的介绍,请访问://likunarmstrong.bokee /5502266.html) 会被装载到储备器中。
当系统镜像被加载时,第二时期的boot loader将把操纵权转交给内核镜像,与此同时,内核开始自解压并初始化。
在那个时期,第二时期的boot loader会检查系统的硬件,枚举那些附加的硬件设备,挂载根设备,之后加载需要的内核模块。
流程管理-linux启动流程分析
![流程管理-linux启动流程分析](https://img.taocdn.com/s3/m/30e77eacce2f0066f433225c.png)
linux启动流程分析linux启动流程分析(1)---bootloader启动内核过程我分析的是2.4.19的内核版本,是xscale的平台,参考了网上很多有价值的帖子,也加入了自己的一些看法,陆续总结成文字,今天是第一篇:内核一般是由bootloader来引导的,通过bootloader启动内核一般要传递三个参数,第一个参数放在寄存器0中,一般都为0,r0 = 0;第二个参数放在寄存器1中,是机器类型id,r1 = Machine Type Number;第三个参数放在寄存器2中,是启动参数标记列表在ram中的起始基地址;bootloader首先要将ramdisk(如果有)和内核拷贝到ram当中,然后可以通过c语言的模式启动内核:void (*startkernel)(int zero, int arch, unsigned int params_addr) = (void(*)(int, int, unsigned int))KERNEL_RAM_BASE;startkernel(0, ARCH_NUMBER, (unsigned int)kernel_params_start);其中KERNEL_RAM_BASE为内核在ram中启动的地址,ARCH_NUMBER是Machine Type Number,kernel_params_start是参数在ram的偏移地址。
这时候就将全力交给了内核。
linux启动流程分析(2)---内核启动地址的确定内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,但是该文件是由vmlinux-armv.lds.in生成的,根据编译选项的不同源文件还可以是vmlinux-armo.lds.in,vmlinux-armv-xip.lds.in。
vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中LDSCRIPT = arch/arm/vmlinux-armv.lds.inarch/arm/vmlinux.lds: arch/arm/Makefile $(LDSCRIPT) \$(wildcard include/config/cpu/32.h) \$(wildcard include/config/cpu/26.h) \$(wildcard include/config/arch/*.h)@echo ' Generating $@'@sed 's/TEXTADDR/$(TEXTADDR)/;s/DATAADDR/$(DATAADDR)/' $(LDSCRIPT) >$@vmlinux-armv.lds.in文件的内容:OUTPUT_ARCH(arm)ENTRY(stext)SECTIONS{. = TEXTADDR;.init : { /* Init code and data */_stext = .;__init_begin = .;*(.text.init)__proc_info_begin = .;*()__proc_info_end = .;__arch_info_begin = .;*()__arch_info_end = .;__tagtable_begin = .;*(.taglist)__tagtable_end = .;*(.data.init). = ALIGN(16);__setup_start = .;*(.setup.init)__setup_end = .;__initcall_start = .;*(.initcall.init)__initcall_end = .;. = ALIGN(4096);__init_end = .;}其中TEXTADDR就是内核启动的虚拟地址,定义在kernel/arch/arm/Makefile 中:ifeq ($(CONFIG_CPU_32),y)PROCESSOR = armvTEXTADDR = 0xC0008000LDSCRIPT = arch/arm/vmlinux-armv.lds.inendif需要注意的是这里是虚拟地址而不是物理地址。
linux启动流程
![linux启动流程](https://img.taocdn.com/s3/m/dfdd2dbafbb069dc5022aaea998fcc22bcd143a2.png)
linux启动流程Linux启动流程是指在计算机启动时,操作系统的加载和初始化的一系列过程。
具体的启动流程可以分为以下几个步骤。
1. BIOS(Basic Input/Output System)自检:当计算机启动时,首先会运行内置的基本输入/输出系统(BIOS)进行自检。
BIOS会检测计算机中的硬件设备,并初始化这些设备。
2. 主引导记录(MBR)加载:接着,计算机会加载位于硬盘的主引导记录(MBR)。
MBR是位于硬盘的第一个扇区,其中包含了引导加载程序(Bootloader)的信息。
3. 引导加载程序运行:MBR加载完成后,引导加载程序就开始运行。
常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(Linux Loader)等。
引导加载程序会读取硬盘上的操作系统及其内核的位置,并将控制权转移到操作系统的加载程序。
4. 内核加载:引导加载程序会读取操作系统的内核,并加载到内存中。
内核是操作系统的核心部分,负责管理计算机的硬件资源和进程管理。
5. 初始化ramdisk:操作系统内核加载完成后,会解压缩和初始化ramdisk。
ramdisk是虚拟的磁盘,用于提供操作系统初始化所需的文件和目录结构。
6. 初始化系统:操作系统内核会运行init进程,这是系统的第一个用户级进程。
init进程根据指定的运行级别,初始化各个系统服务和进程。
运行级别定义了系统启动时要运行的服务和进程的类型。
7. 启动系统服务:在指定的运行级别下,init进程会依次启动各个系统服务,如网络服务、打印服务、文件系统服务等。
这些服务的启动是根据配置文件中的设置进行的。
8. 用户登录:系统服务启动完成后,操作系统进入用户登录界面。
用户可以输入用户名和密码进行登录。
9. 初始化用户环境:当用户成功登录后,系统会初始化用户的环境,包括创建用户的进程、加载用户的配置文件等。
10. 启动默认图形界面:如果系统启动时设置了默认的图形界面(如GNOME、KDE等),则系统会自动启动默认的图形界面,并将控制权交给图形界面管理器。
linux的启动流程详解
![linux的启动流程详解](https://img.taocdn.com/s3/m/8a5f89253069a45177232f60ddccda38376be15e.png)
linux的启动流程详解linux启动流程⼀、第⼀阶段:BIOS上个世纪70年代初,"只读内存"(read-only memory,缩写为ROM)发明,开机程序被刷⼊ROM芯⽚,计算机通电后,第⼀件事就是读取它。
这块芯⽚⾥的程序叫做"基本輸出輸⼊系統"(Basic Input/Output System),简称为BIOS。
1.1 硬件⾃检BIOS程序⾸先检查,计算机硬件能否满⾜运⾏的基本条件,这叫做"硬件⾃检"(Power-On Self-Test),缩写为POST。
如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中⽌。
如果没有问题,屏幕就会显⽰出CPU、内存、硬盘等信息。
1.2 启动顺序硬件⾃检完成后,BIOS把控制权转交给下⼀阶段的启动程序。
这时,BIOS需要知道,"下⼀阶段的启动程序"具体存放在哪⼀个设备。
也就是说,BIOS需要有⼀个外部储存设备的排序,排在前⾯的设备就是优先转交控制权的设备。
这种排序叫做"启动顺序"(Boot Sequence)。
打开BIOS的操作界⾯,⾥⾯有⼀项就是"设定启动顺序"。
⼆、第⼆阶段:主引导记录BIOS按照"启动顺序",把控制权转交给排在第⼀位的储存设备。
这时,计算机读取该设备的第⼀个扇区,也就是读取最前⾯的512个字节。
如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以⽤于启动;如果不是,表明设备不能⽤于启动,控制权于是被转交给"启动顺序"中的下⼀个设备。
这最前⾯的512个字节,就叫做"主引导记录"(Master boot record,缩写为MBR)。
2.1 主引导记录的结构"主引导记录"只有512个字节,放不了太多东西。
它的主要作⽤是,告诉计算机到硬盘的哪⼀个位置去找操作系统。
Linux系统的启动过程
![Linux系统的启动过程](https://img.taocdn.com/s3/m/8cba4683d4d8d15abe234ebe.png)
Linux系统的启动过程下面是整个Linux系统的启动过程:Linux Boot StepStart BIOSgrub/liloKernel bootinit rc.sysinitrcmingetty loginshell登录系统一.BIOS自检计算机在接通电源之后首先由BIOS进行POST自检,然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入引导块。
Linux系统是人BIOS中的地址oxFFFF0处开始引导的。
BIOS的第1个步骤是加电POST自检。
POST的工作是对硬件进行检测。
BIOS的第2个步骤是进行本地设备的枚举和初始化。
BIOS由两部分组成:POST代码和运行时的服务。
当POST完成之后,它被从内存中清理出来,但是BIOS运行时服务依然保留在内存中,目标操作系统可以使用这些服务。
BIOS运行时会按照CMOS的设置定义的顺序来搜索处于活动状态并且可以引导的设备。
引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备甚至是USB闪存。
通常,Linux系统都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。
MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区(0道0柱面1扇区)。
当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。
如果要查看MBR的内容,用户需要以root用户的身份运行如下命令:#dd if=/dev/had of=mbr.bin bs=512count=1读入了1+0个块输出了1+0个块#od–xa mbr.bin……它从/dev/had(第一个IDE盘)上读取前512个字节的内容,并将其写入mbr.bin 文件中。
od命令会以十六进制和ASCII码格式打印这个二进制文件的内容。
二.启动GRUB/LILOGRUB和LILO都是引导加载程序。
引导加载程序用于引导操作系统启动。
当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(主引导记录)。
请简述linux的启动流程
![请简述linux的启动流程](https://img.taocdn.com/s3/m/d78c2955a7c30c22590102020740be1e650eccb7.png)
请简述linux的启动流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. BIOS 自检:计算机开机后,首先会执行 BIOS(基本输入输出系统)自检程序。
linux系统启动过程的处理步骤
![linux系统启动过程的处理步骤](https://img.taocdn.com/s3/m/387b57377ed5360cba1aa8114431b90d6d858970.png)
linux系统启动过程的处理步骤1.引言1.1 概述Linux系统是一个开源的操作系统,它被广泛应用于各种计算设备,包括个人电脑、服务器、嵌入式设备等。
它的启动过程是系统从关机状态到能够正常运行的过程,包括引导程序的加载、内核的启动和初始化各种系统服务等步骤。
Linux系统的启动过程可以被分为几个主要步骤,每个步骤都有其特定的任务和功能。
首先是引导程序的加载,它是系统启动的第一步。
引导程序负责从存储设备中加载操作系统的内核,并将控制权转交给内核。
加载内核是系统启动过程的第二个重要步骤。
内核是操作系统的核心部分,它负责管理系统的各种资源和提供系统调用接口,以支持各种应用程序的正常运行。
加载内核的过程包括初始化硬件设备、建立内核空间和用户空间的切换等操作。
在内核加载完成后,系统会初始化各种系统服务和驱动程序。
这些服务和驱动程序负责管理系统的各种资源,如文件系统、网络连接、进程管理等。
系统服务的初始化过程通常是按照一定的顺序来进行的,确保每个服务按照正确的依赖关系被初始化。
总的来说,Linux系统的启动过程是一个复杂而严密的过程,涉及到多个步骤和组件的协同工作。
每个步骤都有其特定的功能,确保系统能够正确地启动和正常运行。
通过了解Linux系统的启动过程,我们可以更好地理解系统的工作原理,并能够更好地进行系统配置和故障排查等工作。
1.2文章结构1.2 文章结构本文将按照以下步骤分析Linux系统启动过程的处理步骤:1. 引言:在此部分,将对Linux系统启动过程进行简要概述,并说明本文的结构和目的。
2. 正文:2.1 启动引导程序:首先,将介绍引导程序的作用和重要性。
然后,详细说明引导程序在系统启动过程中的操作步骤,包括硬件自检、加载引导程序、选择操作系统等。
2.2 加载内核:在此部分,将详细讲解加载内核的过程和步骤。
首先,将介绍内核的作用和组成部分。
然后,依次说明加载内核的操作步骤,包括初始化内存、初始化设备驱动、加载文件系统等。
Linux系统启动流程分析-电脑资料
![Linux系统启动流程分析-电脑资料](https://img.taocdn.com/s3/m/b613cdbff605cc1755270722192e453611665b53.png)
Linux系统启动流程分析-电脑资料一系统上电和启动ROMNOR Flash作为启动ROM的系统启动过程NOR Flash开头处存放启动代码,程序从NOR Flash开始处启动,。
配置EMI寄存器,设置好各存储器的地址和存取规则。
配置电源管理模块,各模块上电。
启动代码将位于NOR Flash中的正式执行代码复制到内存中,以提高执行效率。
设置PC指针,指向NOR Flash中固定地址。
设置地址映射,用0地址映射到内存RAM空间。
设置PC指针,指向RAM中初始化代码,开始执行代码。
NAND Flash作为启动ROM的系统启动流程上电初始,DMA默认设置将存储在NAND Flash中第一页的数据搬运到内部RAM中,然后设置PC到内部RAM开始处的地址,开始执行代码,电脑资料《Linux系统启动流程分析》(https://www.)。
在启动代码中设置中断向量和硬件配置等。
将执行代码搬运到外部SDRAM或DDR=RAM,留出启动代码的位置。
将启动代码搬运到SDRAM或DDR-RAM中首址。
设置Remap,将0地址重新映射到SDRAM或DDR-RAM首地址。
设置PC指针,开始执行正式的执行代码。
二 Bootloader引导三 Linux内核引导非压缩内核:Image压缩内核:zImage内核初始化设备初始化启动内核挂载文件系统启动用户空间进程四 init初始化系统服务初始化log系统解析/init.rc和/init.%hardware%.rc文件,执行early-init,并执行解析出的init动作、early-boot动作、boot动作和execute property动作。
进行设备初始化,属性服务器初始化并开启属性服务。
进入无线循环以等待属性设置或子进程退出事件。
i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)
![i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)](https://img.taocdn.com/s3/m/88059f75caaedd3383c4d39f.png)
i.MX6UL -- Linux系统移植过程详解(最新的长期支持版本)∙开发平台:i.MX 6UL∙最新系统: u-boot2015.04 + Linux4.1.15_1.2.0∙交叉编译工具:dchip-linaro-toolchain.tar.bz2源码下载地址:U-Boot: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2)/git/cgit.cgi/imx/uboot-imx.git/Kernel: (选择rel_imx_4.1.15_1.2.0_ga.tar.bz2)/git/cgit.cgi/imx/linux-2.6-imx.git/源码移植过程:1、将linux内核及uBoot源码拷贝到Ubuntu12.04系统中的dchip_imx6ul目录下;2、使用tar命令分别将uboot和kernel解压到dchip_imx6ul目录下;3、解压后进入uboot目录下,新建文件make_dchip_imx6ul_uboot201504.sh,且文件内容如下:#################################################################### Build U-Boot.2015.04 For D518--i.MX6UL By FRESXC #####################################################################!/bin/bashexport ARCH=armexportCROSS_COMPILE=<YourPath>/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi -make mrproper # means CLEANmake mx6ul_14x14_evk_defconfigmake2>&1|tee built_dchip_imx6ul_uboot201504.out4进入kernel目录下,新建文件make_dchip_imx6ul_linux4115120.sh,且文件内容如下:#################################################################### Build Linux-4.1.15 For D518--i.MX6UL By FRESXC # ################################################################### #!/bin/bashexport ARCH=armexportCROSS_COMPILE=<YourPath>/dchip-linaro-toolchain/bin/arm-none-linux-gnueabi -make mrproper # means cleanmake imx_v7_defconfigmake uImage LOADADDR=0x100080002>&1|teebuilt_dchip_imx6ul_linux4115120.outmake imx6ul-14x14-evk.dtb做完以上部分,在终端中分别进入kernel和uboot源码目录下,使用./make_dchip_imx6ul_uboot201504.sh和./make_dchip_imx6ul_linux4115120.sh 命令运行上面的两个脚本文件。
Linux系统启动过程详解
![Linux系统启动过程详解](https://img.taocdn.com/s3/m/8a4dd726bc64783e0912a21614791711cc7979ae.png)
Linux系统启动过程详解Linux系统启动过程详解启动第⼀步--加载BIOS当你打开计算机电源,计算机会⾸先加载BIOS信息,BIOS信息是如此的重要,以⾄于计算机必须在最开始就找到它。
这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。
在此之后,计算机⼼⾥就有谱了,知道应该去读取哪个硬件设备了。
启动第⼆步--读取MBR众所周知,硬盘上第0磁道第⼀个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的⼤⼩是512字节,别看地⽅不⼤,可⾥⾯却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。
其实被复制到物理内存的内容就是Boot Loader,⽽具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot LoaderBoot Loader 就是在操作系统内核运⾏之前运⾏的⼀段⼩程序。
通过这段⼩程序,我们可以初始化硬件设备、建⽴内存空间的映射图,从⽽将系统的软硬件环境带到⼀个合适的状态,以便为最终调⽤操作系统内核做好⼀切准备。
Boot Loader有若⼲种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟⽤lilo和spfdisk的⼈并不多。
系统读取内存中的grub配置信息(⼀般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核根据grub设定的内核映像所在路径,系统读取内存映像,并进⾏解压缩操作。
此时,屏幕⼀般会输出“Uncompressing Linux”的提⽰。
当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。
Linux操作系统启动流程图文详解
![Linux操作系统启动流程图文详解](https://img.taocdn.com/s3/m/6a061a5fe418964bcf84b9d528ea81c758f52ea7.png)
Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。
上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。
加载完BIOS信息,计算机将根据顺序进⾏启动。
2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。
被复制到物理内存的内容是Boot Loader,然后进⾏引导。
3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。
5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
简述linux启动流程
![简述linux启动流程](https://img.taocdn.com/s3/m/fd5d191d443610661ed9ad51f01dc281e53a56e3.png)
简述linux启动流程
Linux启动流程是指从开机到进入用户界面的整个过程。
在这个过程中,系统依次完成了硬件初始化、内核启动、启动脚本执行等一系列操作。
1. BIOS或UEFI初始化:开机后,计算机首先会进入到BIOS或UEFI程序中,进行硬件的自检和初始化。
2. 加载引导程序:BIOS或UEFI会查找系统中的引导设备,比如硬盘、光盘、USB等,找到后会将引导程序加载进内存中。
3. 加载内核文件:引导程序会读取内核文件,并将其加载到系统内存中。
4. 内核启动:内核在加载完成后,开始执行初始化操作,包括设备驱动程序的加载、文件系统的挂载等。
5. 运行init进程:内核启动后,会运行init进程,init进程是Linux系统的第一个用户空间进程,主要负责系统初始化和进程管理,同时也是其他终端应用程序的父进程。
6. 执行启动脚本:init进程会读取启动脚本,并依次执行其中的命令,完成系统的初始化和配置。
7. 进入用户界面:启动脚本完成后,系统会进入到用户界面,等待用户的登陆。
总之,Linux系统启动过程是一个非常复杂的过程,从硬件的自检到系统进入用户界面,需要经过多个环节和步骤。
但是,在这个过程中,每个环节都发挥了至关重要的作用,为系统的正常运行打下了
基础。
简要分析linux系统的启动过程
![简要分析linux系统的启动过程](https://img.taocdn.com/s3/m/be71520db6360b4c2e3f5727a5e9856a561226c6.png)
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
Linux系统启动的详细过程和步骤
![Linux系统启动的详细过程和步骤](https://img.taocdn.com/s3/m/35b03b3e905f804d2b160b4e767f5acfa1c783d8.png)
Linux系统启动的详细过程和步骤Linux系统启动的详细过程和步骤 Linux操作系统借助于Internet⽹络,并通过全世界各地计算机爱好者的共同努⼒,已成为今天世界上使⽤最多的⼀种UNIX 类操作系统,并且使⽤⼈数还在迅猛增长。
下⾯⼩编准备了关于Linux系统启动的详细过程和步骤,提供给⼤家参考! 第⼀阶段: 系统上电开机后,主板BIOS(Basic Input / Output System)运⾏POST(Power on self test)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘⿏标等)。
硬件配置信息及⼀些⽤户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(⼀般64字节),实际上就是主板上⼀块可读写的RAM芯⽚,由主板上的电池供电,系统掉电后,信息不会丢失。
执⾏POST代码对系统外围关键设备检测通过后,系统启动⾃举程序,根据我们在BIOS中设置的启动顺序搜索启动驱动器(⽐如的硬盘、光驱、⽹络服务器等)。
选择合适的启动器,⽐如通常情况下的硬盘设备,BIOS会读取硬盘设备的第⼀个扇区(MBR,512字节),并执⾏其中的代码。
实际上这⾥BIOS并不关⼼启动设备第⼀个扇区中是什么内容,它只是负责读取该扇区内容、并执⾏,BIOS的任务就完成了。
此后将系统启动的控制权移交到MBR部分的代码。
注:在我们的现⾏系统中,⼤多关键设备都是连在主板上的。
因此主板BIOS提供了⼀个操作系统(软件)和系统外围关键设备(硬件)最底级别的接⼝,在这个阶段,检测系统外围关键设备是否“准备好”,以供操作系统使⽤。
第⼆阶段: BIOS通过下⾯两种⽅法之⼀来传递引导记录: 第⼀,将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中 第⼆,将控制权传递给initial program loader(IPL),该程序安装在磁盘分区的启动引导扇区中 ⽆论上⾯的哪种情况中,IPL都是MBR的⼀部分并应该存储于⼀个不⼤于446字节的磁盘空间中,因为MBR是⼀个不⼤于512字节的空间。
linux系统启动过程分析下
![linux系统启动过程分析下](https://img.taocdn.com/s3/m/995958ac0508763230121255.png)
实模式的寻址方式 内核代码在内存中的位置 使用bios中断访问软盘 如何为进入保护模式进行初始化设置
0000:7c00 处。 4 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则转去尝试其他启动
介质, 如果没有其他启动介质则显示"No ROM BASIC" 然后死机。 5 跳转到 0000:7c00 处执行 MBR 中的程序。 6 MBR将自己移动到9000:0000 7 将内核模块从软盘读入到1000:0000 8 将内核模块移动到0000:0000 9 进入保护模式 10 读取COMS信息,设置有关表格,然后调用操作系统初始化程序MAIN.C
Head.s的作用 AT&T汇编语言初步
操作系统引导部分代码
0.01版源代码树中/boot文件夹中的两个 汇编语言程序文件
Boot.s Head.s
Boot.s的作用
引导装载器,存放在mbr中的一段程序,负责将操作 系统加载到内存合适的地方,这一部分的代码运行在 实模式中,boot.s运行的最后将设置cr0进入保护模式, 然后将接着执行head.s中的程序
引导的步骤
一般来说,操作系统的引导过程分两个步骤: 首先,计算机硬件经过开机自检(Power On Self-Test,POST)
之后,从软盘或硬盘的固定位置装载一小段代码,这段代码一 般称为“引导装载器”。 然后,由引导装载器负责装入操作系统内核镜像文件并将控制 权交给操作系统进行进一步的初始化和运行操作系统
引导程序所具有的特点:
它的大小是512B,不能多一字节 也不能少一字节,因为BIOS 只读 512B 到内存中去。
它的结尾两字节必须是“55 AA”, 这是引导扇区的标志。
linux操作系统的启动流程
![linux操作系统的启动流程](https://img.taocdn.com/s3/m/b987f0f8ab00b52acfc789eb172ded630b1c98d9.png)
linux操作系统的启动流程Linux操作系统的启动流程可以大致分为BIOS/UEFI引导、引导加载程序、内核加载和初始化、用户空间初始化和系统运行五个阶段。
首先是BIOS/UEFI引导阶段。
当计算机开机时,会首先执行基本输入输出系统(BIOS)或统一固件接口(UEFI)固化到主板上的固件代码。
BIOS/UEFI固件负责对硬件进行初始化,并根据设置从适当的引导设备(如硬盘、光盘、USB驱动器等)中找到引导的主引导记录(MBR)或EFI系统分区中的引导程序。
接下来是引导加载程序阶段。
主引导记录或EFI系统分区中的引导程序负责加载操作系统的内核。
在传统的BIOS系统中,主引导记录包含一个小型的引导加载程序,它读取硬盘上的引导扇区并将控制权转移到这个扇区中。
而在UEFI系统中,EFI系统分区中存在一个可执行的EFI引导加载程序。
引导加载程序的作用是读取存储在硬盘上的内核镜像文件,并加载到RAM中。
接下来是内核加载和初始化阶段。
引导加载程序将内核镜像文件加载到RAM中后,将控制权交给内核。
内核是操作系统的核心部分,负责管理计算机的资源、提供系统调用接口等。
内核根据配置文件和硬件检测的结果进行初始化,并启动各种设备驱动程序。
此阶段还包括初始化内存管理、进程调度、文件系统等子系统,以及设置系统参数等操作。
接下来是用户空间初始化阶段。
一旦内核初始化完成,它将启动第一个用户空间进程init,这是Linux中所有进程的父进程。
init进程负责启动其他用户空间进程,并为用户提供一个运行环境。
传统的init进程是基于SysV的,现在也有系统使用systemd作为init进程。
最后是系统运行阶段。
在完成用户空间初始化后,系统将进入正常运行状态。
此时用户可以登录系统,运行应用程序和服务等。
需要说明的是,Linux的启动流程可以根据不同的发行版和配置有所不同,上述是一个一般的启动流程。
在实际情况中,可能还包括其他的操作,例如硬件自检、硬件初始化、驱动的加载和初始化等。
简述linux启动流程
![简述linux启动流程](https://img.taocdn.com/s3/m/f2bf22b3aff8941ea76e58fafab069dc51224752.png)
简述linux启动流程Linux系统启动的过程可以分为以下几个步骤:BIOS自检、引导加载程序、内核初始化、系统初始化和登录。
当计算机启动时,BIOS(Basic Input/Output System,基本输入/输出系统)会自检硬件设备,确保它们正常工作。
BIOS还会检查启动设备的设置,并寻找引导加载程序。
接下来,引导加载程序(Boot Loader)会被加载到计算机的内存中。
引导加载程序的作用是在计算机启动时加载操作系统内核。
常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(LInux LOader)。
引导加载程序加载内核后,内核开始初始化。
内核是操作系统的核心,负责管理计算机的硬件和软件资源。
内核初始化的过程包括设置内核参数、初始化进程、加载驱动程序等。
在这个阶段,内核还会挂载根文件系统,以便后续的系统初始化和运行。
系统初始化是Linux启动过程的下一个阶段。
在系统初始化过程中,Linux会启动各种系统服务和进程,包括网络服务、文件系统服务、用户管理服务等。
此外,系统还会进行一些配置操作,如加载配置文件、设置环境变量等。
系统初始化的过程可能会涉及到一些启动脚本和配置文件,以确保系统能够正确地启动和运行。
当系统初始化完成后,用户可以通过登录界面或命令行界面登录到Linux系统。
在登录之前,系统可能会要求用户输入用户名和密码进行身份验证。
一旦验证通过,用户就可以开始使用Linux系统提供的各种功能和应用程序了。
总结起来,Linux启动流程包括BIOS自检、引导加载程序、内核初始化、系统初始化和登录。
这个过程确保了Linux操作系统能够正常启动并提供各种功能和服务。
通过了解Linux启动流程,我们可以更好地理解Linux系统的运行机制,并能够更好地管理和使用Linux操作系统。
i.mx6 linux启动流程分析
![i.mx6 linux启动流程分析](https://img.taocdn.com/s3/m/b74e8610c5da50e2524d7f22.png)
MMU
MMU:Memory Management Unit,内存管理单元 操作系统通过使用处理器的MMU功能,能实现以下功能: 1)虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理 内存大的应用程序。为了使用虚拟内存,操作系统通常要设置一个 交换分区(通常是硬盘),通过将不活跃的内存中的数据放入交换 分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是 通过虚拟地址来实现的。 2)内存保护。根据需要对特定的内存区块的访问进行保护,通 过这一功能,我们可以将特定的内存块设置成只读、只写或是可同 时读写。
根文件系统挂载
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait
初始化eMMC 挂载eMMC Flash到 VFS /dev目录下
创建VFS
创建目录/dev 挂载真正的根文件系统
/developerworks/cn/linux/l-vfs/
I.MX6 LINUX 启动流程分析
2014/07/25
主要内容 i.MX6Q芯片启动流程 u-boot启动流程 linux内核启动流程 文件系统,服务程序启动流程
I.MX6Q功能框图
I.MX6 IROM和IRAM地址映射
I.MX6Q BOOT ROM
i.MX6 Boot ROM有以下功能: 支持从多种存储设备启动 串行下载(USB OTG) 芯片相关功能模块配置 (DCD) 数字签名认证 从低功耗模式唤醒 支持从以下设备启动: Nor Flash NAND Flash OneNAND Flash SD/MMC Serial ATA(SATA) HDD Serial (I2C/SPI) Nor Flash and EEPROM
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SYSTEM.MAP文件
内核符号表 In Linux, the System.map file is a symbol table used by the kernel
System.map
建立临时页表
当前系统状态
@临时页表已经建立,在0x8004000处,映射了4MB,虚地址 0x80008000被映射到0x10008000. @CACHE,MMU都已经打开。 @堆栈用的是任务init_task的堆栈。 下面进入C代码start_kernel(/linux/init/main.c)
MMU
MMU:Memory Management Unit,内存管理单元 操作系统通过使用处理器的MMU功能,能实现以下功能: 1)虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理 内存大的应用程序。为了使用虚拟内存,操作系统通常要设置一个 交换分区(通常是硬盘),通过将不活跃的内存中的数据放入交换 分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是 通过虚拟地址来实现的。 2)内存保护。根据需要对特定的内存区块的访问进行保护,通 过这一功能,我们可以将特定的内存块设置成只读、只写或是可同 时读写。
U-BOOT MEMORY MAP
U-BOOT 启动第二阶段
第二阶段 lib_arm\board.c(入口) 。。。
U-BOOT第二阶段流程图
U_BOOT_CMD
U-Boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命 令。如果开发板需要很特殊的操作,可以添加新的U-Boot命令。U-Boot 的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在 <include/command.h>头文件中定义 #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage} 其中: name:命令的名字,他不是一个字符串,不能用双引号括起来 maxargs:最大的参数个数 command:对应的函数指针 usage:一个字符串,简短的使用说明 help:一个字符串,比较详细的使用说明
启动INIT进程(用户进程)
当以上所有的初始化工作结束后,start_kernel()函数会调用rest_init()函 数来进行最后的初始化,包括创建系统的第一个进程-init 进程来结束内 核的启动。init 进程首先进行一系列的硬件初始化,然后通过命令行传递 过来的参数挂载根文件系统。最后init 进程会执行用户传递过来的“init =”启动参数执行用户指定的命令,或者执行以下几个进程之一: run_init_process("/sbin/init"); run_init_process("/etc/init"); run_init_process("/bin/init"); run_init_process("/bin/sh"); 当所有的初始化工作结束后,cpu_idle()函数会被调用来使系统处于闲置 (idle)状态并等待用户程序的执行。至此,整个Linux 内核启动完毕。
IVT IMAGE VECTOR TABLE
从SPI FLASH启动流程
SPI FLASH
i.MX6 内部RAM
检查映像 合法性
执行硬件 初始化
拷贝u-boot映像 到外部RAM
代码阅读
U-BOOT 两个阶段
分为两个启动阶段 第一阶段(汇编实现) 硬件设备初始化,CPU设置为 SVC32管理模式 关闭I/D Cache,关闭MMU 关闭二级缓存L2 Cache 设置好栈指针 调转到第二阶段的C入口函数 start_armboot 第二阶段(C语言) 硬件设备初始化 …
BUSYBOX
将众多UNIX命令集合进一个很小的可执行程序中,命令提供的选 项较少,但能满足嵌入式的应用。
svn文档:linux_doc/构建linux根文件系统
BUSYBOX 执行流程
INITTAB
读取/ect/inittab文件:进行初始化工作 /etc/inittab文件中每个条目用来定义一个子进程,并确定它的启动方法 格式: <id>:<runlevels>:<action>:<progress> <id>:表示这个子进程要使用的控制台(标准输入、标准输出、标准错 误设置)。如果省略,则使用与init进程一样的控制台。 <runlevels>:对于busybox init程序,这个字段无意义 <action>:表示init进程如何控制这个子进程:sysinit、wait、once、 respawn、askfirst、shutdown、restart、ctrlaltdel
U-BOOT 启动第一阶段
第一阶段重要文件 Makefile(make mx6q_sabresd_config---3332行) include\configs\mx6q_sabresd.h(u-boot配置文件) include\config.h(make自动生成) board\freescale\mx6q_sabresd\config.mk board\freescale\mx6q_sabresd\flash_header.S cpu\arm_cortexa8\start.S board\freescale\mx6q_sabresd\lowlevel_init.S board\freescale\mx6q_sabresd\u-boot.lds(链接脚本)
BOOT ROM启动模式
三种模式
00:读取熔丝位决定启动方式 01:USB下载模式 10:内部ROM执行启动流程
SPI FLASH启动模式
I.MX6Q PROGRAM IMAGE
i.MX6Q Program Image:用户编译完成的程序镜像文件,这里指 u-boot Program Image包含四部分: Image Vector Table(IVT) 内部ROM从IVT中读出需要的数据来启动芯片,是一个数据结构 Boot data 一张指向映像地址、映像大小的表 Device configuration data 包含芯片相关硬件初始化的寄存器地址和初始值 User code and data 用户代码和数据,这里指真正意义的u-boot代码和数据段
DO_BOOTM函数流程分析
DO_BOOTM_LINUX函数
LINUX内核启动过程概述
可以分为两Leabharlann 分:①架构/开发板相关的引导过程:汇编语言(arch/arm/kernel/head.s) 检查内核是否支持当前架构CPU,检查是否支持当前开发板 设置页表、使能MMU 复制数据段、清除BSS段、调用start_kernel函数 ②通用启动过程:C语言编写 进行内核初始化的全部工作,最后调用rest_init函数启动init进程:创 建系统第一个进程:init进程。
IMX6开发技巧
1)通过mfgtools下载固件 进入u-boot命令模式,输入download_mode命令,即可进入usb下 载模式,省去了每次下载都需要设置拨码开关麻烦。 2)制作文件系统时使用makefs脚本 3)在/etc/profile文件中添加可执行文件的PATH路径
Q&A
I.MX6 LINUX 启动流程分析
2014/07/25
主要内容 i.MX6Q芯片启动流程 u-boot启动流程 linux内核启动流程 文件系统,服务程序启动流程
I.MX6Q功能框图
I.MX6 IROM和IRAM地址映射
I.MX6Q BOOT ROM
i.MX6 Boot ROM有以下功能: 支持从多种存储设备启动 串行下载(USB OTG) 芯片相关功能模块配置 (DCD) 数字签名认证 从低功耗模式唤醒 支持从以下设备启动: Nor Flash NAND Flash OneNAND Flash SD/MMC Serial ATA(SATA) HDD Serial (I2C/SPI) Nor Flash and EEPROM
START_KERNEL
1) 调用setup_arch()函数进行与体系结构相关的第一个初始化工作; 对不同的体系结构来说该函数有不同的定义。对于ARM 平台而言,该函数 定义在arch/arm/kernel/Setup.c。它首先通过检测出来的处理器类型进行处 理器内核的初始化,然后通过bootmem_init()函数根据系统定义的meminfo 结构进行内存结构的初始化,最后调用paging_init()开启MMU,创建内核页 表,映射所有的物理内存和IO空间。 2) 创建异常向量表和初始化中断处理函数; 3) 初始化系统核心进程调度器和时钟中断处理机制; 4) 初始化串口控制台(serial-console); ARM-Linux 在初始化过程中一般都会初始化一个串口做为内核的控制台, 这样内核在启动过程中就可以通过串口输出信息以便开发者或用户了解系统 的启动进程。 5) 创建和初始化系统cache,为各种内存调用机制提供缓存 包括:动态内存分配,虚拟文件系统(VFS)及页缓存。 6) 初始化内存管理,检测内存大小及被内核占用的内存情况; 7) 初始化系统的进程间通信机制(IPC);
根文件系统挂载
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait
初始化eMMC 挂载eMMC Flash到 VFS /dev目录下
创建VFS
创建目录/dev 挂载真正的根文件系统
/developerworks/cn/linux/l-vfs/