如何编辑Linux源代码?

时间:2010-01-01 09:37:39

标签: linux

我想修改Linux的源代码。我不知道从哪里开始。

我想学习代码然后修改它并通过runnng来查看更改。我从哪里开始? 我是大学毕业考试,我知道C和C ++,但从未编辑过Linux的源代码。 我想要一个小型的轻量级Linux,它有很小的源代码文件,这样我就可以学习它了。创建我自己的。 哪种Linux最适合我,如何开始编辑soucre代码? 安装Linux只会给我它的源代码吗?

10 个答案:

答案 0 :(得分:18)

术语“Linux”可能意味着几件不同的事情。

Linux内核

这是真正的Linux,可从http://kernel.org/获得。

你不会找到这个小巧或轻量级的版本。内核是内核。 (也就是说,您可以在编译期间关闭功能,如果您的目标是低功耗硬件,例如嵌入式设备,这很有用。)

Linux发行版

这是一个Linux内核,捆绑了一大堆其他软件,使其变得有用。各种软件的源代码可单独提供。

Debian的netinstall通过小型下载为您提供系统核心。它有一个包管理系统,可以为它提供各种程序的easy to get the source code

答案 1 :(得分:15)

您想从Linux发行版中编辑什么?

Linux本身只是一个内核,但该术语也用于指代使用内核的操作系统。如果您想修改GUI程序,可以安装Linux发行版,然后单独下载这些程序的源代码。如果您想修改内核本身,可以从kernel.org获取源代码。每个Linux发行版都有自己的一套程序和功能,你可以根据自己的喜好进行更改,但是我怀疑你想要编辑标准发行版中的一切,如Ubuntu,重新编译一切每次看到变化都需要一段时间。

Linux 很多潜入OS领域的第一个计时器。有一个非常小的类Unix操作系统,叫做MINIX。我认为源代码下载大约为2.2M,它被用作全球许多操作系统开发课程的教学辅助工具。就个人而言,在使用Linux之前,我会稍微沉浸其中,但选择权归你所有,所以玩得开心吧!构建它,打破它,并尝试再次重建它!这是一次很棒的学习经历。

答案 2 :(得分:6)

Install Ubuntu

Learn how to download, compile and install your own kernel

阅读并编辑代码

重新编译并安装已编辑的内核

答案 3 :(得分:6)

如果您想修改Linux内核或通常构成发行版的“核心”应用程序之一,如果您没有太多使用Linux或修改它的经验,我建议您查看Linux From Scratch。它将指导您完全从其核心组件安装Linux系统的过程,并让您真正了解a)Linux的实际部分和b)每个部分的功能。

完成后,您应该知道源的位置,如何编译它们以及如何部署更改。接下来的步骤就是启动您喜欢的编辑器并进行修改。

答案 4 :(得分:5)

这是关于编译Linux内核的a nice tutorial

建议:使用像VirtualBox这样的虚拟机来运行修改后的内核 - 这样您就可以轻松地进行实验,而不会损害任何真正的硬件。

答案 5 :(得分:2)

如果您只是想了解一般的操作系统,Minix可能是一个很好的起点:http://www.minix3.org。 Minix使用相当小的(<5000)线微内核,因此很容易熟悉其基本操作。虚拟运行(例如在vmware下)是最简单的入门方式。

答案 6 :(得分:1)

Linux内核是源树的怪物(至少在不小的意义上)。旧内核较小,所以如果你在一个小的Linux内核之后查看和使用它,那么查看这些内核可能是有意义的。

但是,如果您正在寻找的是一些类似unix的内核,Minix 3可能是另一种可能的选择。

具体来说,安装任何Linux发行版,然后安装内核源代码包(Gentoo默认可能会安装它;内核源代码包的特定名称取决于你的发行版。)

答案 7 :(得分:1)

你可能会考虑BSD发行版,从源代码

编译它们要容易得多

我知道你说的是Linux而是发行版like NetBSD are also a flavor of Unix,而且它们从编译器 - 从源代码的角度来看更加平易近人。

  • 通常是一个小得多的默认或最小安装
  • 基本系统构建为带有make的单个系统。 Linux是来自许多不同地方的实用程序和包的集合,它们是单独构建的,而BSD发行版有一个特定的源代码树,可以使用单个命令从/ usr / src的顶部构建。
  • 如果您需要这样做,则更容易进行交叉编译。

使用BSD分布,单个源树包含基本系统,并在内部和外部元素之间绘制清晰的分界线。这些项目以可编译的形式分发整个系统。

答案 8 :(得分:0)

安装Linux发行版当然是一个合理的先决条件 - Linux是自托管的,因为它(可能)只能在GNU / Linux系统下编译(使用gcc和gnu C库 - 尽管C库是仅在编译期间在工具中使用 - 它没有链接到内核中。编译Linux还需要许多其他工具,这些工具都有记录。

获取源代码非常简单,但困难的是为您的机器正确配置内核 - 因此您可能希望使用您的发行版的内核源代码(可能有补丁但它们对您的目的而言无关紧要)。

“尝试”内核编程的最简单方法是编写内核模块 - 这些可以动态加载(这意味着您可以在不重启的情况下测试代码 - 只要它不会使系统崩溃)

内核模块有大量示例,但由于内核本身内部API的快速变化(甚至构建系统变化相对较快),几乎所有内核模块都已过时。

内核模块几乎可以执行任何不涉及直接更改内核核心部分的内容 - 有很多“钩子”函数(主要是register_something来注册设备,钩子,协议等)可以使用扩展内核的用户空间API或以某种方式修改其行为。

答案 9 :(得分:-2)

直接尝试编辑源代码可能很难。这取决于你对C和操作系统知识的熟练程度。我会说你应该首先看看如何在C中实现cat,grep等功能。然后来自模块的概念。不同类型的内核模块和基本的linux操作与模块。然后选择一个特定的功能,如网络或其他。通过该部分的代码。 示例:http://www.leidinger.net/FreeBSD/dox/netipsec/html/df/d62/ipsec_8h_source.html

尝试在Ubuntu或任何其他版本上进行内核编译。此时深入研究内核修改。我知道这需要时间,但学习曲线会很陡,你会有一个全面的观点。