我听说我们可以通过更改源代码来定制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
答案4
这可能有点离题,但如果您希望了解 Linux 内核并开始开发它,您应该真正研究一下内核新手。这个网站可以让您深入了解内核机制(就像 Alexios 所做的那样),而且还可以让您选择一个小任务来处理(成为所谓的内核看门人)。这是一个很好的学习方式,我强烈推荐它!