如何开始更改linux源代码以制作自定义OS?[关闭]


15

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

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


你的目标是什么?您想如何贡献?
Spidey 2012年

为了使自己的自定义OS改变它的(Linux)的源代码,并学习OS的运作方式和乐趣也
dubex

名为Linux的内核不是Gnu / Linux(Ubuntu,Debian,RedHat,Suse等distrowatch.com)。但是,大多数人混淆使用Linux一词来表示GNU / Linux + X11 +。但是Linux只是内核之一,可以与GNU和其他操作系统一起使用。如果要修改Ubuntu或类似版本,则与修改名为Linux的内核不同。
ctrl-alt-delor

Answers:


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 fu之后,请确保您了解操作系统。这将帮助您理解代码。并非所有Linux都是必不可少的。内核本身很小!肿的是:

  • 成千上万的各种设备的硬件驱动程序。
  • 各种设备类的抽象层,以简化API和驱动程序编写。例如,我们有用于文件系统的VFS,用于输入设备的事件层等。
  • 满足运行Linux的各种体系结构的有条件编译的代码和文件数量惊人(不是每台Linux机器都是Intel PC,而且有些与您期望的有所不同)。内核必须处理这些差异,这意味着需要更多代码。

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

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

当然,最近Minix的硬件支持较少。所以呢?真是个福音!现代计算机的虚拟化效果很好。利用它来发挥您的优势:运行Minix的VM非常轻巧,这会使开发陷入困境。

如果您的项目是构建操作系统,那么比研究Minix还要糟糕。您可能还需要购买和阅读Minix随同著作的书,即“ Andrew Tanenbaum的Modern Operating Systems ”。

您还应该设定目标并精确定义术语。如果您自己的操作系统定义是Microsoft的(具有GUI和完整软件套件的操作系统),那么您可能会从事很长的项目!毕竟,自1960年代以来,成千上万的人为使我们成为现在的我们而努力。

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


1
[link](www.linuxfromscratch.org)完全实现了我的梦想...感谢您表达我的问题
dubex 2012年

LFS非常适合学习POSIX系统的用户空间的工作原理。据我所知,它是特定于Linux的,因此它不会处理异常方向的修改(就像您制作自己的内核一样)。但这不重要,因为一旦内核离开POSIX,用户空间将不兼容,必须移植或重新实现。
Alexios 2012年

抱歉造成误解...但是我并不是说我会做自己的内核(因为我才华不多:))。我想对源代码进行更改,使其看起来与众不同,这似乎是我自己的创造力。例如:当Linux(例如ubuntu)正在启动并安装了某些语音识别软件时,我希望在屏幕上显示某种声音(我制作过)的动画。再次感谢。
dubex 2012年

1
在这种情况下,您将自己发行Linux,而不是其他操作系统。LFS 是实现此目的的正确工具。祝好运!
Alexios 2012年

1
@Alexios,非常好的描述性回答,谢谢。
0xAF 2012年


4

我认为您需要定义的第一件事是“您希望对操作系统带来什么变化”。在您做出决定之前,您将一无所获。没有学习的“一条路”。

此外,我认为您应该更好地定义操作系统的含义。Ubuntu源代码的很大一部分(主要部分)在Linux之外。Linux只是内核,(有时被称为操作系统,在学术界尤其如此,因此引起混淆),因此它具有以下“简单”的作用:

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

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

但是,如果您仍然想学习如何在内核上进行黑客攻击,则可能应该从这个问题开始,这个站点上投票最高的问题;)


抱歉,您在询问问题时没有那么具体...但是实际上我不知道所有这些细节。实际上,我想在linux(例如ubuntu)启动时在屏幕上显示某种类型的动画(带有声音)...请给我有关探索所有这些领域以及如何在任何特定领域进一步发展的想法(例如gui与硬件通信) )...
dubex 2012年

@dubex从plymouth开始,并查看用于播放声音的Linux库。SDL_mixer可能很简单。
sourcejedi

2

这可能有点不重要,但是如果您希望了解Linux内核并开始进行开发,则应该真正研究内核新手。这个站点可以让您深入了解内核机制(就像Alexios所做的那样),而且还可以让您选择一个要处理的小任务(成为所谓的内核管理员)。这是一种学习的好方法,我强烈推荐它!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.