提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、系统安装、启动、运行
- 1 BIOS介绍
- 2 bootloader程序
- 3 系统安装
- 4 系统启动
前言
“道听途说”:由于linux系统以及它衍生出的操作系统非常好用且受欢迎,用它的都说好,开源不花钱,白嫖祖师爷。所以进入linux这个“快乐星球”研究研究🤣,并且从机器上电开始理解分析它的流程。
提示:前方道路崎岖,上车需谨慎!
一、系统安装、启动、运行
1 BIOS介绍
参考链接
https://baike.baidu.com/item/bios/91424?fr=aladdin 计算机硬件出厂时会在主板的CMOS芯片内烧录BIOS(basic input output system)或者UEFI(unified extensible firmware interface) BIOS。BIOS相当于文本界面,朴实无华; UEFI BIOS类似简单的图形界面,比较酷炫,还能使用鼠标;姑且统一叫做BIOS。计算机开机会加载ROM芯片内的BIOS进内存,然后读取CMOS芯片的BIOS设定,进行硬件开机自检。
BIOS可以选择不同的形式如硬盘、USB、光盘等介质作为启动项,一般在系统安装时会选择USB或光盘介质作为启动项。
2 bootloader程序
系统安装时,BIOS会通过INT13(13号中断程序)进入MBR,会将文件系统的bootloader程序(开机管理程序,有uboot、grub2等,常用grub2,主要用于选择vmlinuz内核和initrd虚拟根文件系统)加载到硬盘的MBR区域(计算机开机必须要在硬盘读取的第一个扇区叫MBR),然后启动grub2搜索vmlinuz和initrd.img。当使用iso安装系统时,先挂载iso,然后iso下的目录就成为了类似根目录如下图2.1。
图2.1
3 系统安装
将grub2加载到MBR后,控制权交给grub2。grub2会根据grub.cfg文件的配置来执行,主要从相应目录搜索vmlinuz内核和initrd.img虚拟根文件系统,此时,会将iso目录作为根目录,因此vmlinuz内核和initrd.img虚拟根文件系统的路径在iso中的/images/pxeboot/下被搜索到。如下图3.1.
图3.1
grub2将vmlinuz内核加载进内存,将控制权交给内核,内核进行如CPU、硬盘、内存、总线等硬件检测,然后加载initrd.img虚拟根文件系统到内存,使得具备基础的硬件驱动如硬盘、内存、USB等外设驱动,initrd.img可通过如下命令解开查看,目录结构如下图3.2:
#mkdir images/pxeboot/tmp
#xz images/pxeboot/initrd.img | cpio -ivd -D images/pxeboot/tmp
图3.2 initrd.img虚拟根文件系统加载进内存后,initrd.img虚拟根文件系统中的systemd接管控制权,会挂载真正的根文件系统rootfs.img到initrd.mig中的sysroot中,通过chroot命令(一个切换根的命令)切换到真正的根文件系统,然后卸载initrd.img虚拟根文件系统,真正的根文件系统rootfs.img中也有systemd,最终由它来接管系统,并执行一些systemd服务如设备节点挂载,网络等服务,最后启动ananconda安装器,由ananconda来接管系统的安装过程选择,如下图3.3。
图3.3
接下来,就是选择语言、时区、安装环境等选择和配置,然后就等待安装完成后重启,系统即安装完成。
4 系统启动
系统安装完后,机器重新上电,也是需要经过BIOS,然后到grub2这个bootloader程序。实际上,较新版本的内核有EFI stub这个配置项,如果使能该配置项,甚至可以直接通过它来启动而不需要经过bootloader程序,一般情况还是用grub2。
系统启动所用的vmlinuz-version内核和initramfs-version虚拟根文件系统在/boot分区下,vmlinuz-version内核来源于内核RPM包的安装;initramfs-version虚拟根文件系统来源于系统安装时依据内核版本(一种快速构建root根文件系统的框架机制)而构建对应版本的initramfs,用于快速启动系统。
实际上,在系统中还可以通过modprobe命令加载一些内核模块,然后通过dracut命令构建自定义initramfs-custom虚拟文件系统,从而使得initramfs-custom虚拟文件系统中含有该内核模块。
系统启动通过grub2搜索vmlinuz内核(指向vmlinuz-version的软链接)和initramfs-version虚拟文件系统的规则如下图4.1
图4.1
search --no-floppy --fs-uuid --set-root
将/boot分区以uuid形式搜索,设置为root.
linux
boot设置为root根目录,所以内核路径就成为了/vmlinuz-version
initrd
boot设置为root根目录,所以虚拟文件系统路径也成为了/initramfs-version
注:若将search的uuid设置为/根目录的uuid(可由blkid命令查看),那么linux和initrd搜索的路径则为/boot/vmlinuz-version和/boot/initramfs-version;也可通过set(root,x)的形式来设置搜索时的root,x表示分区号。
设定vmlinuz内核和initramfs虚拟根文件系统后,首先加载vmlinuz内核,其次挂载initramfs虚拟根文件系统,然后切换根目录并通过dracut将initramfs虚拟根文件系统的其他配置复制到initramfs虚拟根文件系统中的sysroot中,然后切换根目录为sysroot,最后卸载initramfs虚拟根文件系统,以sysroot作为真正的根文件系统运行。