如何开始更改 Linux 源代码来制作定制操作系统?

如何开始更改 Linux 源代码来制作定制操作系统?

我听说我们可以通过更改源代码来定制Linux(比如Ubuntu),并且可以创建全新的操作系统。我从www.kernel.org网站下载了linux内核的源代码。但通过看到它,我无法理解任何东西,有这么多的目录,文件中的文件(因为我认为会有一个大程序)。我想将其作为一个大学项目来完成,并且我还想通过对 Linux 进行必要的更改来为 Linux 做出贡献。但在一些网站上问这个问题后,他们说Linux源代码非常庞大。你可以尝试一下minix。现在我很困惑。

请给我建议,详细说明我应该如何开始这个旅程(更改源代码以定制 Linux)和必要的步骤,以及一些初学者水平的书籍。

答案1

欢迎来到 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 fu 后,请确保您了解操作系统。这将帮助您理解代码。并非所有 Linux 都是必需的。内核本身相当小!这是什么肿胀:

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

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

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

当然,Minix 如今的硬件支持较少。所以呢?这是一个福音!现代计算机的虚拟化效果非常好。利用这一点来发挥你的优势:运行 Minix 的 VM 非常轻,它会让开发变得很麻烦。

如果您的项目是构建一个操作系统,那么您可能比从研究 Minix 开始更糟糕。您可能还想购买并阅读 Minix 配套的书,'安德鲁·塔南鲍姆的现代操作系统'。

您还应该设定目标并定义条款恰恰。如果您自己对操作系统的定义是 Microsoft 的(具有 GUI 和完整软件套件的操作系统),那么您可能会面临一个非常漫长的项目!毕竟,自 20 世纪 60 年代以来,数十万人付出了努力,才使我们取得了现在的成就。

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

答案2

查看Linux 从头开始项目。顾名思义,它包含构建您自己的 Linux 发行版所需的所有详细信息

答案3

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

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

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

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

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

答案4

这可能有点离题,但如果您希望了解 Linux 内核并开始开发它,您应该真正研究一下内核新手。这个网站可以让您深入了解内核机制(就像 Alexios 所做的那样),而且还可以让您选择一个小任务来处理(成为所谓的内核看门人)。这是一个很好的学习方式,我强烈推荐它!

相关内容