我只是好奇是否可以单独安装 Linux 内核,或者您是否需要使用其中一种版本。如果可以的话,你会怎么做?我不需要详细的教程。我只是想知道它在概念上是如何完成的。我不擅长底层的东西,想知道如何将操作系统安装到计算机中。我想这与MBR有关。
哦,我注意到很多答案都暗示了一些最小 Linux 的特定发行版。我可能应该声明我不打算安装最小的或简单的 Linux。这个问题纯粹是理论上的。尽管如此,我真的很感谢所有的答案,如果我想安装一个真正个性化的 Linux,我会立即参考它们。
答案1
从技术上讲,您可以单独安装引导加载程序和内核,但是一旦内核启动,它就会抱怨无法启动“init”,然后它就会坐在那里,您无法对其执行任何操作。
顺便说一句,它是 MBR 中引导加载程序的一部分。内核位于磁盘常规区域的某个位置。引导加载程序被配置为知道它在哪里,因此它可以加载内核并执行它。
答案2
我不认为你完全明白你在问什么,但你可能想看看Linux 从头开始项目。
答案3
如果您问是否可以只在现有系统上“安装或升级”内核而不安装一堆其他程序?
Linux 内核是一个二进制文件,通常vmlinuz-x.x.x-x-name
在boot
目录(通常是硬盘驱动器开头的一个单独的小分区)中命名,其中 x 是版本号。 “name”只是为内核选择的名称,可以在编译时设置,您可以使用它来识别内核适用的机器或体系结构类型或任何其他原因。
它在引导时由引导加载程序加载,通常GRUB
由 MBR 中的引导代码调用,而 MBR 则由 BIOS ROM 调用。一旦加载,它就不会被“保持打开”或受到特殊保护。因此您可以用另一个工作内核替换该文件。但是,GRUB
它有一个很酷的功能,可以让您选择多个内核来启动。因此,将额外的内核添加到该列表中是非常明智的做法,但保留原始的已知工作内核,以防万一出现问题。
我相信几乎所有发行版都会制作一个“模块化”内核,其中设备驱动程序位于单独的文件中。因此,大多数内核需要一个包含启动时可用驱动程序的文件系统,这就是“initrd”(初始 RAM 磁盘)或“initramfs”的用途。 GRUB
将在内存中的某个位置加载内核,并将 initrd 加载到另一个位置,然后跳转到内核,告诉它 initrd 的位置,从而启动 Linux。
驱动程序也可以“内置”到内核中,因此在引导加载程序加载映像时会自动加载并可用vmlinuz
。适用于不同系统(例如大多数发行版)的内核通常会最小化内核中内置的内容,因为稍后将在引导过程中扫描可用的硬件,并且仅加载代表当前硬件的模块。
有一些工具可以修改和创建 initrd。 Debian 有很好的工具,我想其他发行版也有。
因此,如果您从 kernel.org 下载更新的内核并编译它以创建新的内核二进制映像,则需要使用与该内核配合使用的驱动程序来制作或更新 initrd。旧的 initrd 将无法工作,因为驱动程序必须与正在运行的内核版本相匹配。
initrd 文件的命名initrd.img-x.x.x.x-name
与内核类似,并且可以在启动后像内核一样进行替换,最佳实践表明,在您知道可以成功启动到新内核+initrd 之前,不要删除已知的工作 initrd。
我希望这能提供一些背景信息。
如果您正在寻找几乎没有安装任何附加程序的“准系统”Linux 安装,我最喜欢的选择一直是安装 Debiannetinst
映像。几乎您只有运行命令行文本控制台和nano
作为文本编辑器所需的最基本的工具。
答案4
无需常用的用户空间工具即可安装 Linux 内核。这通常在路由器等嵌入式系统中完成。通常,内核是从 ROM 或闪存加载的,并且已针对相关设备进行了定制(通常将所需的驱动程序编译到内核中,而不是作为模块加载)。
至少需要存在一个用户空间程序,以成为“init”进程(不一定被调用init
,而是由内核作为进程 1 启动,并且是任何孤立进程的自动父进程) - 除非内核已被修改(而不是而不是简单的定制)而不需要这个。
当然,没有必要有一个可用的 shell 来拥有一个可运行的基于 Linux 的设备,尽管它可以使开发变得更加容易!