我想我需要一个内核映像和一个引导加载程序(grub),但是引导 Linux 系统还需要什么吗?
答案1
在最简单的情况下,只有引导加载程序、内核和文件系统。
引导加载程序有时是固件的一部分(最近的 Linux 内核可能由 x86 上的 EFI 直接加载)。您还必须告诉内核要挂载什么文件系统/
,例如使用root=
参数(对于Linux)。随后它将尝试加载 init 作为将控制权移交给用户空间的最后一步。对于 Linux,您可能需要检查kernel_init_()
在init/main.c
用于尝试的二进制文件的顺序。
答案2
是的,您需要系统知道要安装什么以及安装在哪里。加载程序将查找图像和系统二进制文件。 Linux From Scratch 是一本很好的文档,请看一下这里。
答案3
您需要一个内核映像,并以某种方式使其可供系统使用,无论它是永久存储还是通过网络共享,或者通过某些串行连接等进行传输,以及一些代码,无论是机器的固件还是某些引导加载程序(必须也可用),将该内核加载到系统内存中。
加载和初始化之后,内核通常会创建第一个进程init
,在其中加载命令,该命令可以通过某些 initramfs 或 ramdisk 提供,其映像也需要加载到内存中(并由内核为 initramfs 提取),或来自某些网络或永久存储文件系统。
一般来说,initramfs(如果有的话)仅在早期启动时临时使用,以设置并过渡到真实系统,但不是必须如此,它可以是全部。
内核也可以被修改为不运行init
和实现系统在内核代码中要执行的任何操作。
例如,一个简单的防火墙/路由器不必运行任何用户空间进程,因为所有路由和数据包过滤都是在内核中完成的,尽管在实践中,您仍然需要一些用户空间工具和文件系统来管理它,进行日志记录等。