GNU/Linux系統(tǒng)是如何啟動的?

GNU/Linux操作系統(tǒng)啟動流程
第一步 固件引導(dǎo)
固件:BIOS(Legacy)或UEFI,為刷寫在電腦EEPROM里的小系統(tǒng),負責(zé)硬件識別、自檢(POST)和初始化
初始化完成后會把控制權(quán)交給中間引導(dǎo)程序進入中間引導(dǎo)階段
第二步 中間引導(dǎo)
加載內(nèi)核鏡像vmlinuxz以及initramfs到內(nèi)存,為內(nèi)核啟動做準備
中間引導(dǎo)程序?qū)?#34;指揮權(quán)"交給Linux內(nèi)核進入內(nèi)核啟動階段
以GRUB2+UEFI為例:
1.準備EFI分區(qū),將GRUB2有關(guān)的文件安裝在分區(qū)中
2.在grub.cfg中配置vmlinuxz和initramfs引導(dǎo)系統(tǒng)加載內(nèi)核
*良好的UEFI實現(xiàn)(EFISTUB)可替代GRUB2直接引導(dǎo)Linux內(nèi)核
第三步 內(nèi)核啟動
若系統(tǒng)有initramfs,內(nèi)核調(diào)用initramfs中的init程序進入下一階段init
若系統(tǒng)無initramfs,內(nèi)核直接掛載根文件系統(tǒng)并執(zhí)行init程序進入下一階段init
*vmlinuz:為壓縮過的系統(tǒng)內(nèi)核文件
*initramfs:臨時根文件系統(tǒng)(rootfs),為CPIO格式檔案,內(nèi)核自帶CPIO有關(guān)的解壓代碼
*initramfs功能和存在的意義:用于輔助掛載rootfs,因磁盤驅(qū)動在磁盤中而直接掛載磁盤需要磁盤驅(qū)動,所以這里引入一個臨時rootfs用于掛載磁盤所需的驅(qū)動/引導(dǎo)加密磁盤/網(wǎng)絡(luò)引導(dǎo)/其他需要額外模塊的引導(dǎo)流程
第四步 init
為Linux系統(tǒng)中第一個由內(nèi)核啟動的用戶級進程,缺少該進程系統(tǒng)會無法啟動
早期版本Linux的init程序是sysvinit,現(xiàn)在主流的init程序是systemd
systemd啟動后會根據(jù)配置文件啟動journald networkd resolved timesyncd等一系列的系統(tǒng)級服務(wù)和其他用戶級服務(wù)
