2022年linux系统引导过程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年linux系统引导过程 .pdf》由会员分享,可在线阅读,更多相关《2022年linux系统引导过程 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、linux 系统引导过程简介首先 ,主板的 BIOS 会读取硬盘的主引导记录(MBR),MBR 中存放的是一段很小的程序,他的功能是从硬盘读取操作系统核心文件并运行,因为这个小程序太小了 ,因此通常这个小程序不具备直接引导系统内核的能力 ,他先去引导另一个稍微大一点的小程序,再由这个大一点的小程序去引导系统内核 .在 linux 系统中这样的小程序有LILO 和 GRUB. 在这个项目中 ,我决定用 LILO 来做系统引导程序 .在软盘上启动 linux 系统的过程和在硬盘上启动的过程相似. Linux 系统内核被引导程序装入内核并运行后,linux 内核会检测系统中的各种硬件.并做好各种硬件
2、的初始化工作 ,使他们在系统正式运行后能正常工作.之后内核做的最后一个工作是运行/sbin 下的 init 程序,init 是英文单词 initialization( 初始化 )的简称 ,init 程序的工作是读取 /etc/inittab文件中描述的指令 ,对系统的各种软硬件环境做最初化设定.最后运行 mingetty 等待用户输入用户名登录系统 .所有的工作就这么简单 ,虽然 linux 启动的时候有很多内容 ,看上去十分高深 ,但是都不过是对这个过程的扩充.明白了这个道理 ,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务 .事实上系统内核并不关心/sbin 下的 init 是不
3、是真的 init,只要是放在 /sbin 下名叫 init的可执行程序他都可以执行.Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段: 1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。2.执行程序init(系统初始化 )装入内核并初始化设备后,运行init 程序。 init 程序处理所有程序的启动,包括重要系统精灵程序和其它指定在启动时装入的软件。开机 -BIOS 自检 -载入启动程序-加载内核 -启动 init 服务 -加载 /etc/inittab-Run level-rc.sysinit-rc- mingetty-rc.lo
4、cal 一.BIOS 自检当电脑开机的时候,电脑会进入BIOS, 在 PC 机中引导LINUX 是从 BIOS 中的地址0 xFFFF0处开始的 .BIOS 的第一个步骤是加电自检,即所谓的POST(Power On Self Test),BIOS的第二个步骤是进行本地设备的枚举和初始化,侦测电脑周边配套设备是否工作正常,如 cpu 的类型,速度 ,缓存等 ;主板类型 ,内存的速度 ,容量 ,硬盘的大小 ,类型和工作模式,风扇速度等 ,主要是为了检查这些设备在开机的时候是否能通过检测,说明电脑可以正常的工作.BIOS 由两部分组成 :POST 代码和运行时的服务.当 POST 完成之后 ,它被
5、从内存中清理了出来,但是 ,BOIS运行时服务依然保留在内存中,目标操作系统可以使用这些服务二.载入启动程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - BIOS 自检完成后,BIOS 会根据用户设置的启动顺序来由哪个设备启动电脑的操作系统,设备需是处于活动状态并且可以引导的,(引导设备可以是软盘,CD-ROM, 硬盘上的某个分区,网络上的某个设备,甚至是 USB 闪存 ),对于 linux 这个设备一般是硬盘也就是进入硬盘
6、的MBR 区域, (master boot record,位于磁盘上的第一个扇区中,0 道 0 柱面 1 扇区 ),这个区域中有 512 个字节的大小,其中前446 个字节中保存的就是启动程序,(446 个字节包含可执行代码和错误消息文本,接下来的64 个字节是分区表,其中4 个分区的记录,每个记录的大小是 16 个字节 ,MBR 以两个特殊数字的字节0 xAA55 结束 ,这个数字用来进行MBR 的有效性检查 ,当 MBR 被加载到RAM 中之后 ,BIOS 就会将控制权交给MBR) ,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub 程序 .(grub 不像 lilo 一
7、样使用裸扇区,而是可以从ext2 或 ext3 文件系统中加载LINUX 内核 ). 要看 MBR 的内容,请使用下面的命令#从/dev/sda上读取前 512 个字节的内容,并将其写入mbr.bin 文件中rootlocalhost # dd if=/dev/sda of=mbr.bin bs=512 count=1 #以十六进制和ASCII 码格式打印这个二进制文件的内容rootlocalhost pam.d# od -xa mbr.bin grub 程序的这个配置文件是保存在:/boot/grub/grub.conf这个文件中 ,如果修改这个文件后,设置会立刻生效. 使用 cat /bo
8、ot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。第一个部分中的defaule=0, 是指第一组操作系统开机。如果有两组操作系统的开机设定,而 defaule=1 ,那么预设使用第二组操作系统开机。所谓第一组和第二组程序就是指的是title 开始的部分,这里是区分操作系统的部分。如何知道要使用那一个系统呢,可以看到在title 开始的部分的下一行有:root (hd0,0) hd0,表示第一个硬盘0:指的是硬盘的第一个分区,在括号中的那个0 和 defaule=0 是一一对应的
9、。 这就可以知道是启动的是那一个操作系统。timeout 5 是指进入GRUB 的画面后,会有5 秒的时间让使用者选择使用那个操作系统开机。如果在这个时间没有作出选择那么,那么就使用defaule 的设定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - splashimage 是开机使用的背景图案。hd0,表示第一个硬盘0:指的是硬盘的第一个分区,和上面的一样,/grub/splash.xpm.gz就是开机使用的背景图案的文件名
10、称hiddenmenu指令是隐藏开机的选单。title:开机选单的标题名称。root (hd0,0):0表示下面要介绍的档案位于那个目录中。(hd0,0) 同样是指 /boot 目录kernel: 存放内核的位置,由于(hd0,0) 指的是 /boot 目录,所以这个文件在boot 目录中。ro root LABEL /就是设根目录的位置,ro 表示 read only, 所以有这行的设定,才能读取根目录。rhgb: red hat 图形界面启动,取代以前的文本界面。如果要使用文本界面的形式启动,只要将 rhgb 删除即可。quite :在开机过程中不要显示错误的信息。如果要显示错误信息,只要
11、删除quite 即可。initrd :将 initrd 映像文件加载到内存。这个文件里面存放的都是驱动程序。三.加载内核正确的启动了启动程序之后,接下来的工作就是载入操作系统的内核.内核主要作用是取得BIOS 所检测到的硬件设备的信息,然后将这些硬件设备自己来管理,这样才能够提供给Linux 系统使用。接手了硬件设备后,然后就要加载这些设备的驱动程序。以便于控制电脑上的设备如何正确的工作。加载完硬件的驱动程序后,接下来就加载文件系统了,也就是加载开机所需要的库文件,程序等,所以 /etc /bin /sbin /dev /lib这些目录的根目录必须是同一个分区,否则会造成Linux的开机失败。
12、上面在 grub 中有 “ro root LABEL / ”这样的信息,是以只读的方式来加载所需要的文件,程序,这是为什么呢?是因为 Linux 的内核在启动的过程中,不知道将会发生什么故障,可能不是很稳定,如果以可读可写的方式来加载,那么启动的过过程组中如果出现异常或者是断电,那么就有可能破坏,为了避免这些问题的发生,就采取只读的方式来挂载文件系统。 LINUX 内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些代码完成解压缩。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像,它通常是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
13、- - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 一个 zlmage( 压缩映像 ,小于 512kb) 或一个 bzlmage( 大于 512kb), 它是提前使用zlib 进行压缩过的 .在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM 磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程当 bzlmage 被调用时 ,(以 i386 为例 ),我们从 ./arch/i386/boot/
14、head.S的 start 汇编例程开始执行,这个例程会执行一些基本的硬件设置,并调用 ./arch/i386/boot/compressed/headS中的startup_32例程 ,此例程会设置一个基本的环境(堆栈等 ),并清楚 Block Started by Symbol(BSS), 然后调用一个叫做decompress_kernel的 C 函数(在./arch/i386/boot/compressed/misc.c中)来解压内核 .当内核被解压到内存中之后,就可以调用它了 .这是另外一个startup_32函数 ,但是这个函数在./arch/i386/kernel/head.S中.在
15、这个新的 startup_32函数 (也称为清楚程序或进程0)中,会对页表进行初始化,并起用内存分页功能 .然后会为任何可选的浮点单元(FPU) 检测 CPU 的类型 ,并将其存储起来供以后使用,然后调用 start_kernel函数 (在 init/main.c中),它会将您带入与体系结构无关的Linux 内核部分 .实际上 ,这就是 Linux 内核的 main 函数 .通过调用 start_kernel, 会调用一系列初始化函数来设置中断 ,执行进一步的内存配置,并加载初始RAM 磁盘 .最后 ,要调用 kernel_thread(在arch/i386/kernel/process.c中
16、)来启动 init 函数 ,这是第一个用户空间进程(user-space process). 最后 ,启动空任务 ,现在调度器就可以接管控制权了(在调用 cpu_idle 之后 ).通过起用中断 ,抢占式的调用器就可以周期性地接管控制权,从而提供多任务处理能力.在内核引导过程中 ,初始 RAM 磁盘 (initrd) 是由阶段2 引导加载程序加载到内存中的,它会被复制到RAM中并挂载到系统上.这个 initrd 会作为 RAM 中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导.由于与外围设备进行交互所需要的模块可能是initrd 的一部分 ,因此内核可以非常小,但
17、是仍然需要支持大量可能的硬件配置.在内核引导之后,就可以正式装备根文件系统了(通过 pivot_root), 此时会将 initrd 根文件系统卸载掉,并挂载真正的根文件系统,initrd 函数让我们可以创建一个小型的linux 内核 ,其中包括作为可加载模块编译的启动程序,这些可加载的模块作为内核提供了访问磁盘和磁盘上的方法,并为其他硬件提供了驱动程序,由于根文件系统是磁盘上的一个文件系统,因此 initrd 函数会提供一种启动方法来获得对磁盘的访问,并挂载真正的根文件系统.在一个没有硬盘的嵌入式环境中,initrd 可以是最终的根文件系统,也可以通过网络文件系统(NFS) 来挂载最终的根文
18、件系统. 在 GRUB 命令中,我们可以使用initrd 映像引导一个特定的内核,方法如下: grub kernel /bzImage-2.6.14.2 Linux-bzImage, setup=0 x1400, size=0 x29672e grubinitrd /initrd-2.6.14.2.img Linux-initrd 0 x5f13000, 0 xcc199 bytes 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - -
19、 - grub boot Uncompressing Linux. Ok, booting the kernel. 如果不知道要引导的内核的名称,只需使用 /然后按下Tab 键,就会显示内核和initrd 映像列表对 grub 命令行进行加密a)使用命令 /sbin/grub-md5-crypt来产生 grub 使用的密码rootlocalhost pam.d# /sbin/grub-md5-crypt Password: Retype password: $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 b)修改 /etc/grub.conf加入 password -md5 $
20、1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title 之前这样重启系统时在grub 的启动 grub 菜单时, 想再按 e 命令进行编辑时,必须先按 p 键后输入密码才成. 四.启动 init 服务加载完成内核之后,Kernel 会启动 init 这个程序, init 进程是所有进程的起点,也是Linux内核启动后的第一个动作,所以这个程序的PID 是永远是1, 也是 Red Hat Enterprise Linux中执行的第一个程序,这个程序会根据Run Level 来执行一些相关的程序程序。利用init 程序可以方便地定制启动其间装入哪些程序。init 进程是
21、所有进程的发起者和控制者,init 的任务是启动新进程和退出时重新启动其它进程,例如在大多数Linux 系统中,启动时最初装入六个虚拟的控制台进程,退出控制台窗口时,进程死亡, 然后 init 启动新的虚拟登录控制台,因而总是提供六个虚拟登陆控控制台进程. init进程有以下两个作用。 init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。 如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。 init的第二个作用是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年linux系统引导过程 2022 linux 系统 引导 过程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内