每种Unix风格都有相同的启动顺序代码吗?我的意思是有不同的内核版本发布不同的版本,所以一旦内核加载,是否有可能出现不同的引导序列代码?或者他们始终保持引导序列(或代码)的共同点?
编辑:我想详细了解启动过程是如何完成的。
MBR在哪里找到GRUB?如何存储此信息?它是默认硬编码的吗?
是否有可用于启动顺序的块级别分区架构?
GRUB如何定位内核映像?它是存储内核映像的公共空间吗?
我在网上搜索了很多;但它显示了共同的架构BIOS
- > MBR
- > GRUB
- > Kernel
- > Init
。
我想知道一切的细节。我应该怎么做才能知道这一切?有什么方法可以调试启动过程吗?
提前致谢!
答案 0 :(得分:2)
首先,启动过程非常依赖于平台和内核。
关键是通常将内核映像加载到内存中并运行它,但细节可能不同:
不同的引导加载程序和操作系统可能会以不同的方式执行此操作。 “UNIX-like”位不相关,操作系统在内核开始运行后开始表面上是UNIXy(POSIX系统调用,init进程,POSIX用户空间......)。
即使在常见的x86 PC上,“传统BIOS”和UEFI模式之间的差异也很大(在最后一种情况下,UEFI本身可以加载并启动内核,而不涉及其他引导程序)。
使用GRUB2在BIOS模式下开始使用x86上的现代Linux发行版,基本思路是快速启动并运行一个可以处理“正常”PC抽象的系统(磁盘分区,文件系统上的文件, ...),至少保持必须处理硬编码磁盘偏移的代码。
现在发生的事情取决于特定启动项的配置;对于启动Linux,通常涉及两个文件:内核映像和initrd:
/
挂载的准系统用户区;它主要包含设备检测助手,设备驱动程序,文件系统驱动程序,......允许内核能够按需加载安装“真正的”根分区所需的代码; 从那里开始,“真正的”Linux启动过程开始,通常涉及加载设备驱动程序,启动init
,安装磁盘等。
同样,这是所有(x86,BIOS,Linux,GRUB2) - 特定的;没有MBR的架构上的点1-2是不同的,如果直接从UEFI加载GRUB,则完全跳过;如果使用UEFI(或一些其他加载器)直接加载内核映像,则1-3不同/避免使用。如果内核映像已经捆绑了启动所需的全部内容(典型的嵌入图像),则可能不涉及initrd
事物;对于不同的操作系统,第4-5点的细节是不同的(尽管基本思想通常是相似的)。并且,在嵌入式计算机上,内核可以直接放置在“魔术”位置,该位置自动映射到内存中并在开始时运行。