对内核打补丁的正确方法是什么?

对内核打补丁的正确方法是什么?

我正在按照以下说明操作这里设置我的服务器。它指出我必须应用我已下载到机器上的补丁。我的问题是,文章说使用以下命令:

/usr/src/linux # patch -p1 < file.diff //note I replace file.diff w/ routes-2.6.36.16.diff

返回:

-bash: /usr/src/linux: No such file or directory

我继续假设/linux #应该用实际的 Linux 内核版本/目录替换。我尝试使用以下命令:

/usr/src/linux-headers-2.6.35.22 patch -p1 < file.diff

返回的结果相同。当我查看 /usr/src 的内容时,我只有两个目录linux-headers-2.6.35.22linux-headers-2.6.35.22-generic-pae我需要指导如何正确地将补丁应用到内核。

编辑

如果我执行,/usr/src/linux-headers-2.6.35.22/ patch -p1 file.diff我会得到-bash: /usr/src/linux-headers-2.6.35.22: is a directory。我需要知道如何找到需要在此处修补的特定文件...

答案1

您需要下载源代码。您可以通过 apt-src 进行下载,但我(个人)建议直接从内核网站,提取它,修补它(只需使用桌面等本地路径,它根本不需要隐藏在 /usr/src 中!)并按照“老式方法”编译它的说明。

请注意,某些补丁仅适用于内核的某些版本(包括点版本),因此在浪费 20-30 分钟进行编译之前,请确保您的补丁适用于源版本。

但您的具体问题是您需要位于要应用补丁的目录中。对于您的情况:

cd /usr/src/linux-headers-2.6.35.22/
patch -p1 < /path/to/file.diff

显然,要更改补丁的路径(或将其放在同一目录中)。如果源文件归 root 所有,sudo则在 patch 命令前加上前缀,或者sudo su在执行此操作时以 root 身份运行。

答案2

为了避免挫败感,您通常应该按照 Ubuntu 的方式做这些事情。使用官方软件包的完整说明可以在这里找到:

https://help.ubuntu.com/community/Kernel/Compile

它提供了依赖项列表和用于启动和运行自定义内核的分步命令。

按照该过程,您将得到一个包含自定义内核的可卸载包,这意味着您将能够在将来需要时切换回官方内核。

答案3

您所遵循的说明向您显示了命令行提示符/usr/src/linux #,这不是您作为命令的一部分键入的内容。要键入的将应用补丁的命令从此处开始patch并从此处继续。

相关内容