我需要应用以下补丁,并且我不想弄乱我到目前为止所拥有的内容。下面我把网上找到的完整内容贴出来,这是有人对我类似问题的回答。
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
-p2
a/drivers
这有望回答您的问题,但除非您实际上构建了不带可加载模块的内核(如果您正在这样做,则还没有make modules
),否则它不太可能修复您所看到的错误。
脚注
1如果您将其用于版本控制,您也可以git
应用它们,但我猜您没有。