如何应用补丁?

如何应用补丁?

我需要应用以下补丁,并且我不想弄乱我到目前为止所拥有的内容。下面我把网上找到的完整内容贴出来,这是有人对我类似问题的回答。

2007 年 3 月 20 日星期二 14:32 -0500,James Bottomley 写道:

MODULE 是否设置为“n”?看起来符号导出 #ifdef MODULE由于某种原因受到保护......除此之外,我无法解释这一点。

事实上,这就是错误......模块化配置是 MODULES 而不是 MODULE。你能试试这个吗:

---
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 0949145..a67f315 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -181,10 +181,8 @@ int scsi_complete_async_scans(void)
        return 0;
 }

-#ifdef MODULE
 /* Only exported for the benefit of scsi_wait_scan */
 EXPORT_SYMBOL_GPL(scsi_complete_async_scans);
-#endif

 /**
  * scsi_unlock_floptical - unlock device via a special MODE SENSE command

我在网上找到了上面的代码作为我遇到的问题的解决方案。我正在尝试为我自己的内核构建模块。我的问题是如何应用上述补丁?我想我必须在一个我可以看到的目录中/drivers,对吧?请问之后我该怎么办?

这是当我发出“make module”来构建内核和相关设备驱动程序时出现的错误:

sansari@ubuntu:~/WORKING_DIRECTORY$ make modules
scripts/kconfig/conf --silentoldconfig Kconfig
sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group
sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/scsi/scsi_wait_scan.o
  Building modules, stage 2.
  MODPOST 1 modules
ERROR: "__aeabi_unwind_cpp_pr0" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "__aeabi_unwind_cpp_pr1" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "scsi_complete_async_scans" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "wait_for_device_probe" [drivers/scsi/scsi_wait_scan.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

@faheem - 谢谢。我仍然不清楚将此更改应用到哪些文件。有人可以解释一下修复程序在做什么吗?它正在更新哪些文件以及如何更新?我对补丁的理解是,将其添加到文件中。更改前后有几行。该程序匹配目标文件中的字符串,然后应用更改。我是否正确地说上述修复正在更改 kconfig 和 scsi_scan.c?

答案1

使用命令应用补丁1patch。您要查找的目录drivers/位于内核源代码树的顶层;你会像这样应用它:

$ cd ~/linux
$ ls
arch           firmware  lib              README          usr
block          fs        MAINTAINERS      REPORTING-BUGS  virt
COPYING        include   Makefile         samples         vmlinux
CREDITS        init      mm               scripts         vmlinux-gdb.py
crypto         ipc       modules.builtin  security        vmlinux.o
debian         Kbuild    modules.order    sound
Documentation  Kconfig   Module.symvers   System.map
drivers        kernel    net              tools
$ patch -p1 < ~/path/patch-file.diff

那里ls只是向您展示正确的目录应该是什么样子。其中一些文件仅在构建后才存在(例如 vmlinux),因此如果它们丢失,请不要担心。-p1忽略补丁中路径名前面的a/和 的方法(不会忽略其中任何一个,会忽略等)b/-p0-p2a/drivers

这有望回答您的问题,但除非您实际上构建了不带可加载模块的内核(如果您正在这样做,则还没有make modules),否则它不太可能修复您所看到的错误。


脚注
1如果您将其用于版本控制,您也可以git应用它们,但我猜您没有。

相关内容