Sun*_*are -1 patch terminology linux-kernel
我正在阅读 Peter Jay Salzman 的“Linux 内核模块编程”,在那本书中他们说
sys_call_table 不再在 2.6.x 内核中导出。如果你真的想尝试这个 DANGEROUS 模块,你必须对当前内核应用提供的补丁并重新编译它。
任何人都可以向我解释“补丁”的含义,以及重新编译内核的含义。
小智 7
“补丁”是描述对另一个文件的更改的文件(该文件可以是任何内容,包括源代码)。创建和使用补丁的最简单方法之一是使用diff和patch。
假设我们在一个名为的文件中有一个简单的 hello world 程序hello1.c:
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们将字符串更改"Hello world!\n"为"Hi world!\n"并调用新程序hello2.c:
#include <stdio.h>
int main(void)
{
printf("Hi world!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在在终端中运行以下命令:
diff -u hello1.c hello2.c > hello-patch
Run Code Online (Sandbox Code Playgroud)
输出补丁文件的内容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;
}
Run Code Online (Sandbox Code Playgroud)
此文件指示hello1.c和之间的更改hello2.c。
现在假设您已将 的源代码分hello1.c发给您的朋友。这个hello-patch补丁文件可以让你的朋友用patch命令转换hello1.c成hello2.c。如果hello1.c和补丁在同一个目录下,这个命令:
patch < hello-patch
Run Code Online (Sandbox Code Playgroud)
这将“将补丁应用于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 开发是什么样的
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |