Linux 引导过程

引导过程的步骤

Linux系统典型的引导过程由下面6个不同的阶段组成:

加载并初始化内核

检测和配置设备

创建内核线程

操作员干预

执行系统启动脚本

多用户模式运行

系统管理员对以上大多数步骤几乎没有什么控制权。我们通过编辑系统启动脚本来影响大多数的引导配置。

初始化内核

Linux内核本身就是一个程序,系统引导过程中的第一项任务就是把这个程序载入内存,以便执行它。内核的路径名通常是/vmlinuz或者/boot/vmlinuz。

Linux系统实现了一种有两个阶段的加载过程。在第一阶段中,系统ROM把一个小的引导程序从磁盘载入到内存中。然后,这个程序再安排载入内核。

内核执行内存检测来确定有多少RAM可用。内核的一些内部数据结构按静态方式分配其内存量,因此,当内核启动时,它就为自己划分出一块固定大小的

实存空间。这块空间保留给内核使用,用户级进程不能使用。内核在控制台上打印一条消息,报告物理内存的总量以及用户进程可用的内存量。

配置硬件

内核执行的第一批任务之一包括检查机器的环境以确定机器有什么硬件。当您为自己的系统构建内核时,要好俗内核,它会找到哪些硬件设备。当内核开始执行时,它

试图找到并初始化已经告诉它的每一个设备。大多数内核为它们所找到的每个设备打印一行专门信息。现在的发行版本所包含的内核能够在绝大都Sohu机器配置上运行。

只要做最少量的定制。

在内核配置期间提供的设备信息经常不够明确。在这样的情况下,内核通过检测设备总线和向适当的驱动程序寻求信息来尝试它所需要的其他信息。那些没有检测到设备

的驱动程序或者那些没有响应探测的驱动程序将被禁用。如果某个设备后来被连接到系统上,那么还是有可能随时加载或者启动它的驱动程序的。

内核线程

一旦完成了基本的初始化任务,内核就在用户空间创建几个“自发”的进程。它们之所以被称作是自发进程,是因为这些进程不是通过系统正规的fork

机制所创建的。

自发进程的数量和特性随系统的不同而不同。在Linux上,看不到有PID 0进程。和进程init一起的是几个内存和内核处理进程,这些进程的PID都比较小

在ps命令的输出中它们的名字都被中括号括了起来。有时候这些进程的名字以一个斜线加一个数字结尾。这个数字表明该线程在哪个处理器上运行,在

多处理器的系统上会出现这种有意思的情况。

在所有的这些进程中,只有init是真证完整的用户进程。其他进程实际上都是内核的组成部分,为了调度或者结构上的原因而进行了装扮,使它们看上去

像是进程罢了。

一旦创建完毕自发进程,内核在引导阶段的任务就完成了。不过,处理基本操作的进程还一个都没有创建,而且大多数Linux守护进程也没有启动。这个

任务都是由init来负责的。

操作员干预

如果系统以单用户模式进行引导,那么在init启动时,内核所给出的命令行标志(single)会通知init实际要引导的是单用户模式。进程init最后会把控制权

交给sulogin,后者是login的一个“中间但不可控”的特殊版本,它提示用户输入root口令。如果输入的口令正确,系统将产生一个root shell。

在单用户shell中执行命令的方式和登录到已完全引导的系统上执行命令的方式类似。不过在SUSE、Debian、还有Ubantu系统上,这时通常只安装了root

分区。为了使用不在/bin、/sbin、或/etc下的程序,用户必须手动安装其他文件系统。

在许多但用户环境下,文件系统的根目录是按只读方式安装的。如果/tmp是根文件系统的一部分,那么许多要使用临时文件的命令都不能执行。为了解决

这个问题,必须先把根文件系统以读写方式重新安装,再开始但用户模式的交互操作。下面这条命令通常就能实现这个技巧。

mount -o remount,rw /

执行启动脚本

到了系统准备运行其启动脚本的时候,我们就能看出它是Linux系统了。尽管它看起来还不很像全部启动完毕的系统,但在接下来的启动过程中已经没有什么

“奇妙”步骤了。启动脚本就是普通的shell脚本,由init根据移动的算法选择并运行它们,尽管算法有时候有些复杂,但还是箱单容易理解的。

启动脚本的处理、馈送和分类有其自己的专门一节来介绍。

多用户运行

在初始化脚本运行过以后,系统就是完全运行的系统了,不过现在用户还不能登录进来。为了在某个特定终端上接受用户登录,必须有一个getty进程监听终端

或者控制台。init直接生成这些getty进程,完成引导过程。init还负责生成图形登录系统,例如xdm或gdm。

原文地址:http://blog.51cto.com/shamereedwine/2072952

时间: 2024-08-01 08:24:38

Linux 引导过程的相关文章

Linux 引导过程内幕

http://www.ibm.com/developerworks/cn/linux/l-linuxboot/ 早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化. 让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了.然后将回顾一下在各个步骤到底发生了什么.在整个过程中,参考一下内核源代码可以帮助我们更好地了

(转)嵌入式Linux引导过程-----从BootRom到Xloader

--by FeCen 在开始看Xloader_Entry的代码之前,我想先总结一下从芯片上电到开始运行Xloader的代码的过程,这是我目前理解的一个过程,可能有所出入,待以后继续完善.当系统上电之后,首先会将PC寄存器设置成BootRom里面的代码对应的一个地址.BootRom是芯片内部集成的一块很小的存储区,里面一般会固化一段启动代码.至于BootRom所占用的地址空间,每个芯片的定义可能会有所不同,具体的可以参考芯片的用户手册中的Memory Map部分的说明.在spearplus中,Bo

【转】Linux 高级的视角来查看Linux引导过程

[原文]https://www.toutiao.com/i6594210975480545800/ 1.概述 图 1 是我们在20,000 英尺的高度看到的视图. 当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码.在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中.嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM中的已知地址处的程序.在这两种情况下,结果都是相同的.因为PC提供了很多灵活性,BIOS必须

linux引导过程

首先申明一下,这儿的引导过程是比较简单的,并不涉及到kernel里面的详细引导步骤,希望对刚刚学习linux的朋友有帮助. 1.加电自检 这基本上是所有计算机开机都需要经过的步骤了,当计算机加电后它首先执行BIOS,BIOS对计算机硬件进行检测,当检测通过便完成了硬件的启动.当自检完成后BIOS按照设置的启动顺序寻找系统分区,并读入系统引导扇区,并将系统控制权交给引导程序. 2.mbr或gpt引导 mbr和gpt是什么在这儿就不做过多的介绍了,相信了解过计算机的朋友都知道.系统引导程序主要是把系

linux引导过程和服务控制

引导过程和服务控制 要求: ? 设置Linux系统每次开机后自动进入字符模式界面. 步骤: 编辑/etc/inittab文件,将默认运行级别修改为3.如图所示: ? 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:anacron.atd.avahi-daemon.Bluetooth.cups.firstboot.hidd.hplip.ip6tables.iptables.isdn.mcstrans.mdmonitor.nfslock.pcscd.portmap.re

Linux引导过程与服务控制

一:系统引导流程: 开机自检(BIOS)-->MBR引导-->GRUB菜单-->加载内核(kernel)-->init进程初始化  二:系统引导级别: 0 poweroff.target 关机状态,使用该级别时将会关闭主机 1 rescue.target   单用户模式,不需要密码验证即可登录系统,多用 于系统维护 2 multi-user.target 用户定义/减特定运行级别.默认等同于3,但是不支持网络 3 multi-user.target 字符界面的完整多用户模式,大多数

Linux学习笔记:系统启动引导过程

Linux系统启动引导过程 最近发现自己在只是掌握上有几个比较硬的伤: 一.知识体系碎片,比如Linux,这学点那学点,结果没有成体系,串不起来: 二.记忆时间短暂,很多的内容学了就忘,最后的结果是遇见一个知识点就能想起来自己的确学过,但是现在记不起来了. 三.理解程度浅显,比如说今天要整理关于Linux引导的内容,之前大体是知道的,不能称之为理解,我认为在学着一个知识点的时候至少要能系统有条理地讲出来,而不是有个模模糊糊的大体认识. 个别名词解释 1.BIOS(Basic Input Outp

Linux引导启动程序 - boot

主要描述 boot/目录中的三个汇编代码文件,见列表 3-1 所示.正如在前一章中提到的,这三个 文件虽然都是汇编程序,但却使用了两种语法格式.bootsect.s 和 setup.s 采用近似于 Intel 的汇编语言语法,需要使用 Intel  8086 汇编编译器和连接器 as86 和ld86,而 head.s 则使用 GNU 的汇编程序格式,并且运行在保护模式下,需要用 GNU 的 as 进行编译.这是一种 AT&T 语法的汇编语言程序. 使用两种编译器的主要原因是由于对于 Intel 

[svc]linux启动过程及级别

Unix目录结构的来历 Linux 的启动流程 Linux 引导过程内幕 嵌入式系统 Boot Loader 技术内幕 1.简单口述 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核kernel 5.启动init进程 6.读取inittab文件,执行rc.sysinit,rc等脚本 7.启动mingetty,进入系统登陆界面 2,简单图解 3,复杂图解 Linux系统开机启动流程介绍 4,详细描述 参考 开机BIOS自检阶段 读取MBR信息 进入grub引导菜单 加载ke