1.poweron开机。
2.开机自检:
笔记本开机后首先加载BIOS(BasicInput/OutputSystem基本输入输出系统)。BIOS程序首先检测计算机能够满足运行的基本条件,这个称作“硬件自检PowerOnSelfTest”。也就是BIOSPOST开机自检。
3.BIOS对硬件进行测量:
主要检测:显卡、CPU、内存、磁盘、网卡、声卡、显卡、鼠标、键盘、显示器等。
4.启动次序:
硬件自检完成后,BIOS把控制权转交给下一个阶段的启动次序。BIOS须要有一个外部储存设备的启动排序,排在后面的设备就是优先转交控制权的设备。这些启动次序就是引导次序BootSequence。通常是:硬碟、网卡、光盘、移动硬碟等。
5.加载MBR(主引导记录)
MBR是主引导记录,MasterBootRecord。主引导记录一共512字节。坐落c盘的0柱面0扇区0号磁道(第一个磁道)。MBR512字节分成三部份,446个字节Bootloader主引导记录,64个字节的硬碟分区表DPT(DiskPartitionTable),2个字节磁道结尾标志55aa。它的主要作用是告诉计算机去硬碟的那个位置去找操作系统。
通常GRUB是拿来加载和管理系统启动的完整程序,它是Linux发行版中最常见的引导程序bootloader。引导程序是计算机启动时运行的第一个软件,grub程序安装在bootloader上面。GRUB是GRandUnifiedBootloader小型统一引导程序。
6.启动管理器grub
计算机读取“主引导记录”的后面446字节,不再把控制权交给哪一个分区,而是运行事先安装的启动管理器bootloader,由用户选择启动哪一个操作系统。Linux中最流行的启动管理器是GRUB。在centos7中启动管理器是GRUB2。
grub的作用是在系统中选择性地引导不同的OS,实际上是加载引导不同的内核镜像文件,当内核挂载成功以后,就把控制权交给内核程序。
7.centos7中的启动管理器grub2
MBR主引导记录加载并执行grub2引导加载程序。grub2配置文件坐落/boot/grub2/grub.cfg中linux服务器系统,由grub2mkconfig使用/etc/grub.d中的模板和/etc/default/grub中的设置手动生成。
grub2-mkconfig-o/boot/grub2/grub.cfg
grub2配置文件在/boot/grub2/grub2.cfg中,/etc/grub2.cfg是它的软链接。
在grub2.cfg文件中设置操作系统的启动centos7系统linux磁盘写满启动,例如:
menuentry'xxxLinux'{
setroot='hd0,gpt1'
linuxefi/boot/vmlinux-4.14.105-19-1002root=/dev/sda1
initrdefi/boot/initramfs-4.14.105-19-1002.img
}
假如是centos6的系统,通常是:
titleCentOS(2.6.32-754.35.1.el6.x86_64)
root(hd0,0)
kernel/boot/vmlinuz-2.6.32-754.35.1.el6.x86_64roroot=UUID=94e4e38
4-0ace-437f-bc96-057dd64f42eerd_NO_LUKSrd_NO_LVMLANG=en_US.UTF-8rd_NO_MD
SYSFONT=latarcyrheb-sun16crashkernel=autoKEYBOARDTYPE=pcKEYTABLE=usrd_
NO_DMrhgbquietconsole=tty0console=ttyS0,115200n8net.ifnames=0
initrd/boot/initramfs-2.6.32-754.35.1.el6.x86_64.img
grub引导菜单决定启动那个操作系统。
8.加载内核
加载内核kernel:按照grub设定的内核镜像所在的路径,系统读取内核镜像,但是进行解压操作。系统将解压后的内核放置在显存中,并使用start_kernel()函数来启动一系列的初始化函数而且初始化各类设备,完成Linux核心环境的构建。
Linux的系统内核置于了/boot的启动目录中。
①:config-$(uname-r)文件,是内核的配置文件,是内核编译时选择的功能和模块。
②:efi目录:是可扩充固件插口,是英特尔为全新PC固件的体系结构、接口和服务提出的建议标准。
③:grub目录:启动引导程序grub的数据目录,上面放了一个splash.xpm.gz,是背景图的图片。
④:initramfs-$(uname-r).img是一个虚拟的文件系统,在centos7.x中使用initramfs替换掉了centos6.x中的initrd,而且功能是一样的。
⑤:symvers-$(uname-r).gz是模块的符号信息。
⑥:System.map-$(uname-r)是内核功能和内核地址的对应列表,映射列表。
⑦:vmlinuz-$(uname-r)用于启动Linux的内核linux磁盘写满启动,这个文件是一个压缩的内核镜像文件。
⑧:vmlinux-$(uname-r)是Linux的内核文件。
Vmlinux与linuz是有区别的。VM代表VirtualMemory虚拟内核。vmlinux是一个包括linuxkernel的静态链接的可运行文件,编译内核源码得到的最原始的内核文件,未压缩,比较大,是elf格式的文件。
vmlinux是elf格式的文件,可以通过readelf-h查看程序头表(programheaders),是5个。还可以通过readelf-S查看vmlinux的节头表(sectionheaders)。
vmlinuz是可引导的,经过压缩的Linux内核。vmlinuz是vmlinux经过gzip和objcopy制做出来的压缩文件。vmlinuz是一个总称,它有两种详尽的表现方式:zImage和bzImage。
bzImage是vmlinux经过gzip压缩后的文件,适用于大内核(bzImage是x86linux常用的一种压缩镜像文件)。
zImage是vmlinux经过gzip压缩后的文件,适用于小内核(zImage是ARM32linux常用的一种压缩镜像文件)。
bz表示bigzImage,它的格式与zImage类似,但采用了不同的压缩算法,bzImage的压缩率更高。
执行命令:filevmlinuz-$(uname-r)可以看见文件类型是Linuxkernelx86bootexecutablebzImage。
Linux安装在ide硬碟中,而且采用的是默认的ext3/ext4文件系统的,内核启动后加载根分区和模块的加载都没问题,Linux系统会顺利启动。假如Linux系统安装在scsi硬碟上,或则使用LVM文件系统,内核在加载根目录之前要加载scsi硬碟或则lvm文件系统的驱动。SCSIc盘和LVM文件系统的驱动都置于硬碟的/lib/modules/目录中,内核没有办法辨识scsi硬碟或则lvm文件系统,Linux使用initramfs这个虚拟的文件系统去处理问题。centos7.x中使用initramfs虚拟文件系统,通过引导程序加载到显存中,之后会解压而且在显存中仿真成一个根目录,但是这个仿真的文件系统才能提供一个可执行程序,通过程序去加载启动过程中所须要的模块,例如SATA、SCSIc盘驱动和LVM、RAID文件系统的驱动。
通过initramfs虚拟文件系统在显存中模拟出一个根目录,之后在这个模拟根目录中加载SCSI等硬件的驱动,就可以加载真正的根目录了,然后才会调用Linux的第一个进程/sbin/init或则是systemd进程,centos7中是systemd。
当所须要的驱动程序加载完成以后,会依照/boot/grub2/grub2.cfg配置文件中的root=(hd0,gpt1)的部份所指定的内容创建一个根设备,之后将根文件系统以只读的形式挂载,并切换到真正的根文件系统上,同时调用系统进程的/sbin/init程序或则是/usr/lib/systemd/systemd程序,步入系统初始化的阶段。
在初始化的最后,内核运行initramfs中的init程序linux中文乱码,该程序将侦测硬件设备、加载驱动,挂载真正的文件系统,执行文件系统上的/sbin/init或则systemd,从而切换到真正的用户空间。真正的文件系统挂载后,initramfs即完成了使命,其占用的显存也会被释放。
initramfs是可以解压的,使用skipcpio命令:
/usr/lib/dracut/skipcpioinitramfs-$(uname-r).img|zcat|cpio-ivd
解压以后可以看见init进程做了软链接,软链接到了/usr/lib/systemd/systemd。
牡丹
鼓励的话语:顺境不飘,逆境不忧,险境不慌。胸襟大志,当忍则忍。