kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc
库:函数集合, function, 调用接口(头文件负责描述)
过程调用:procedure,无返回值
函数调用:function
程序:二进制执行文件
支持模块化:.ko(内核对象)
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:辅助的伪根系统
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
POST:Power-On-Self-Test,加电自检,是BIOS功能的一部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测。
ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等
RAM:CMOS互补金属氧化物半导体,保存各项参数的设定
由于不同的操作系统文件系统各不相同,因此需要一个引导装载程序来处理内核文件加载的问题。这个引导程序称之为BootLoader,这个引导程序安装在设备启动的第一个扇区(sector)内,意即MBR(MasterBoot Record,主引导分区)。
BootLoader的主要功能如下:
MBR由三个部分组成,主引导记录BootLoader、硬盘分区表DPT和硬盘有效标志。
在总共512字节的主引导扇区里
第一部分是BootLoader,占446个字节,它负责从活动分区中装载并运行系统引导程序;
第二部分是Partition table区(DPT分区表),占64个字节;
第三部分是Magic number,占2个字节。
windows使用的bootloader程序是ntloader,只能对windows进行引导不能对其他系统进行引导,而Linux的bootloader叫GRUB,可以对其他操作系统进行引导(包括windows),而MBR前446就属于grub一部分。
前面说到,MBR的446字节的东西就是grub的一部分忙也就是说,我们的计算机启动磁盘后会找到grub,我们看看grub文件夹中的内容。
GRUB (GRand Unified Bootloader 简称GRUB)是一个来自GUN项目的多操作系统启动程序,能够启动大多数免费操作系统 Linux、FreeBSD、NetBSD、GNU Mach和其它大多数的商业操作系统。在Linux系统的启动过程中GRUB程序是分为三个阶段在发挥它的作用,分别是1 stage、1.5 stage和2 stage。
名称 | 功能 |
---|---|
config-2.6.32-696.el6.x86_64 | 此版本内核被编译时选择的功能与模块配置文件 |
grub | 引导程序grub相关数据目录 |
initrd-2.6.32-696.el6.x86_64kdump.img | 虚拟文件系统 |
System.map-2.6.32-696.el6.x86_64 | 内核功能放置到内存地址的对应表 |
vmlinuz-2.6.32-696.el6.x86_64 | 内核文件 |
为了硬件开发商与其他内核功能开发者的便利,因此Linux内核是可以通过动态加载内核模块的,内核模块一般放置在/lin/modules目录内。由于模块位置放置到磁盘根目录内,因此在启动过程中内核必须要挂载根目录。考虑到担心影响到磁盘内的文件系统,因此启动过程中根目录是以只读方式挂载的。
内核加载完毕后,主机的硬件、驱动已经准备就绪,内核就会主动调用第一个进程,就是/sbin/init。该程序最主要的功能就是准备软件的执行环境,包括系统的主机名、网络设置、语系处理、文件系统格式及其他服务的启动等。而所有的操作都会通过init的配置文件,即/etc/inittab来规划。
run level:执行等级,通过设置run level来规定系统使用不同的服务来启动,让Linux的使用环境不同,一般在centos6中,将run level分为7个等级。
级别 | 说明 |
---|---|
0 | halt(系统直接关机) |
1 | single user mode(单用户维护模式,用在系统出问题时的维护) |
2 | Multi-user,without NFS(类似runlevel3,启动网络功能,但无NFS服务) |
3 | Full multi-user mode(完整拥有网络功能的纯文本模式) |
4 | unused(系统保留功能) |
5 | 多用户模式,图形界面 |
6 | reboot(重启) |
CentOS6/etc/iunittab配置文件如下图所示:
这个文件的语法是用冒号(:)将设置分隔成为四个字段,每个字段的意义与说明如下:
[id]:[run level]:[action]:[process]
其中action还有以下设置值:
init 设置值 | 说明 |
---|---|
wait | 切换至此级别运行一次 |
respawn | 此process终止,就重新启动之 |
initdefault | 设定默认运行级别;process省略 |
sysinit | 设定系统初始化方式 |
该shell script主要来设置系统环境,主要工作大抵有几项:
加载内核让整个系统准备接受命令来工作,再经过/etc/rc.d/rc.sysinit的系统图模块与相关硬件信息的初始化后,我们还需要启动系统所需要的各项服务,这样才能提供相关的网络或者是主机相关功能。依据在/etc/inittab里面设置的run level值,决定启动哪些服务选项了。
以我的系统举例。我的run level设置是5,因此找到/etc/rc5.d/,进入该目录下:
文件名全部以Sxx或Kxx开头,其中xx为数字:
在完成默认run level指定的各项服务的启动后,如果我们还有其他的操作时,我们可以在/etc/rc.d/rc/local中定义要执行的系统命令。
在完成所有的服务的启动后,之后Linux就会启动终端机或者是X Window来等待用户登录,根据run level中设置的级别,会执行/sbin/mingetty来启动终端机的命令。
上文提及,BootLoader加载Grub程序来引导系统的启动,分为了stage1,stage1.5和stage2三个阶段。
grub的程序主要放置在/boot/grub目录下。
目录中最重要的就是/boot/grub/grub.conf这个配置文件以及各个文件系统的定义。loader读取文件西永的定义数据后,然后就能够认识文件系统并读取文件系统内的内核文件,grub的优点如下:
grub对硬盘的识别使用的是这个代号:(hd0,0),硬盘以hd表示,后面接一组数字,第一个查找到的硬盘为0号,第二个为1号,每块硬盘的第一个分区代号为0,依次类推。
字段 | 说明 |
---|---|
default=# | 默认启动选项。使用第一个启动菜单(title) |
timeout=# | 指定菜单项等待选项选择的时长 |
splashimage=(hd#,#)/PATH/XPM_FILE | 菜单背景图片文件路径 |
hiddenmenu | 隐藏菜单 |
title TITLE | 定义菜单项“标题”, 可出现多次 |
root (hd#,#) | 查找stage2及kernel文件所在设备分区;为grub的根 |
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] | 启动的内核 |
initrd /PATH/TO/INITRAMFS_FILE | 内核匹配的ramfs文件 |
password [–md5] STRING | 启动菜单编辑认证 |
password [–md5|–encrypted ] STRING | 启动选定的内核或操作系统时进行认证 |
title的前四行是grub的整体设置,主要选项有:
default=0
这个与title做对照,在配置文件中如有多个title启动的时候就会有几个菜单可以选择,由于grub起始号码为0,因此default=0代表第一个title选项来启动额意思。如果在读秒结束前,没有按键,则系统默认将按照默认0 号title来启动。
timeout=5
启动进行读秒,如果在5秒内未按任何键,就会使用前面提到的default后面的那个对应的title来启动。这个数值是可以调大,亦可调小。当timeout=0时,代表直接使用default值进行启动而 不读秒,timeout=-1时,代表直接进入菜单不读秒。
splashimage=(hd0,0)/grub/splash.xpm.gz
提供启动界面,菜单界面的背景图
hiddenmenu
这个选项是设置启动时是否启动菜单,目前,默认是不启动菜单的,如果想要启动,则把该行用(#)号注释掉即可。
root
代表内核文件放置在哪个分区,而不是根目录。
kernel
kernel后面接的是内核文件名,文件名后则接的是内核参数。由于启动过程中需要挂载根目录,因此kernel后面接的是root=LABEL=/1指的是Linux的根目录在哪个分区的意思。
initrd
RAM Disk文件名
参考文献:
《鸟哥的Linux私房菜 基础学习篇》 第三版
以上内容,如有错误,欢迎评论指正错误。