Linux系统启动过程

合集下载

Linux的启动过程及init进程

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系统的启动流程
嵌入式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版本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 emmc启动原理

linux emmc启动原理

EMMC(Enhanced Multi-Media Card)是一种嵌入式闪存存储器,常用于智能手机、平板电脑等移动设备中。

在Linux 系统中,EMMC 启动原理如下:
1. 硬件检测:开机时,计算机硬件会进行自检,识别并初始化各种硬件设备,如内存、硬盘、显卡等。

在这个过程中,系统会检测到EMMC 设备。

2. 挂载点设置:系统启动时,会根据设备的路径和挂载点来加载EMMC 设备。

通常情况下,EMMC 设备会被挂载到/dev/mmcblk0 或/dev/mmcblk1 等目录下。

3. 文件系统初始化:加载EMMC 设备后,系统会初始化其文件系统。

这包括创建目录结构、分配空间、设置权限等。

4. 系统内核加载:初始化文件系统后,系统会从EMMC 设备上加载内核。

这个过程通常是通过GRUB(Grand Unified Bootloader)引导程序来完成的。

GRUB 会将压缩后的内核解压到内存中,并设置好启动参数,然后将控制权交给内核。

5. 内核启动:内核从EMMC 设备启动后,会进行初始化,包括加载设备驱动、建立内存管理、初始化文件系统等。

完成这些操作后,内核会进入用户空间,启动用户级程序,如init 进程。

6. 系统启动完成:init 进程会依次启动其他进程,如syslogd、networkd、dbusd 等,完成系统启动。

至此,Linux 系统已成功从EMMC 设备启动。

linux 启动原理

linux 启动原理

linux 启动原理Linux启动原理Linux启动过程是一个复杂的流程,涉及到多个环节和组件。

下面简要介绍一下Linux启动的大致步骤。

1. BIOS或UEFI(统一可扩展固件接口):计算机打开时,首先由基本输入/输出系统(BIOS)或UEFI进行初始化。

它们负责检测硬件设备、加载主引导记录(MBR)和分区表。

2. 主引导程序(MBR):主引导记录是位于硬盘的第一个扇区,其中包含了引导加载程序的代码。

当计算机启动时,BIOS或UEFI会找到MBR,并将其加载到RAM中。

3. 引导加载程序(Bootloader):MBR中的主引导程序会加载引导加载器,如GRUB(Grand Unified Bootloader)。

引导加载程序负责加载操作系统内核和其他必要的组件。

4. 内核启动:引导加载器将内核文件(例如vmlinuz)加载到RAM中,并将控制权交给内核。

内核负责初始化硬件设备、挂载文件系统、建立进程和进行错误检查。

5. Init系统:Linux启动后,第一个用户空间进程是init。

根据不同的发行版,可能使用SysVinit、Upstart或systemd等系统初始化工具。

Init系统会启动各种系统服务、加载驱动程序和执行其他必要的初始化任务。

6. 运行级别:Linux系统有不同的运行级别,用于确定启动过程中要运行的系统服务和进程。

每个运行级别都有不同的配置文件,包含了要启动和停止的服务。

7. 用户登录:一旦系统初始化完成,用户可以通过终端或图形界面登录。

登录后,用户可以使用各种命令和应用程序。

以上是Linux启动的大致步骤,每个步骤都非常重要,组成了一个完整的启动过程。

理解Linux的启动原理有助于我们更好地理解和管理Linux系统。

Linux系统后台启动过程

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之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教学课件

LINUX系统的启动、运行和关闭PPT教学课件
预引导(LILO/GRUB) 加载系统内核映像 (kernel boot)
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系统引导过程及排除启动故障

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”。

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解

Slackware Linux操作系统启动过程详解Joe Brockme IE r 研究了Slackware Linux init 进程。

他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。

我们的示例使用x86 平台上的Slackware Linux 发行版(请参阅本文后面的参考资料)。

大多数信息可用于其它Linux 发行版,但在细节处会略有不同。

尤其是,与其说Slackware 的init 结构类似于System V 结构,还不如说它更类似于BSD Unix结构,尽管Slackware 的最新发行版中的程序做了一些让步,它们要将服务添加到启动,但期望这些服务是System V 目录结构。

(请参阅侧栏,“BSD 和系统V init 脚本之间的差异”。

)所有进程的父代当Linux 机器引导时,究竟会发生什么?在计算机的BIOS 完成其任务后,系统会读取硬盘(或软盘,或CD-ROM,或Zip 驱动器……Linux 是非常灵活的)的第一位,并会遇到引导装入程序。

虽然GRUB 和其它装入程序也逐渐变得流行,但通常这就是Linux 装入程序(LInux LOader),一般称作LILO。

然后LILO 将Linux 内核装入内存,并开始展示它的魔力。

Linux 内核初始化了诸如SCSI 卡之类的设备,以及其它内核中内置的硬件设备。

然后内核运行init,它是除内核之外在系统运行的第一个进程。

如果执行ps ax | grep 1 ,就会看到init 的进程ID (PID) 是1。

装入init 之后,它会读取inittab 以查看下一步做什么。

inittab 告诉init 要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件。

运行级别运行级别是由系统上的所有服务在某个给定时间定义的(基本上是操作方式)。

Linux 可以有几种操作方式:单用户方式、单用户联网方式、多用户方式、始于X 窗口的多用户方式,等等。

linux启动顺序讲解

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操作系统开机启动过程详解

计算机及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学习_菜鸟教程_1

Linux学习_菜鸟教程_1

Linux学习_菜鸟教程_1Linux系统启动过程:内核的引导、运⾏init、系统初始化、建⽴终端、⽤户登录系统内核引导:计算机开机,然后BIOS开机⾃检,按照BIOS中设置的启动设备(通常是硬盘)来启动。

操作系统接管硬件以后,⾸先读⼊/boot下的内核⽂件。

运⾏init : init进程是系统所有进程的起点。

相当于windows中的服务。

init进程的⼀⼤任务,就是要运⾏开机启动程序。

并且是根据不同的场合需要来启动不同的程序。

这叫做“运⾏级别”。

Linux有7个运⾏级别。

系统初始化:主要完成激活交换分区、检查磁盘、加载硬件模块、以及其他⼀些需要优先执⾏的任务。

建⽴终端:运⾏init时会调⽤系统初始化的语句,语句执⾏完毕后,就返回init.init接下来会打开6个终端,以便⽤户登录。

⽤户登录系统:(1)命令⾏登录(2)SSH登录(3)图形界⾯登录图形模式与⽂字模式的切换⽅式:Linux预设提供了六个命令窗⼝终端机来让我们登录。

分别是tty1~6;⽤ctrl+Alt+F1~F6来切换。

在vmware虚拟机中,⽤Alt+Space+F1~F6来进⾏切换。

若在图形界⾯下,⽤Alt+Shift+Ctrl+F1~F6切换⾄命令窗⼝。

Linux关机正确的关机流程sync >shutdown>reboot>halt关机指令:shutdown ,man shutdown查看帮助⽂档如果需要切换到root⽤户,⽤sudo su.sync 将数据同步到硬盘中shutdown -h 10 'This sever will shutdown after 10 minutes'//告诉⼤家,计算机10min后关闭,并显⽰在登录⽤户的当前屏幕中shutdown -h now ⽴马关机=halt+poweroff=init 0shutdown -h 20:25 系统会在今天20:25关机shutdown -h +10 ⼗分钟后关机shutdown -r now ⽴马重启=reboot =init 6halt 关闭系统 ,等同于shutdown -h now 和poweroff最后总结⼀下:不管是重启还是关闭系统,⾸先要运⾏sync命令,把内存中的数据写到磁盘中。

Linux操作系统启动流程图文详解

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启动流程
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系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,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)

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启动流程

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分区后,第一个分区之前。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于在Linux系统的启动过程中会出现非常多的提示信 息,而且很多启动信息都是在屏幕上一闪而过,所以对于很 多Linux系统的初学者来说,可能会觉得Linux的启动过程 非常神秘和复杂。其实Linux系统的启动过程并不是大家想 象中的那么复杂,其过程可以分为8个阶段。
Linux操作系统启动流程
1.BIOS加电自检,取得第一个可启动的设备 2.加载主引导加载程序(MBR),即boot loader 3.根据boot loader的设置加载Kernel, Kernel检测 硬件和加载硬件驱动程序 4.调用init进程,取得run-level信息 5. Init 执行/etc/rc.d/rc.sysinit文件,准备软件操作环 境(网络、时区等) 6.Init执行run-level各个服务的启动(script方式) 7. Init执行/etc/rc.d/rc.local文件 8. Init执行终端机模拟程序mingetty来启动login进程 等待用户登录。
boot loader 可以加载 kernel 与 initrd ,然后在 内存中让 initrd 解压缩成为根目录, kernel 就能够借 此加载适当的驱劢程序,最终释放虚拟文件系统,挂 载实际的根目录文件系统, 就能够开始后续的正常开 机流程。 如果你的 Linux 是安装在 IDE 接口的磁盘上,开 机使用默认的 ext2/ext3 文件系统, 那么不需要 initrd 也能够顺利的开机进入 Linux 的!
BIOS加电自检
X86计算机在启动后首选会进行BIOS的加电自检,检 测计算机的硬件设备,然后按照CMOS设置的顺序搜索处于 活动状态并且可以引导的设备。引导设备可以是软盘、光驱 、USB设备、硬盘设置是网络上的某个设备。 BOIS指定启动设备,让我们读取磁盘中的系统内核文 件。采用INT13中断功能读取MBR(主引导分区,磁盘的第 一扇区)中的引导程序。 问:系统还没有启动,硬盘的驱动程序还没有加载, 如何识别硬盘MBR内的程序?
引导加载程序的启动
Red Hat Enterprise Linux 5.0默认安装的引导加载程 序是GRUB,是目前最常用的Linux引导加载程序。其引导 过程分为两个阶段,第一阶段是保存在MBR中的主引导加 载程序的加载。MBR中的主引导加载程序是一个512字节大 小的映像,其中包含有机器的二进制代码和一个小分区表。 主引导加载程序的任务就是查找并加载保存在硬盘分区上的 次引导加载程序,它通过分区表查找活动分区,然后将活动 分区的次引导加载程序从设备读入内存中并运行,进入引导 加载程序的第二阶段。 次引导加载程序也被称为内核加载程序,这个阶段的 任务是加载Linux内核。一旦次引导加载程序被加载到内存 中后,便会显示GRUB的图形界面,在该界面中用户可以通 过上下方向键选择需要加载的操作系统以及它们的内核。
5.3.1
引导加载程序的启动
GRUB配置
GRUB的配置主要通过修改/boot/grub/目录下的 grub.conf文件来完成,用户可以通过VI或者在图形界面中 使用文件编辑工具打开该文件进行编辑。 1.default选项 2.timeout选项 3.splashimage选项 4.hiddenmenu选项 5.title选项 6.root (hdx,y) 7.kernel选项
Initrd功能
当我们通过bootloader的管理而开始读取内核文件后 ,linux就会将内核解压缩到内存中,并利用内核的功能, 开始测试与驱动各个周边设备,包括存储设备、CPU、网卡 、声卡等。此时,Linux会以主机的功能重新检测一次硬件 ,而不一定会使用BOIS检测到得信息。也就是说内核此时 才开始接管BOIS的工作了。那么内核文件在哪里?一般来 说,它会被放置到/boot里面,并且取名为vmlinuz。 内核模块:为了硬件开发商与其他内核功能开发者得 便利,linux内核是可以通过动态加载内核模块的,这些内 核模块放置在/lib/modules目录内。 USB,SATA,SCSI等磁盘设备的驱动程序通常都是以 内核模块的方式存在的。
内核映像
当用户选择启动Linux操作系统后,GRUB会根据 /boot/grub.conf配置文件中所设置的信息,从/boot/所在的 分区上读取Linux内核映像,然后把内核映像加载到内存中并 把控制权交给Linux内核。Linux内核获得控制权后,将会按 以下步骤继续引导系统。 (1)内核映像首先会检测系统中的硬件设备,包括内存 、CPU、硬盘等,对这些设备进行初始化并配置。 (2)内核映像是经过压缩的,接下来它要对自身进行解 压,同时加载必要的设备驱动。 (3)初始化与文件系统相关的虚拟设备,如LVM或者软 件RAID等。 (4)装载根文件系统(/),把根文件系统挂载到根目 录下。 (5)完成引导后,Linux内核会在其进程空间内加载init 程序,并把控制器交给init进程,由init进程继续完成接下来 的系统引导工作。
内核映像
5.5
init进程
init进程是Linux系统所有进程的起点,内核在完成内 核引导后,便会加载init进程,其进程号是1。init进程启动 后,会初始化操作系统,并启动特定的运行级别( Runlevel)下的自动运行程序。用户可以通过更改相关的 配置文件或使用图形化配置工具“服务配置”,自定义需要 在系统启动时自动运行的服务。
Boot loader
Linux操作系统目前常用引导程序是GRUB,其主要功 能如下: 1. 用户可以选择不同的启动选项 2. 加载内核文件 3. 转交其他loader,将引导装载功能转交给其他 loader负责。 问:如何在一台主机中安装windows和Linux两种操作 系统? 每个文件系统都会保留一块引导扇区(boot sector) Linux安装时,可以选择将bootloader安装到MBR,或者 boot sector;windows安装时,默认主动将MBR与boot sector 都装上一份。所以应该先安装Windows。
(/etc/rc.d/rc N & /etc/sysconfig)
加载内核让整个系统准备接受指令来工作,再经过 /etc/rc.d/rc.sysinit 的系统模块相关硬件信息的初始化后,你 的系统应该已经顺利工作了。 但是,我们的系统还要系统 启动所需要的各项服务!这样主机才能提供我们相关的网络 或者是主机功能! 这个时候,依据我们在 /etc/inittab 里面 提到的 run level 设定值,就可以来决定启动的服务项目了 。 例如,使用 run level 3 当然就不需要启动 X Window 的 相关服务了。
那么我们开机时,到底是如何取得系统的 run level 的?当然 是 /etc/inittab 所设定的! 那么 /etc/inittab 到底有什么信息呢? init 依据 inittab 设定的处理流程是: 1. 先取得 runlevel 亦即默认执行等级的相关等级 2. 使用 /etc/rc.d/rc.sysinit 迚行系统初始化 3. 由于runlevel 是 5 ,因此只进行『l5:5:wait:/etc/rc.d/rc 5』 ,其他行则略过 4. 设定好 [ctrl]+[alt]+[del] 这组的组合键功能 5. 设定开断电系统的 pf, pr 两种机制; 6. 启动 mingetty 的六个终端机 (tty1 ~ tty6) 7. 最终以 /etc/X11/perfdm -nodaemon 启动图形界面!
/sbin/init
在内核完整的加载后,您的主机应该就开始正确的运作 了,接下来,就是要开始执行系统的第一支程序: /sbin/init 。 在核心加载完毕、进行完硬件检测及驱动程序加载后, 此时你的主机硬件应该已经准备就绪了 (ready) , 此时内核 会主动的调用第一支程序,那就是 /sbin/init 。你会发现 init 的 PID 号码是一号。 /sbin/init 最主要的功能就是准备软件 执行的环境,包括系统的主机名、网络设定、语系处理、文 件系统格式及其他朋务的启动等。 而所有的动作都会通过 init 的配置文件,亦即是 /etc/inittab 来规划,而 inittab 内还 有一个重重要的设定项目,那就是默认的 runlevel (开机执 行等级) !
Run level:执行等级有哪些?
那么什么是 run level 呢?他有什么功用啊?其实很简单, Linux 就是由设定 run level 来设定系统使用不同的服务来启动, 让 Linux 的使用环境不同。基本上,依据有无网络与有无 X Window 而将 run level 分为 7 个等级。 0 - halt (系统直接关机) 1 - single user mode (单人维护模式,用在系统出问题时的 维护) 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS 服务) 3 - Full multi-user mode (完整含有网络功能的纯文本模式) 4 - unused (系统保留功能) 5 - X11 (与 runlevel 3 类似,但加载使用 X Window) 6 - reboot (重新启动)
重启和关闭系统
Linux下常用的关机/重启命令有shutdown、root、 halt以及init,它们都可以达到重启系统的目的,但每个命 令的过程过程都有所不同。在本节的内容中将会介绍这些命 令的使用方法,以及它们之间的区别,希望读者经过本节的 学习后可以灵活使用这些命令,完成系统的关机和重启。
目前常用的硬盘接口为SATA,如果linux是安装在 SATA硬盘上的,可以通过BOIS的INT13中断取得引导 程序与内核文件来启动,然后内核会开始接管系统并 检测硬件及尝试挂载根目录来取得额外的驱动程序( 内核模块)。 问题是,内核根本不认识SATA,所以需要加载 SATA磁盘的驱动程序,否则根本无法挂载根目录,但 是SATA的驱动程序在/lib/modules内,无法挂载根目 录,又怎么读到SATA的驱动程序呢? Initrd就是解决这个问题的,一般存放的位置为 /boot/initrd,这个文件的特色是,它能够通过 bootloader加载到内存,并且在内存中仿真成根目录,即 可加载启动过程中所需要的内核模块(驱动程序)。载入 完成后,会帮助内核重新调用/sbin/init来开始后续造 成的启动流程
相关文档
最新文档