如何定义我的计算机上的引导加载程序是主要的,什么是次要的?也许有一些命令?系统有ROM和BIOS。我知道我可以转到文件夹 /boot/ 来查看我的系统正在使用哪种加载程序,但是如果没有辅助引导加载程序我该怎么办?我的问题的目标是如何定义我的计算机上的引导加载程序(主要或次要)?
答案1
在计算机上引导完整操作系统的机制非常复杂,在(因起源而瘫痪的)PC 上更是如此。下面是一个粗糙的经典 PC 的大纲,即在所有 UEFI 废话之前)。
通电时,BIOS 启动并执行一些“自检”,探测某些硬件,然后继续将引导驱动器中的扇区加载到内存的固定部分。这是主引导记录 (MBR)。
引导扇区又使用 BIOS 调用将更重要的引导加载程序加载到内存中,大部分来自磁盘上的固定位置(没有真正的文件系统可用,可用空间很少)。
这反过来会直接加载内核(例如 lilo,使用一组预设的磁盘地址)或更重要的加载程序,它可以理解文件系统(如 grub2)。这些可能会提供某种形式的菜单来选择下一步要开始的内容。
加载的内核启动。它解压缩自身和其他有效负载 (initrd),并初始化它自己的系统视图(抄袭 BIOS 或过程中早期阶段留下的一些数据)。
内核调用init
,进而启动用户空间进程以使系统启动并运行。在此过程中,它从 RAM 中的根切换到真正的文件系统。
其他机器会有很大的不同,即使对于同一台机器,您也可以使用完全不同的引导链。即,对于 PC 上的 Linux,使用 lilo、isolinux、grub...过去,甚至可以将内核复制到软盘的开头并直接启动(自行完成整个 MBR 舞蹈),但这只是一部分几乎被遗忘的过去。