linux启动过程
Linux的启动过程及init进程
Linux的启动过程及init进程Linux下有三个特殊进程:idle进程(pid=0)idle进程其前⾝是系统创建的第⼀个进程,0号进程,也唯⼀⼀个没有通过fork()或者kernel_thread产⽣的进程,由系统⾃动创建,运⾏在内核态。
0号进程在创建了init进程后,演变成为idle进程。
主处理器上的idle进程是由原始进程(0号进程)演变⽽来,从处理器上的idle进程是由init进程fork得到的,pid也为0。
idle进程的优先级最低,不参与调度,只有在运⾏队列为空时才调度。
init进程(pid=1)init进程由0号进程创建,完成系统的初始化,是第⼀个⽤户进程,是其他所有⽤户进程的⽗进程。
kthreadd进程(pid=2)kthreadd进程由idle通过kernel_thread创建,始终运⾏在内核空间,负责内核进程的调度和管理。
init进程⼀开始是内核态,然后在运⾏了⼀个⽤户态的init程序之后,转成⽤户态,之后只能在⽤户态⼯作。
⽤户想要进⼊内核态只能通过调⽤API。
init进程要把⾃⼰转换成⽤户态,就需要运⾏⼀个⽤户态的应⽤程序(init程序),需要运⾏这个程序就需要找到这个程序,需要找到这个程序就需要挂载根⽂件系统,因为所有的应⽤程序都在⽂件系统中。
所以,需要先挂载根⽂件系统,并找到⽤户态下的init程序。
Linux中的所有进程都是由init进程创建并运⾏的。
⾸先Linux内核启动,然后在⽤户空间中启动init进程,再启动其他进程。
在系统启动完成后,init进程将变成守护进程监视系统的其他进程。
init启动了login进程(⽤户登录进程),命令⾏进程(提供命令⾏环境),shell进程(提供命令解释和执⾏)其中,shell进程是⽤户登录后运⾏的第⼀个程序。
运⾏级别:0 关机1 单⽤户2 多⽤户,会启动⽹络功能,但不会启动NFS,是维护模式3 多⽤户4 不使⽤,预留5 图形化界⾯6 重启emergency 急救模式直接使⽤init+运⾏级别在centos7中,init进程是systemed进程;在centos6中是upstart进程;在centos5中是init进程,在unbuntu中是init进程。
嵌入式linux系统的启动流程
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
arm版本linux系统的启动流程
arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
Linux系统后台启动过程
Linux 系统启动过程linux启动时我们会看到许多启动信息。
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:内核的引导。
运行 init。
系统初始化。
建立终端 。
用户登录系统。
init程序的类型:SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
内核引导当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
运行initinit 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先是需要读取配置文件 /etc/inittab。
运行级别许多程序需要开机启动。
它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。
也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7个运行级别(runlevel):运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多用户状态(没有NFS)运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式运行级别4:系统未使用,保留运行级别5:X11控制台,登陆后进入图形GUI模式运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动系统初始化在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit 是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
走进Linux之systemd启动过程
走进Linux之systemd启动过程Linux系统的启动方式有点复杂,而且总是有需要优化的地方。
传统的Linux 系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点。
在这里我们将着重讨论systemd的特性和争议,但是为了更好地理解它,也会看一下通过传统的以SysV init为基础的系统的Linux启动过程是什么样的。
友情提醒一下,systemd仍然处在测试阶段,而未来发布的Linux操作系统也正准备用systemd启动管理程序替代当前的启动过程(LCTT 译注:截止到本文发表,主流的Linux发行版已经有很多采用了systemd)。
理解Linux启动过程在我们打开Linux电脑的电源后第一个启动的进程就是init。
分配给init进程的PID是1。
它是系统其他所有进程的父进程。
当一台Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。
主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候GRUB或LILO会加载内核模块。
内核会马上查找/sbin下的“init”程序并执行它。
从这里开始init成为了Linux系统的父进程。
init 读取的第一个文件是/etc/inittab,通过它init会确定我们Linux操作系统的运行级别。
它会从文件/etc/fstab里查找分区表信息然后做相应的挂载。
然后init会启动/etc/init.d里指定的默认启动级别的所有服务/脚本。
LINUX系统的启动、运行和关闭PPT教学课件
init
建立用户接口
rc.sysinit rc
login
Shell
2020/12/12
用户执行Linux命令
+ 1.加载BIOS
(1)开机进BIOS首先会加电自检 BIOS即(Basic input output
System),它是写入到主板上的一个软件 程序。
在GRUB中的文件名为hdo,代号为(hdo,4); 在LINUX中的文件名为/dev/hda5,代号为(hd1,5)
Shell
用户执行Linux命令
2020/12/12
6
第1节 系统启动、运行和关闭
• 4.执行init进程
加电 加载BIOS
预引导(LILO/GRUB)
当内核加载完毕进行完硬件检测与驱动程序加载 后,主机硬件已经准备就绪,此时内核会主动调
(3)以查找顺序作为硬盘的代号,而不是依照 硬盘的物理排序 (4)第一个查找到的硬盘代号为0,第二个为1, 以此类推。
4
第1节 系统启动、运行和关闭
• 2.预引导(LILO/GRUB)与加载内核映像
加电 加载BIOS
预引导(LILO/GRUB)
由前述我们可知,第一块硬盘的MBR安装处的 硬盘代号就是(hdo),而第一块硬盘的第一个分 区的代号就是(hd0,0),第一块硬盘的第一个逻 辑分区代号为“(hdo,4)”.
BIOS是开机的时候计算机会主动去执 行的一个软件程序。
(2)然后计算机依据BIOS内的设置引导 顺序从硬盘(一般为硬盘,有时也为软 件或者光盘)中读入“主引导记录” (Master Boot Record)即MBR,然后将 其加载到物理内存中。
linux_mips启动流程_存储相关
Linux-mips启动流程-存储相关linux内核启动的第一个阶段是从/arch/mips/kernel/head.s文件开始的。
而此处正是内核入口函数kernel_entry(),该函数定义在/arch/mips/kernel/head.s文件里。
kernel_entry()函数是体系结构相关的汇编语言,它首先初始化内核堆栈段,来为创建系统中的第一个进程进行准备,接着用一段循环将内核映像的未初始化数据段(bss段在_edata和_end之间)清零,最后跳转到/arch/mips/kernel/setup.c 中的start_kernel()初始化硬件平台相关的代码。
下面讲述start_kernel() 函数。
在这个函数中跟内存初始化的函数是setup_arch()。
第一部分:以函数调用关系为线索下面是函数之间调用关系的框图:第一章:start_kenel()->setup_arch()setup_arch(&command_line);每种体系结构都有自己的setup_arch() 函数,这些是体系结构相关的。
【如何确定编译那个体系结构的setup_arch() 函数呢?主要由linux 源码树顶层Makefile 中ARCH 变量来决定的。
例如:MIPS 体系结构的。
SUBARCH := mipsARCH ?= $(SUBARCH)】。
void __init setup_arch(char **cmdline_p){cpu_probe();调用函数cpu_probe(),该函数通过MIPS CPU的PRID寄存器来确定CPU类型,从而确定使用的指令集和其他一些CPU参数,如TLB等prom_init();prom_init() 函数是和硬件相关的,做一些低层的初始化,接受引导装载程序传给内核的参数,确定mips_machgroup,mips_machtype 这两个变量,这两个变量分别对应着相应的芯片组合开发板;cpu_report();打印cpu_probe() 函数检测到的CPU 的Processor ID。
Linux系统引导过程及排除启动故障
Linux系统引导过程及排除启动故障⼀、Linux操作系统引导过程⼆、系统初始化进程1、init进程2、Systemd3、Systemd单元类型三、排除启动类故障【1】、修复MBR扇区故障(含实验过程)【2】、修复GRUB引导故障●⽅法⼆:进⼊急救模式,恢复GRUB引导程序(与MBR 引导扇区类似)●⽅法三:引导界⾯进⼊急救模式,重建GRUB菜单配置⽂件⽅案三实验四、遗忘root⽤户的密码实验过程⼀、Linux操作系统引导过程1.开机⾃检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进⾏初步检测,检测成功后根据预设的启动顺序移交系统控制权,⼤多时候会移交给本机硬盘。
总结:检测出第⼀个能够引导系统的设备,⽐如硬盘或者光驱2.MBR 引导当从本机硬盘中启动系统时,⾸先根据硬盘第⼀个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导⽂件的分区;或者直接根据MBR 记录中的引导信息调⽤启动菜单(如 GRUB)。
总结:运⾏放在MBR扇区⾥的启动GRUB引导程序3.GRUB 菜单对于Linux操作系统来说,GRUB(统⼀启动加载器)是使⽤最为⼴泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显⽰启动菜单给⽤户选择,并根据所选项(或采⽤默认值)加载Linux内核⽂件,然后将系统控制权转交给内核。
CentOS 7 采⽤的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置⽂件/boot/grub2/grub.cfg,来获取内核和镜像⽂件系统的设置和路径位置4.加载 Linux 内核Linux内核是⼀个预先编译好的特殊⼆进制⽂件,介于各种硬件资源与系统程序之间,负责资源分配与调度。
内核接过系统控制权以后,将完全掌控整个Linux操作系统的运⾏过程。
CentOS 7系统中,默认的内核⽂件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
grub启动过程
第二阶段:
BIOS通过下面两种方法之一来传递引导记录:
第一, 将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中
/boot/grub/stage2 /etc/rc.d/rc<#>.d
/etc/rc.d/init.d/*
stage 1:MBR(512 字节,0头0道1扇区),前446字节存放的是 stage1,后面存放硬盘分区表信息,BIOS将stag1载入内存中0x7c00处并跳转执行。stage1(/stage1/start.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区读入内存。0头0道2扇区内容是源代码中的/stage2/start.S,编译后512字节,它是stage2或者stage1_5的入口。
BIOS启动引导阶段 GRUB启动引导阶段 内核阶段 /init/sysinit阶段
==================================================================================================
读取/boot/grub.conf文件并显示启动菜单;
装载所选的kernel和initrd文件到内存中
第三阶段:内核阶段:
运行内核启动参数;
解压initrd文件并挂载initd文件系统,装载必须的驱动;
start.S的主要功能是将stage2或stage1_5从硬盘载入内存,如果是stage2,则载入0x820处;如果是 stage1_5,则载入0x2200处。
linux启动顺序讲解
linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
计算机及Linux操作系统开机启动过程详解
计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。
执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。
执⾏该跳转(⼆跳)。
阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。
执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。
执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。
具体过程见下⽂“操作系统启动过程”部分。
整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。
BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。
启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。
往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。
若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。
可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。
因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。
Linux操作系统启动流程图文详解
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启动流程
Linux启动流程是指从开机到进入用户界面的整个过程。
在这个过程中,系统依次完成了硬件初始化、内核启动、启动脚本执行等一系列操作。
1. BIOS或UEFI初始化:开机后,计算机首先会进入到BIOS或UEFI程序中,进行硬件的自检和初始化。
2. 加载引导程序:BIOS或UEFI会查找系统中的引导设备,比如硬盘、光盘、USB等,找到后会将引导程序加载进内存中。
3. 加载内核文件:引导程序会读取内核文件,并将其加载到系统内存中。
4. 内核启动:内核在加载完成后,开始执行初始化操作,包括设备驱动程序的加载、文件系统的挂载等。
5. 运行init进程:内核启动后,会运行init进程,init进程是Linux系统的第一个用户空间进程,主要负责系统初始化和进程管理,同时也是其他终端应用程序的父进程。
6. 执行启动脚本:init进程会读取启动脚本,并依次执行其中的命令,完成系统的初始化和配置。
7. 进入用户界面:启动脚本完成后,系统会进入到用户界面,等待用户的登陆。
总之,Linux系统启动过程是一个非常复杂的过程,从硬件的自检到系统进入用户界面,需要经过多个环节和步骤。
但是,在这个过程中,每个环节都发挥了至关重要的作用,为系统的正常运行打下了
基础。
简要分析linux系统的启动过程
简要分析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文件系统启动过程及login的实现(busybox)
Linux⽂件系统启动过程及login的实现(busybox)1. busybox简介busybox是⼀个集成了⼀百多个最常⽤linux命令和⼯具的软件,它将许多常⽤的LINUX命令和⼯具结合到了⼀个单独的可执⾏程序中。
虽然与相应的GNU⼯具⽐较起来,busybox所提供的功能和参数略少,但在⽐较⼩的系统(例如启动盘)或者嵌⼊式系统中,已经⾜够了。
busybox在设计上就充分考虑了硬件资源受限的特殊⼯作环境。
它采⽤⼀种很巧妙的办法减少⾃⼰的体积:所有的命令都通过“插件”的⽅式集中到⼀个可执⾏⽂件中,在实际应⽤过程中通过不同的符号链接来确定到底要执⾏哪个操作。
例如最终⽣成的可执⾏⽂件为busybox,当为它建⽴⼀个符号链接ls的时候,就可以通过执⾏这个新命令实现列⽬录的功能。
采⽤单⼀执⾏⽂件的⽅式最⼤限度地共享了程序代码,甚⾄连⽂件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源⽐较紧张的系统来说,是最合适不过了。
Busybox配置如下:Build Options--->[*] Build BusyBox as a static binary (no shared libs)Installation Options --->Login/Password Management Utilities --->Do you want to build BusyBox with a Cross Compiler。
如果要对其他平台进⾏编译就要选择它并设置相应的编译程序前缀。
我们选择armv5l-linux-,前⾯加上绝对路径。
Login/Password Management Utilities--->[*]Use internal password and group functions rather than system functions。
这⾥设置使⽤busybox⾃⼰的password和shadow⽂件的功能。
linux启动流程
centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。
o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。
MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。
linux reboot的流程
linux reboot的流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!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!Linux 重启流程。
1. 触发重启命令。
可以使用以下命令触发 Linux 重启:`reboot`。
Linux启动脚本
Linux启动流程详解从用户打开电源到用户可以登录的这短短的一段时间内,Red Hat Enterprise Linux到底都作了哪些事情,只有知道了这些事情,用户在以后的使用过程中,如果出现了一些问题,我们可以借助这些过程来为我们排除一些故障。
Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作主要是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等主要是为了检查这些设备在开机的时候是否能通过检测,如果能通过检测,说明电脑可以正常的工作。
------------------------------载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由那个设备来启动电脑的操作系统,这个设备一般是硬盘。
也就是进入到硬盘的MBR区域,这个区域中的有512个字节的大小,其中前446个字节中保存的程序是选择启动分区,也就是电脑由那个硬盘分区来载入开机的程序。
那么在这个446个字节的空间中保存的就是启动程序,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序。
grub程序的这个配置文件是保存在:/boot/grun/grub.conf这个文件中,如果修改完这个文件后,设置会立刻生效。
现在来看看这个文件的内容以及语法: 使用cat /boot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。
可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。
第一个部分中的defaule=0,是指第一组操作系统开机。
如果有两组操作系统的开机设定,而defaule=1,那么预设使用第二组操作系统开机。
所谓 第一组和第二组程序就是指的是title开始的部分,这里是区分操作系统的部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux系统启动过程分析by 王斌斌binbinwang118@Linux系统启动过程分析操作系统的启动过程,实际上是控制权移交的过程。
Linux 系统启动包含四个主要的阶段:BIOS initialization, boot loader, kernel initialization, and init startup.见下图:阶段一、BIOS initialization,主要功能如下:1.Peripherals detected2.Boot device selected3.First sector of boot device read and executed系统上电开机后,主板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提供了一个操作系统(软件)和系统外围关键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否准备好,以供操作系“”统使用。
阶段二、Boot Loader关于Boot Loader,简单的说就是启动操作系统的程序,如grub,lilo,也可以将boot loader本身看成一个小系统。
The BIOS invokes the boot loader in one of two ways:1.It pass control to an initial program loader (IPL) installed within a driver's Master Boot Record(MBR)2.It passes control to another boot loader, which passes control to an IPL installed within apartition's boot sector.In either case, the IPL must exist within a very small space, no larger than 446 bytes. Therefore, the IPL for GRUB is merely a first stage, whose sole task is to locate and load a second stage boot loader, which does most of the work to boot the system.There are two possible ways to configure boot loaders:Primary boot loader: Install the first stage of your Linux boot loader into the MBR. The boot loader must be configure to pass control to any other desired operating systems.Secondary boot loader: Install the first stage of your Linux boot loader into the boot sector of some partition. Another boot loader must be installed into the MBR, and configured to pass control to your Linux boot loader.假设Boot Loader 为grub (grub-0.97),其引导系统的过程如下:grub 分为stage1 (stage1_5) stage2两个阶段。
stage1 可以看成是initial program loaderI(IPL),而stage2则实现了grub 的主要功能,包括对特定文件系统的支持(如ext2,ext3,reiserfs等),grub自己的shell,以及内部程序(如:kernrl,initrd,root )等。
stage 1:MBR(512 字节,0头0道1扇区),前446字节存放的是stage1,后面存放硬盘分区表信息,BIOS 将stag1载入内存中0x7c00 处并跳转执行。
stage1(/stage1/stage.S)的任务非常但存,仅仅是将硬盘0头0道2扇区读入内存。
0头0道2扇区内容是源代码中的/stage2/start.S,编译后512字节,它是stage2或者stage1_5的入口。
注:此时stage1是没有能力识别文件系统的,其定位硬盘0头0道2扇区过程如下:BIOS将stage1载入内存0x7c00处并执行,然后调用BIOS INIT13 中断,将硬盘0头0道2扇区内容载入内存0x7000处,然后调用copy_buffer将其转移到内存0x8000处。
定位0头0道2扇区有两种寻址方式:LBA、CHS,代码如下:start.S : st art.S的主要功能是将stage2 或stage1_5 从硬盘载入内存,如果是stage2,则载入0x8200注:这里的stage2 或者stage1_5 不是 /boot 分区/boot/grub目录下的文件,这个时候grub 还没有能力识别任何文件系统。
分以下两种情况:(1)假如start.S 读取的是stage1_5,它存放在硬盘0头0道3扇区向后的位置,stage1_5作为stage1和stage2中间的桥梁,stage1_5有识别文件系统的能力,此后,grub 才有能力去访问 /boot 分区/boot/grub 目录下的stage2 文件,将stage2载入内存并执行。
(2)假如start.S 读取的是stage2,同样,这个stage2 也不是/boot 分区/boot/grub 目录下的stage2,这个时候start.S读取的是存放在/boot 分区Boot Sector的stage2。
这种情况下就有一个限制:因为start.S通过BIOS中断方式直接对硬盘寻址(而非通过访问具体的文件系统),其寻址范围有限,限制在8GB以内。
因此这种情况需要将/boot 分区分在硬盘8GB寻址空间之前。
如下图:trouble shootting:很明显,假如是情形(2),我们将/boot/grub目录下的内容清空,依然能成功启动grub;假如是情形(1),将/boot/grub目录下stage2删除后,则系统启动过程中grub会启动失败。
stage2,如上所说,start.S作为stage2或者stage1_5的入口,最终都会把stage2载入内存并执行。
stage2作为grub 的主要功能实现,其存放于具体的文件系统下,如/boot/grub/stage2,也可存放于/boot分区的boot sector。
下面分析stage2过程。
stage2的入口是asm.S(/stage2/asm.S),asm.S文件对一些变量做初始化,如config_file,参见如下代/boot/grub/menu.lst。
在asm.S 之前都是汇编语言,这部分汇编代码很重要的工作是完成了C语言环境的初始还,从汇编进化到C。
asm.S中会调用init_bios_info (void),这是整个C语言代码的入口,在/stage2/common.c中定义。
不论是图形菜单选选择相应的启动项,还是在grub> shell下执行相应的指令。
都由find_command() 函数在struct builtin *builtin_table[]变量中找相应的指令,然后执行对应指令的XXX_func()函数,都是static类型的函数。
其主要代码如下:阶段三、Kernel Initialization如阶段2所述,grub>boot 指令后,系统启动的控制权移交给kernel。
Kernel会立即初始化系统中各设备并做相关配置工作,其中包括CPU、I/O、存储设备等(关于Kernel这部分工作,具体怎么处理不清楚)。
关于设备驱动加载,有两部分:一部分设备驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设备,同时将日志输出到kernel message buffer,系统启动后,dmesg可以查看到这部分输出信息。
另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在initrd(ramdisk)中。
下面详述一下initrd。
在2.6内核中,支持两种格式的initrd,一种是2.4内核的文件系统镜像image-initrd,一种是cpio格式。
以cpio 格式为例,内核判断initrd为cpio的文件格式后,会将initrd 中的内容释放到rootfs中。
initrd 一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统/ 时,会先访问initrd文件系统。
将initrd中的内容打开来看,会发现有bin、devetc、lib、procsys、sysroot、init等文件(包含目录)。
其中包含了一些设备的驱模拟块,比如scsi ata等设备驱动模块,同时还有几个基本的可执行程序insmod, modprobe, lvm,nash。
主要目的是加载一些存储介质的驱动模块,如上面所说的scsi ideusb等设备驱动模块,初始化LVM,把/ 根文件系统以只读方式挂载。
initrd中的内容释放到rootfs中后,Kernel会执行其中的init文件,这里的init是一个脚本,由nash解释器执行。
这个时候内核的控制权移交给init文件处理,我们查看init文件的内容,主要也是加载各种存储介质相关的设备驱动。