Linux学习笔记:系统启动引导过程
Linux系统启动引导过程
近期发现自己在仅仅是掌握上有几个比較硬的伤:
一、知识体系碎片,比方Linux,这学点那学点,结果没有成体系,串不起来;
二、记忆时间短暂,非常多的内容学了就忘,最后的结果是遇见一个知识点就能想起来自己的确学过。可是如今记不起来了。
三、理解程度浅显,比方说今天要整理关于Linux引导的内容,之前大体是知道的,不能称之为理解,我觉得在学着一个知识点的时候至少要能系统有条理地讲出来,而不是有个模模糊糊的大体认识。
个别名词解释
1.BIOS(Basic Input Output System):基本输入输出系统。事实上。它是一组固化到计算机内主板上一个ROM芯片上的程序。它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序。它可从CMOS中读写系统设置的具体信息。
2.MBR(Master Boot Record):主引导记录。硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。
MBR是不属于不论什么一个操作系统。也不能用操作系统提供的磁盘操作命令来读取它,但能够通过命令来改动和重写。
3.GRUB(GRand Unified Bootloader):GNU GRUB是一个来自GNU项目的多操作系统启动程序。
GRUB是多启动规范的实现,它同意用户能够在计算机内同一时候拥有多个操作系统,并在计算机启动时选择希望执行的操作系统。GRUB可用于选择操作系统分区上的不同内核。也可用于向这些内核传递启动參数。
Linux引导过程预览
从按下电源键后执行的操作:
具体分析引导过程
第一步、载入BIOS
BIOS的功能由两部分组成,各自是POST码和Runtime服务。POST阶段完毕后它将从存储器中被清除。而Runtime服务会被一直保留。用于目标操作系统的启动。BIOS两个阶段所做的具体工作例如以下:
步骤1:上电自检POST(Power-on self test),主要负责检測系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。比如。最常见的是内存松动的情况。BIOS自检阶段会报错,系统就无法启动起来。
步骤2:步骤1成功后。便会执行一段小程序用来枚举本地设备并对其初始化。这一步主要是根据我们在BIOS中设置的系统启动顺序来搜索用于启动系统的驱动器。如硬盘、光盘、U盘、软盘和网络等。我们以硬盘启动为例。BIOS此时去读取硬盘驱动器的第一个扇区(MBR,512字节)。然后执行里面的代码。
实际上这里BIOS并不关心启动设备第一个扇区中是什么内容。它仅仅是负责读取该扇区内容、并执行。
至此,BIOS的任务就完毕了。此后将系统启动的控制权移交到MBR部分的代码。
第二步、读取MBR
系统找到BIOS所指定的硬盘的MBR后,就会将其拷贝到0×7c00地址所在的物理内存中。事实上被拷贝到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
补充:
一个扇区的硬盘主引导记录MBR由4个部分组成。
主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并执行系统引导程序。
出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。
分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH–01FDH,每一个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
结束标志字,偏移地址01FE–01FF的2个字节值为结束标志0xAA55或0x55AA,称为“魔数”(magic number)。假设该标志错误系统就不能启动。
第三步、Boot Loader
Boot Loader 就是在操作系统内核执行之前执行的一段小程序。通过这段小程序。我们能够初始化硬件设备、建立内存空间的映射图。从而将系统的软硬件环境带到一个合适的状态,以便为终于调用操作系统内核做好一切准备。
Boot Loader有若干种,当中Grub、Lilo是常见的Loader。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst)。并按照此配置信息来启动不同的操作系统。
第四步、载入内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时。屏幕通常会输出“Uncompressing Linux”的提示。
当解压缩内核完毕后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完毕Linux核心环境的建立。至此,Linux内核已经建立起来,基于Linux的程序应该能够正常执行。
第五步、用户层init根据inittab文件来设定执行等级
内核被载入后。第一个执行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并根据此文件来进行初始化工作。
/etc/inittab文件最基本的作用就是设定Linux的执行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux须要执行在等级5上。Linux的执行等级设定例如以下:
- 0:关机
- 1:单用户模式
- 2:无网络支持的多用户模式
- 3:有网络支持的多用户模式
- 4:保留,未使用
- 5:有网络支持有X-Window支持的多用户模式
- 6:又一次引导系统,即重新启动
第六步、init进程执行rc.sysinit
在设定了执行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
第七步、启动内核模块
具体是根据/etc/modules.conf文件或/etc/modules.d文件夹下的文件来装载内核模块。
第八步、执行不同执行级别的脚本程序
根据执行级别的不同,系统会执行rc0.d到rc6.d中的对应的脚本程序。来完毕对应的初始化工作和启动对应的服务。
第九步、执行/etc/rc.d/rc.local
你假设打开了此文件。里面有一句话。读过之后,你就会对此命令的作用一目了然:
This script will be executed after all the other init scripts.
You can put your own initialization stuff in here if you don’t
want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你能够把你想设置和启动的东西放到这里。
第十步、执行/bin/login程序。进入登录状态
此时,系统已经进入等待用户输入username和password状态,用户能够用自己的帐号登入系统
Linux学习笔记:系统启动引导过程的更多相关文章
- Linux 学习笔记 1 使用最小的系统,从分区安装系统开始
我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- Linux 学习笔记之超详细基础linux命令 Part 7
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...
- Linux学习笔记(4)磁盘分区(fdisk)、挂载与文件系统命令
Linux学习笔记(4)磁盘分区(fdisk).挂载与文件系统命令 1.磁盘分区是怎么表示的? 1.1 对于IDE接口,第一主盘为hda,第1从盘为hdb,第1从盘的第1个分区为hdb1 1.2 对于 ...
- Linux学习笔记-林耐斯Notes-Linux就该这么学
Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
- Linux 学习笔记之超详细基础linux命令 Part 13
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 11
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 10---------------- ...
随机推荐
- Python Socket详细介绍
Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号(默认为0)来创建套接字. socket类型 描述 socket. ...
- Python能干啥?
Python之py9 Python之py9-录音自动下载 Python之py9-py9作业检查 Python之py9-py9博客情况获取 Python之py9-微信监控获取mp3_url Python ...
- FZU-2147-2147 A-B Game,规律题。。
Problem 2147 A-B Game Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description Fat brother ...
- html template & import link bug
html template & import link bug html templates is OK https://caniuse.com/#search=html%20template ...
- codeforces #299 div 2
(总算是5题都做完了- -) 暂时做了4题,先放一下有时间做最后一题(当然如果我真的能做出的话...)(看了大神的代码总算是理解了E题,做完发现也没那么难,果然想出一个思路的过程对于我这种弱渣来说还是 ...
- 【搜索】codeforces C. The Tag Game
http://codeforces.com/contest/813/problem/C [题意] 给定一棵有n个结点的树,初始时Alice在根结点1,Bob在非根结点x; Alice和Bob轮流走,每 ...
- 使用Sencha Architect开发Sencha Touch应用的整理
官网:http://www.sencha.com/ 其实官网上的文档都很清楚了,不过整理一下总比较好 第一步,软件准备 注: 以下软件的安装本着这样两条原则 一是不要安装在中文目录下 二是不要安装在带 ...
- Codevs 2693 上学路线(施工)
时间限制: 2 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南 ...
- tiles
参考博客:https://blog.csdn.net/aosica321/article/details/68948915 https://blog.csdn.net/it_faquir/articl ...
- Intent和IntentFilter简介
Intent和IntentFilter简介 Intent和IntentFilter简介 意图Intent分类: 显式意图:利用class找到对方,在同一个应用程序类可以方便使用,但是在不同的应用程序无 ...