Linux内核补丁

Linux内核补丁

我正在阅读 Peter Jay Salzman 的《Linux 内核模块编程》,在那本书中他们说

sys_call_table 在 2.6.x 内核中不再导出。如果您确实想尝试这个危险模块,您将必须针对当前内核应用提供的补丁并重新编译它。

谁能给我解释一下“补丁”的含义,以及重新编译内核的含义。

答案1

“补丁”是描述对另一个文件的更改的文件(该文件可以是任何内容,包括源代码)。创建和使用补丁的最简单方法之一是使用diffpatch

假设我们在名为 的文件中有一个简单的 hello world 程序hello1.c

#include <stdio.h>

int main(void)
{
  printf("Hello world!\n");
  return 0;
}

现在让我们将字符串更改"Hello world!\n""Hi world!\n"并调用新程序hello2.c

#include <stdio.h>

int main(void)
{
  printf("Hi world!\n");
  return 0;
}

现在在终端中运行以下命令:

diff -u hello1.c hello2.c > hello-patch

输出补丁文件的内容cat hello-patch显示如下:

--- hello1.c    2019-03-18 13:29:35.897546888 -0500
+++ hello2.c    2019-03-18 13:30:02.866456737 -0500
@@ -2,6 +2,6 @@

 int main(void)
 {
-  printf("Hello world!\n");
+  printf("Hi world!\n");
   return 0;
 }

该文件表明了hello1.c和之间的变化hello2.c

现在假设您已将源代码分发给hello1.c您的朋友。这个hello-patch补丁文件可以让你的朋友用patch命令hello1.c改成。hello2.c如果hello1.c和patch在同一目录下,则此命令:

patch < hello-patch

这将“将补丁应用到hello1.c”。完成后,hello1.c将进行更新,现在与hello2.c.

所以补丁只是文件(或文件集)的更改列表,这些补丁允许某人通过应用补丁来选择性地更新文件。

diff和命令patch对于小补丁效果很好。任何大型复杂的事情都需要工业级工具。 Linux 使用git.帮助git系统非常好。例如,git help -a列出所有git帮助主题,并git help format-patch详细说明如何“准备电子邮件提交的补丁”。

Linux 开发是通过电子邮件进行的,您可以在以下位置查看 Linux 开发人员发送的电子邮件的存档:lkml.org, 和kernelnewbies.org是学习 Linux 内核开发的一个很好的起点。请注意,由于您引用的书看起来像是 2009 年出版的,因此其中包含的一些技术细节将会过时。

在这种情况下,“重新编译”只是指在将补丁应用于源之后再次编译。这就像当您运行gcc hello1.c -o hello将源文件编译为可执行代码之类的操作时。本指南描述了构建 Linux本文档描述了构建过程以及可在 Debian 发行版上使用的一些步骤

Linux 开发人员 Greg Kroah-Hartman 在 2016 年的演讲概述了 Linux 开发的情况

答案2

如果您不知道“重新编译内核”和“应用补丁”意味着什么,您应该阅读其他涵盖更多基本主题的 Linux/Unix 相关书籍,而不是花时间尝试从特定的书中获取知识用于 Linux 内核开发,例如 Peter Jay Salzman 的“Linux 内核模块编程”。

我建议您阅读以下书籍(抱歉,如果这篇文章看起来像广告)来开始您获取如何操作类 Unix 操作系统知识的旅程:

  • UNIX 和 Linux 系统管理手册,第四版作者:Evi Nemeth(作者)、Garth Snyder(作者)、Trent R. Hein(作者)、Ben Whaley(作者)
  • Linux 的工作原理:每个超级用户都应该知道什么通过布莱恩·沃德
  • 大教堂和集市:一位偶然的革命者对 Linux 和开源的思考作者:埃里克·S·雷蒙德

相关内容