如何开始更改 linux 源代码以制作自定义操作系统?

dub*_*bex 15 linux source opensource-projects configuration

我听说我们可以通过更改其源代码来随心所欲地自定义 Linux(例如 Ubuntu),并且可以制作全新的操作系统。我已经从 www.kernel.org 网站下载了 linux 内核的源代码。但是看到它,我什么也看不懂,文件中的目录和文件太多了(因为我认为只有一个大程序)。我想把它作为一个大学项目来做,我也想通过对 Linux 进行必要的更改来为 Linux 做出贡献。但是在一些网站上问过这个问题后,他们说Linux源代码非常庞大。你可以试试minix。现在我很困惑。

请给我建议,详细说明我应该如何开始这个旅程(更改源代码以自定义 Linux),并提供必要的步骤,以及一些初级书籍。

Ale*_*ios 29

欢迎来到 unix.stackexchange.com!

有没有简单的回答你的问题,并远远更好的人比我有一般写在Linux内核的主题整个书籍和操作系统。

关于项目范围:写一个操作系统不是一件简单的事!即使是像 Minix 这样有目的地最小化的操作系统也是一件非常复杂的事情!为了让您对 Linux 有所了解,请想想您迄今为止编写的 C 程序。平均的大学课程往往最多只有几千行 C。我认为我最后一年的项目大约是 30-35,000 行 C++。Linux 内核大约有 13,000,000 行 C 代码。

为什么它们都在单独的文件中?出于后勤和实际原因,大型项目存储在单独的文件中。只需考虑将 13,000,000 行文件加载到编辑器中即可!在处理像 Linux 这样的大型项目之前,你绝对应该磨练你的 C 技能,直到“为什么多个文件”这个问题自己回答。您还应该能够阅读 C 代码,而不仅仅是编写它。(比起初看起来更难)

你绝对应该非常精通 C。内核由成千上万的人维护,你会被要求理解每个人的个人 C 习语(当然,在相当严格的内核编码标准中,但仍然 - 每个人都有他们自己解决问题的方式)。

掌握 C 语言后,请确保您了解操作系统。这将帮助您理解代码。并非所有的 Linux 都是必不可少的。内核本身非常小!它是什么膨胀:

  • 数以千计的各种设备的硬件驱动程序。
  • 各种设备类的抽象层,以简化 API 和驱动程序编写。例如,我们有用于文件系统的 VFS、用于输入设备的事件层等等。
  • 数量惊人的有条件编译的代码和文件迎合了运行 Linux 的各种架构(并非每台 Linux 机器都是英特尔 PC,有些与您可能期望的完全不同)。内核必须处理这些差异,这意味着更多的代码。

您会立即发现的一个问题是,这些组件并不那么容易拔出、更改和重新插入。有许多相互关系。简而言之,改变内核的位是很棘手的。

人们向您推荐 Minix 的原因很简单:它是一个完整的操作系统,但它没有像 Linux 这样复杂的系统的需求所带来的负担。代码很小,但仍然提供了完整的功能。毕竟,Linux 的第一个版本受到 Minix 的启发。

当然,现在 Minix 的硬件支持较少。所以呢?这是一个福音!现代计算机虚拟化得非常好。充分利用这一点:运行 Minix 的 VM 非常轻巧,它会让开发变得一团糟。

如果你的项目是构建一个操作系统,你可能比从研究 Minix 开始做的更糟。您可能还想购买和阅读 Minix 随附的书“ Andrew Tanenbaum 的现代操作系统”。

您还应该设定您的目标并精确定义您的条款。如果您自己对操作系统的定义是 Microsoft 的(具有 GUI 和完整软件套件的操作系统),那么您可能会参与一个很长的项目!毕竟,自 1960 年代以来,成千上万的人一直在努力将我们带到现在的位置。

最后,记住计算机科学家的战斗口号:'永远不要重新发明轮子!'(当然,我们喜欢在学习时破例。为了好玩:))


mat*_*eek 7

检查Linux From Scratch项目。顾名思义,它包含构建您自己的 Linux 发行版所需的所有细节


rah*_*hmu 4

我认为你需要定义的第一件事是“你希望给操作系统带来哪些改变”。除非你做出这样的决定,否则你将一事无成。学习没有“一条道路”。

此外,我认为你应该更好地定义操作系统的含义。Ubuntu 源代码的很大一部分(主要部分)位于 Linux 之外。Linux 只是内核(有时被称为操作系统,尤其是在学术界,因此会造成混淆),因此它的“简单”工作是:

  • 管理资源。
  • 与硬件通信。

任何其他更改都会发生在不同的级别,无论是核心用户区实用程序(通常称为utils)、GUI、发行版的基本应用程序等。

但是,如果您仍然打算学习如何破解内核,那么您可能应该从这个问题开始,这是该网站上投票最高的问题;)