内核问题
您对您的内核了解多少?像真正了解那样?
考虑到 Linux 内核对世界的重要性——或许同样重要的是,对我们自己的个人电脑和小工具的重要性——令人惊讶的是,大多数人实际上对它知之甚少。
那里可能存在魔法仓鼠,用它们附魔的计算力仓鼠手套推动 1 和 0 四处移动。内核(从广义上讲)实际上是如何工作的?一个人如何坐下来调试特定的 Linux 内核问题?内核如何分配和使用您计算机中的内存?这些是我们大多数人永远不需要问的问题——因为 Linux 运行正常。
我个人?从未向内核提交过任何补丁。一个都没有。
我的意思是,当然。我查看过 Linux 内核源代码的小片段——主要是出于闲散的好奇心,或者为了调查一个故事的主题。而且我编译内核很多次,以使一个硬件驱动程序或功能正常工作。但是,即便如此,我对内核内部工作原理的了解主要限于“Linux 高级用户”级别。
所以,现在是时候在这一期Linux Journal 中进行一个小小的内核训练营,以便更快地了解情况。
让我们从基础开始。什么是内核?一个人究竟如何创建一个全新的内核?比如……从头开始。
Linux Journal 特约编辑 Petros Koutoupis 之前曾带领我们完成了构建完整 Linux 发行版的过程(从最基础的开始——参见 第一部分 和 第二部分)。现在他做了同样的事情,但这次是构建一个全新的内核。
需要哪些工具?必须编写哪些代码?Petros 提供了内核构建的逐步说明。最后,您将拥有一个功能齐全的内核(嗯,功能足够启动计算机,至少在某种程度上),您可以在此基础上进一步构建。此外,您将更好地理解内核实际是如何工作的,这非常酷。
回到 Linux 领域,Frank Edwards 概述了内核如何处理内存:虚拟内存如何工作和结构化,内核如何向用户空间应用程序报告内存使用情况和信息等。如果您曾经想知道系统中的内存是如何结构化以及如何与应用程序和内核交互的,请阅读一下。
现在您已经了解了如何构建内核的基础知识,以及内存使用方式的入门知识,让我们转向对 Linux 开发人员和专业用户直接有用的内容:调试 Linux 内核崩溃。
假设,假设一下,您的机器发生了内核崩溃。当然,它们很少见,但它们确实会发生!但是,但是,它们为什么会发生?您如何深入挖掘并找出这种灾难性事件背后的原因?
我们请回 Petros Koutoupis,详细介绍如何做到这一点。希望您永远不需要调试内核崩溃。但是,以防万一,最好做好准备。(用一位著名的洞穴像素老人的话来说,“独自一人去很危险!带上这个。”)
所有这些信息都很棒——详细、技术性强且极客范十足(以最好的方式)。
但是,让我们暂时站在更高的层面来看待问题。成为一名内核开发人员实际上是什么样的?
是什么让他们走上内核编程之路?内核开发人员的平均一天是什么样的?他们对 Linux 有哪些不满(每个项目的每个开发人员都对它有抱怨)?
为了回答这些问题,我与来自 Linux 世界中最活跃的三家公司:Red Hat、SUSE 和 Intel 的杰出内核开发人员进行了交流。(由于我们有这三家公司的代表,这似乎是一个讨论他们如何与其他公司(通常是竞争对手)的内核开发人员互动的好机会。)
最后,在阅读完后续页面中的所有文章后,也许您会被激励迈出进入 Linux 内核工作世界的第一步。或者,见鬼,也许你不会。但是,无论哪种方式,您都希望对 Linux(以及,通过扩展,您自己的计算机)的工作原理有更深入的了解。
这会让人感到赋权。而且很棒。而且是 Linux 的方式。
订阅者,您可以下载您的五月刊。
还不是订阅者?现在还不晚。立即订阅即可立即访问本期以及自 1994 年以来的所有过刊。
想购买单期杂志?在 LJ 商店购买五月杂志或其他单期过刊。