所有 Linux 发行版都有哪些共同点?

Dal*_*itz 4 arch-linux chrome-os chrubuntu chrome-book

一点背景:

我最近通过一个奇怪的 hack 在 Chromebook 上安装了 Arch Linux,其中我使用安装脚本安装 Ubuntu,然后用 Arch rootfs 覆盖 Ubuntu rootfs。我不确定这背后的机制是什么(像这样:https : //wiki.archlinux.org/index.php/Acer_C7_Chromebook)。

在 chroot 到所有 Linux 发行版都通用的 rootfs 之前运行的 Linux 部分(这就是为什么初始启动对 Arch 和 Ubuntu 都有效)?或者,更笼统地说,哪些软件在所有 Linux 发行版中是通用的,即定义一个 Linux 发行版?

Nli*_*tis 9

Q#1:或者,更笼统地说,哪些软件在所有 Linux 发行版中是通用的,即定义一个 Linux 发行版?

如果我们谈论的是 GNU/Linux 发行版,我肯定可以猜测发行版之间的用户空间几乎相同。

如果不使用 GNU Coreutils、GNU Binutils、GNU Bash、GNU Compiler Collection 等,我想不出一个可以逃脱的方法。

现在,如果你想要的只是一个 Linux 发行版的定义,那么一句话,那就是 Linux 内核,而用户空间,是你在该内核之上运行的一组软件,以使其对你有用.

大多数 Linux 发行版也使用某种软件管理系统,以简化软件安装和配置,例如(通过二进制包管理如 Debian,或源包管理如 Gentoo),偶尔使用一些特定发行版的软件,例如管理工具(例如我可以想到debconfDebian 或yastOpenSuse)。如果你想要一个更明确的答案,你绝对应该看看Linux From Scratch

Q#2:在 chroot 进入 rootfs 之前运行的 Linux 部分是否对所有 Linux 发行版都通用(这就是为什么初始启动对 Arch 和 Ubuntu 都有效)?

是和否。大多数发行版使用以下步骤的稍微修改版本,但不同部分的技术选择可能不同。例如,不同的引导加载程序(GRUB、Lilo 等)。

摘自维基百科文章,标题为:Linux 启动过程

  1. BIOS 执行特定于硬件平台的启动任务
  2. 一旦硬件被识别并正确启动,BIOS 就会从指定的引导设备加载并执行分区引导代码,其中包含 Linux 引导加载程序的第 1 阶段。第 1 阶段加载第 2 阶段(大部分引导加载程序代码)。一些加载器可能会使用中间阶段(称为阶段 1.5)来实现这一点,因为如果没有进一步的代码,现代大型磁盘可能无法完全读取。
  3. 引导加载程序通常会向用户提供可能的引导选项菜单。然后在调用 start_kernel() 之前加载操作系统,该操作系统解压缩到内存中,并设置系统功能,如基本硬件和内存分页。
  4. start_kernel() 然后执行大部分系统设置(中断、其余的内存管理、设备初始化、驱动程序等),然后分别生成空闲进程和调度程序,以及 Init 进程(在用户空间中执行)。
  5. Init 进程根据需要执行脚本,设置所有非操作系统服务和结构以允许创建用户环境,然后向用户显示登录屏幕。

更多细节

大部分看似复杂(第 1 阶段引导加载程序调用第 2 阶段)与 PC 的发展历史有关,IBM 和其他公司将各种子系统的设计标准化以及它们如何协同工作。

另一个复杂性来自 Linux 的性质,其中各种组件都是模块化的并且可以互换。这种模块化设计是有代价的,你在这里看到的是架构的过度设计。请记住,Linux 可以在多种硬件平台上启动并支持多种文件系统,因此这部分是所有这些选择的结果。

  • @NlightNFotis - NP,现在我们对这个主题有了很好的规范答案 8-)。 (2认同)