![对内核打补丁的正确方法是什么?](https://linux22.com/image/956662/%E5%AF%B9%E5%86%85%E6%A0%B8%E6%89%93%E8%A1%A5%E4%B8%81%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在按照以下说明操作这里设置我的服务器。它指出我必须应用我已下载到机器上的补丁。我的问题是,文章说使用以下命令:
/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.22
,linux-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
并从此处继续。