本文主要记录下linux的引导流程(实例采用centOS 5.5)。
内容主要如下:引导流程、解析下GRUB的作用。
一、引导流程
1.1主要的流程图如下:
1.2每一步的作用
1)第一步firmware固件自检,主要是进行CMOS/BIOS对硬件进行POST加电自检,在物理层次上对硬件进行检测是否正常。
2)读取硬盘中MBR的BootLoader(自启动程序,Linux下常用的自启动程序是GRUB)。这一步主要的功能是载入内核。
3)载入的内核Kernel主要功能是:1、驱动硬件(Kernel中含有大量驱动程序),2、启动init进程。
4)init进程,主要是读取/etc/inittab文件,执行缺省运行级别,从而继续引导。(需要注意的是它的PID恒为1,0为内核调度器Kernel scheduler)。
5)/etc/inittab 定义了初始化的操作。
内容如下:
命令主要格式是:id : runlevels : action : process
[解析]
id :标识符,一般为两位字或数字
run-levels :指定运行级别,可以指定多个
action :指定运行状态
process :指定要运行的脚本或命令
其中,
1、run-levels运行级别有7个,0—6分别如下:
0 —— halt 关机
1 —— Single user mode 单用户模式
2 —— Multiuser,withoutNFS 多用户模式但不带网络(text模式)
3 —— Full multiuser mode 完整功能的多用户模式(text模式)
4 —— unused 预留
5 —— X11 图形化多用户模式
6 —— reboot 重启
主要命令:查看当前运行级别 #runlevel、 切换运行级别 #init[0 |1 |2 |3 |4 |5 |6]
2、而acion中也有几个比较重要的取值:
① initdefault:指定系统缺省启动的运行级别(通常用于修复,比如我们要进入单用户模式,则可以将其设置为1)
( 由截图中可以知道缺省的run-level是:3)
② sysinit:系统启动执行process中指定的命令(每次都会执行)
(由截图知,无论是哪个运行级别,都会执行/etc/rc.d/rc.sysinit)
③ wait:执行process中指定的命令,并等其结束后再运行其他命令
④ once:执行process中指定的命令,不等待其结束
⑤ ctrlaltdel:按下Ctrl + Alt + Del时执行process指定的命令
6)initdefault
如第五步所说到的,主要是读取/etc/inittab中的信息,判断缺省的运行级别是什么。
7)/etc/rc.d/rc.sysinit
启动这个脚本。完成系统服务程序的启动,如系统环境变量的设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。(由于是基础服务,如截图所示,默认是将其run-level设置为空::即任何级别,action设置为sysinit。即该脚本在任何运行级别下都要启动,以完成基础服务的启动)【可以自定义自己希望启动的脚本,然后加到这个脚本的最后面,便会在启动时被加载】
8)基础服务启动后,会执行/etc/rc.d/rc这个脚本
加载完基础服务后,就要根据不同的运行级别去启动相对应的下的目录,(如3是命令行模式,5是图形模式,他们需要启动的服务不同),但系统如何去加载呢?这就是rc这个脚本的作用了,它的工作原理是先去判断系统的默认运行级别即第6步中的东西,然后再执行相应的rcN.d目录下的服务启动脚本 如图
9)执行/etc/rc.d/rcN.d目录下的服务启动脚本
看下该目录下有什么东西:
[解析]
S —— start表示要启动的脚本
K —— kill 表示要关闭的脚本
数字表示启动顺序,数值小的优先
1.3自定义服务启动或关闭
1)关键目录 /etc/rc.d/init.d/ 下,找到相关的服务再对其进行关闭或启动(所以运行级别的脚本都是来自这个目录的软链接)。
通过服务脚本名 start |stop等操作去启动或关闭服务
2)自定义服务并启动
实际上,无论是哪个运行级别,他们要启动的脚本都位于/etc/rc.d/init.d这个目录中,而启动的时候相对应的/etc/rc.d/rcN.d目录中的脚本只是一个软链接,指向的还是init.d这个目录中的脚本
如图:rc3.d目录中的内容,可以看到都是软链接(概念类似引用)
了解了上面的原理后,我们就可以定义我们自己的服务脚本,并让系统在引导的时候加载我们的脚本。
方式有以下几种:
1、增加软链接 #ln -s
例子:
先写好一个脚本,再用 ln –s 脚本名 /etc/rc.d/rcN.d/Sxx脚本名
这样系统就会在引导运行级别N时就会加载这个脚本
如:ln –s /etc/rc.d/init.d/xx.script /etc/rc.d/rc3.d/S100xx.script
这样系统就会在运行级别3时加载我们的xx.script这个服务。(注意脚本放在init.d目录中,并且软链接的名字要用S开头)
2、使用 chkconfig
3、使用 ntsysv (图形界面选择)
用ntsysv –-level N进入对于相应运行级别服务的启动设置
通过空格选择启动或否(*表示启动),上下方向键选择
1.4小结
大概的引导流程就是以上的几步了。
最后说下如何查看引导日志,主要有两种方式
1、# dmesg
记录了内核kernel驱动硬件的信息
如查询下硬盘eth0的信息:
2、查看 /var/log/messages的日志信息
记录了服务的启动信息
如查看ntpd的启动情况
二、GRUB解析及应用
了解了基本的引导流程,我们再来着重看下流程中最重要的自启动程序BootLoader,Linux常用的是GRUB。
2.1GRUB的配置与运用
GRUB的配置文件默认位置 /boot/grub/grub.conf (即GRUB它的实际位置在/boot下)
他有个软链接是 在/etc/grub.conf
先看下grub.conf
[解析]
default 定义缺省启动系统(多系统的时候会用到)
timeout 定义缺省等待时间
splashimage 定义GRUB界面图片
hiddenmenu 隐藏菜单
title 定义菜单项名称
root 设置GRUB的根设备
kernerl 定义内核文件所在位置 ro —只读
initrd 定义加载镜像文件
其中root中 (hd0,0) hd为硬盘类型 0为第一块硬盘 ,0为第一个分区
这个实际上是指定了 /boot所在的硬盘分区
可以看下/boot目录
2.2列子
2.2.1进入单用户模式
适合场合:忘记root密码、修复系统
方法:
1、在启动倒数的时候按ESC进入GRUB操作界面
e ——编辑当前的启动菜单项
b ——启动当前的菜单项
d ——删除当前行
c ——进入GRUB的命令行模式
Esc ——返回GRUB启动菜单界面,取消对当前所做的修改
2、按e进入,再选kernerl按e去编辑kernerl项
3、在最后加" 1"(空格 1),即运行级别1的单用户模式
4、按回车确定,再按B重启,便可以进入当用户模式
在单用户模式下,可以对root密码进行重置(命令 #passwd root)
同时可以做其他需要修复的操作。
三、总结
主要是掌握好系统的引导流程,明白在启动的时候系统的每一步在干什么,这样当系统出现问题了,我们就可以判断出是在哪一步出现了问题。这样才能在寻找解决方案的时候有的放矢,缩小范围。
相关推荐
兄弟连linux教程的配套课件,可以了解linux的基本操作应用知识
主要由42节组成,主要内容有Linux应用与发展、Linux应用与发展总结、Linux系统安装总结、Linux常用命令、文本编辑器vin第13节文本编辑器vim总结第14节Linux引导流程解析(一) 第15节Linux引导流程解析(二) 第16节...
剖析Linux系统引导流程,不错的linux入门资料
第14节Linux引导流程解析(一).mp4 第15节Linux引导流程解析(二)mp4 第16节Linux引导流程解析(三).mp4 第17节Linux引导流程解析总结.mp4 第18节Linux软件包管理(上).mp4 第19节Linux软件包管理(下).mp4 第20节Linux...
第5 讲Linux 引导流程解析 第6 讲Linux 软件包管理 第7 讲Linux 用户管理 第8 讲Linux 进程管理 第9 讲Linux 文件系统管理 第10 讲Shell 编程 第11 讲Linux 网络设 第12 讲文件共享服务 第13 讲LAMP 环境搭建 第14 ...
Linux具有如下优点: ...Linux引导流程解析; Linux用户及用户组管理; Linux服务与进程管理; Linux文件系统管理; shell命令; Apache服务器配置;; iptables防火墙; gvim编辑器使用; dns域名服务器等等。
课件05_第5讲.Linux引导流程解析.pdf [LAMP兄弟连李明老师讲Linux].课件06_第6讲.Linux软件包管理课件.pdf [LAMP兄弟连李明老师讲Linux].课件07_第7讲.Linux用户管理.pdf [LAMP兄弟连李明老师讲Linux].课件08_第8讲....
课件05_第5讲.Linux引导流程解析.pdf [LAMP兄弟连李明老师讲Linux].课件06_第6讲.Linux软件包管理课件.pdf [LAMP兄弟连李明老师讲Linux].课件07_第7讲.Linux用户管理.pdf [LAMP兄弟连李明老师讲Linux].课件08_第8...
LINUX系统开发技术详解-基于ARM(PDF) 本书以嵌入式Linux系统开发流程为主线,剖析了嵌入式Linux系统构建的各个环节。本书从嵌入式系统基础知识和Linux编程技术讲起,接下来说明了嵌入式Linux交叉开发环境的建立,...
第5讲 Linux引导流程解析 第6讲 Linux软件包管理 第7讲 Linux用户管理 第8讲 Linux进程管理 第9讲 Linux文件系统管理 第10讲 Shell编程 第11讲 Linux网络设置 第12讲 Linux文件共享服务 第13讲 LAMP环境编译 网盘...
第1讲.Linux应用与发展.pdf ...第5讲.Linux引导流程解析.pdf 第6讲.Linux软件包管理课件.pdf 第7讲.Linux用户管理.pdf 第8讲.Linux进程管理.pdf 第9讲.Linux文件系统管理.pdf 第10讲.Shell编程.pdf
本书一共分四篇,每篇对应一...通过上面四篇的学习,大家基本掌握了嵌入式 Linux 驱动的开发流程,本书旨在引导大家 入门 Linux 驱动开发,更加深入的研究就需要大家自行查阅其他更加专业的书籍了,祝愿大家 学习顺利
63 3.2.2 Vi的基本流程 63 3.2.3 Vi的各模式功能键 65 3.3 初探Emacs 66 3.3.1 Emacs的基本操作 67 3.3.2 Emacs的编译概述 70 3.4 Gcc编译器 71 3.4.1 Gcc编译流程解析 71 3.4.2 Gcc编译选项分析 74...
本书从嵌入式系统基础知识和Linux编程技术讲起,接下来说明了嵌入式Linux交叉开发环境的建立,然后分析了嵌入式Linux系统的引导程序、内核和文件系统三大组成部分,最后介绍了嵌入式Linux系统集成和部署的方法。...
本书以嵌入式Linux 系统开发流程为主线,剖析了嵌入式Linux 系统构建的各个环节。 从嵌入式系统基础知识和Linux 编程技术讲起,接下来说明了建立嵌入式Linux 交叉开发环 境,然后分析了嵌入式Linux 系统的引导程序、...
本书从嵌入式系统基础知识和Linux编程技术讲起,接下来说明了嵌入式Linux交叉开发环境的建立,然后分析了嵌入式Linux系统的引导程序、内核和文件系统三大组成部分,最后介绍了嵌入式Linux系统集成和部署的方法。...
3.4.2 GCC编译选项解析............................................................................................. 56 3.5 调试器GDB的使用技巧..............................................................
2.2.2 三星S3C2410X处理器详解 2.3 FS2410开发平台 第3章 创建嵌入式系统开发环境 3.1 嵌入式Linux的开发环境 3.2 Cygwin 3.3 虚拟机 3.4 交叉编译的预备知识 3.4.1 Make命令和Makefile文件 3.4.2 binutils...
3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6...